はじめに
AWSで色々試すために、まずは基本的なIAMを触りました。
以下まとめましたが、わかりづらいところ、間違っているところあったらすみません。。
AWS IAMについて
AWS IAM(Identity Access Management)は、AWSのサービスやリソースへのアクセスを管理するサービスです。ほぼすべてのAWSサービスにおいて、アクセス権限の管理はIAMで行われます。
IAMを使用して以下が実施できます。
- IAMユーザー/IAMロールを使用することで、AWSリソースへのアクセスが可能になります。
- IAMユーザーはIAMグループでグルーピングが可能です。
- IAMユーザー、IAMロール、IAMグループにIAMポリシーをアタッチすることで、アクセス制御をします。
IAMロールは、STS(Security Token Service)から一時的な認証情報を入手してAWSリソースにアクセスするため、情報流出のリスクが少なく利用を推奨されています。
IAMおよびSTSの利用料金は無料です。
ユーザーについて
AWSのリソースは、ルートユーザーまたはAWS IAMユーザーで操作します。
ルートユーザーとは、AWSに登録したときに作成される最初のユーザーのことです。Eメールアドレスでログインし、アカウントの契約の変更や解約等が行える、強い権限を持っています。
誤操作を防ぐため、原則ルートユーザーは使用せず、IAMユーザーを使うことがAWSでのベストプラクティスになります。
IAMユーザー
IAMユーザーは、AWSアカウント内で作成できるユーザーです。これを使用するとAWSの各種リソースを操作することができます。
しかし、IAMユーザーで操作できる内容は、IAMユーザーに紐づけられるIAMポリシーに依存します。
IAMポリシー
IAMポリシーとは、AWSリソースへのアクセスの権限を制御する機能です。IAMユーザーやIAMグループにIAMポリシーを紐づけ、どのサービスのどのリソースをだれが実行するか、等を細かく制御します。
IAMポリシーはJSON形式で記述します。以下に例を記載します。
{
"Version": "2012-10-17", #IAMポリシーの書式のバージョン(固定値)
"Statement": [ #実際に付与する権限と条件を記述。{}で囲まれたものはステートメントブロックという
{
"Sid": "WorkerNodePermissions", #IAMポリシー作成時に任意で決められる識別子
"Effect": "Allow", #後述のActionに記述した内容の許可/拒否の決定
"Action": [ #実際に制御したい操作を記述する
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"ec2:DescribeRouteTables",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVolumes",
"ec2:DescribeVolumesModifications",
"ec2:DescribeVpcs",
"eks:DescribeCluster",
"eks-auth:AssumeRoleForPodIdentity"
],
"Resource": "*" #制御するリソースの対象をARN形式で指定する
"Condition": { #制御を行う際の条件を記述できる、オプション機能
"ec2;ResourceTag/Name": "Sample"
}
}
]
}
- Version:IAMポリシーの書式のバージョンで、値は固定値です。
- Statement:実際に付与する権限と条件を記述。{}で囲まれたものはステートメントブロックです。またステートメントブロックは、ステートメント内に複数記述ができます。
- Statement Block:ステートメント内に{}で囲まれたものをステートブロックといいます。実勢に制御する権限と条件を記述します。
- Sid:ユーザがIAMポリシー作成時に任意で決められる識別子です。IAMポリシーがこの値を使用することはありません。
- Effect:Actionに記述した内容を許可(Allow)するか拒否(Deny)するか記述しています。
- Action:実際に制御したい操作を記述します。複数のアクションを含めたり、ワイルドカード(*)を使用することができます。(例:ec2:\* )
- Resource:制御するリソースの対象をARN形式で指定できます。またワイルドカード(*)を使用することができます。
- Condition:オプションです。制御を行う際の条件を記述することができます。
IAMグループ
IAMグループは、IAMユーザーをグループ分けします。IAMユーザーは複数のIAMグループに所属でき、それぞれのIAMグループには複数のIAMポリシーをアタッチできます。
そして、IAMグループにアタッチされたIAMポリシーと、IAMユーザーにアタッチされたIAMポリシー両方の権限が付与されます。
なお、IAMユーザーに複数のIAMポリシーをアタッチするのは管理が煩雑となるため、IAMポリシーをアタッチさせたIAMグループにIAMユーザーを所属させることで権限管理をすることが推奨されています。
IAMロール
IAMロールは、AWSリソースに紐づけられる役割です。ちなみに、IAMロールにもIAMポリシーをアタッチすることが出来ます。IAMロールは、各リソースに対して1つ割り当てられます。
AWSリソースはIAMロールを使用することが一般的です。
STS(AWS Srcurity Token Service)
STS(AWS Srcurity Token Service)は、AWSリソースや、IAMユーザーを持っていないユーザーやアプリケーションに対して、一時的に利用できるにんしょうけんげん(IAMロールの一時的なアクセスキー)を付与する機能です。この一時的な認証情報を請求する操作を「AssumeRole」(ロールの引継ぎ)と呼びます。
STSを使用することでIAMユーザーを作る必要がなくなり、IAMユーザーごとに作成されるアクセスキーの管理が不要になります。
STSの代表的な使用例として、異なるAWSアカウントによるAWSリソースの操作(クロスアカウントアクセス)があります。
A社のAWSアカウントがB社のAWSアカウントに存在するAWSサービスにアクセス・操作したい場合、B社にて事前にAssumeRoleを対象のアカウント、ロールに許可するよう設定を行います。そうすることで、以下の流れでA社はB社のAWSサービスを利用することができます。
- A社からB社にAssumeRoleを要求
- B社のSTSが一時認証情報をA社に送付
- A社が一時認証情報を使用して、B社の対象のIAMロールとしてアクセス
AWSリソースへのアクセス
以下のような流れでAWS各種リソースへアクセスします。
- AWSリソースへアクセスするプリンシパル(ユーザーやアプリケーション)が、IAMユーザーやIAMロールを使用して認証を行う。
- 前項の認証後、IAMユーザーまたはIAMロールを使用して、AWSリソースにリクエストを送る。
- IAMユーザーやIAMロールにアタッチされたIAMポリシーに基づき、リソースの捜査権限の有無を評価する。ここで権限がない場合には、リソースの操作に失敗する。
IAMユーザーの作成(手順)
AWSを利用するにあたり、IAMユーザーが推奨されているので作成します!!!
IAMユーザーはまだひとつも作成していないため、まずはIAMユーザーの王様、フルコン権限を持つAdministratorユーザーを作成します。
・・の前に、IAMユーザー作成時にIAMグループをアタッチする箇所があるので、先にIAMグループを作成してしまいます。
- ルートユーザーでログイン
- Administrator用のIAMグループの作成
- Administrator権限を持つIAMユーザーの作成
- IAMユーザーでログインする
ルートユーザーでログイン
- AWSマネジメントコンソールにログインします。
https://aws.amazon.com/jp/console/ - ルートユーザーでログインします。
- AWSマネジメントコンソール画面から
IAM
を検索し、選択します。
Administrator用のIAMグループの作成
-
以下の設定を実施し、
ユーザーグループを追加
を押下します。
Administrator権限を持つIAMユーザーの作成
-
以下の設定を実施し、
次へ
を押下します。 -
以下の設定を実施し、
次へ
を押下します。 -
パスワードを取得画面にて、コンソールサインインの詳細情報を取得します。
.csvファイルをダウンロード
を押下すれば、ログイン情報が記載されているファイルをダウンロードできます。
IAMユーザーでログインする
-
AWSマネジメントコンソールにログインします。
https://aws.amazon.com/jp/console/ -
以下のログイン情報を記入し、
Sign in
を押下します。 -
パスワード変更画面に遷移するので、新しいパスワードを作成します。