IAM
AWS Identity and Access Management(IAM)を使用すると、ユーザー、セキュリティ認証情報、およびユーザーとアプリケーションがアクセスできるAWSリソースを制御するアクセス許可を集中管理できます。
IAMの機能
- AWSアカウントへの共有アクセス
- 詳細なアクセス権限
- Amazon EC2で動作するアプリケーションからAWSリソースへの安全なアクセス
- 多要素認証(MFA)
- ID フェデレーション
- 保証のためのID情報
- PCI DSSへの準拠
- 多くのAWSサービスとの統合
- 結果整合性
- 使用量無料
IAMへのアクセス
- AWS Management Console
- AWS コマンドラインツール
- AWS SDK
- IAM HTTPS API
IAMの仕組み
用語
IAMリソース
IAMに保存されているユーザー、グループ、ロール、ポリシー、およびIDプロバイダー。AWSサービスと同様に、IAMのリソースを追加、編集、削除することができる
IAMアイデンティ
識別し、グループ化するために使用されるIAMリソースオブジェクト。IAMユーザーにポリシーをアタッチすることができる。ユーザー、グループ、ロールなど
IAMエンティティ
AWSによって認証に使用されるIAMリソースオブジェクト
プリンシバル
AWSにサインインし、リクエストを作成するためにAWSアカウントルートユーザー、またはIAMロールを使用する人またはアプリケーション。フェデれーティッドユーザーと引き受けたロールが含まれる。
- ベストプラクティス
ルートユーザーは日常業務には使用しない。代わりにIAMエンティティを作成して利用する。
リクエスト
リクエストには以下の情報が含まれる
- アクションまたはオペレーション
- プリンシバルが実行するアクションまたはオペレーション
- リソース
- アクションまたはオペレーションを実行する対象のAWSリソースオブジェクト
- プリンシバル
- エンティティを使用してリクエストを送信するユーザーまたはアプリケーション
- 環境データ
- IPアドレス、ユーザーエージェント、SSL有効化ステータス、または時刻に関する情報
- リソースデータ
- リクエストされているリソースに関連するデータ
認証
プリンシバルとして、AWSに認証情報を使用してリクエストを送信するには、認証されている必要がある。(AWSサインイン)
- ルートユーザー
- Eメール
- パスワード
- IAMユーザー
- アカウントID またはエイリアス
- ユーザー名
- パスワード
- 追加のセキュリティ情報(MFAなど)
承認
承認の際に、AWSはリクエストコンテキストの値に基づいて、リクエストに適用されるポリシーを確認します。次に、ポリシーを使用してリクエストの可否を決定します。
- デフォルトではすべてのリクエストが拒否される
- アクセス許可ポリシー(アイデンティベースまたはリソースベース)に明示的な許可が含まれている場合、デフォルト設定は上書きされる
- Organizations SCP, IAMアクセス許可の境界、またはセッションポリシーがある場合、その許可は上書きされる
- ポリシー内の明示的な拒否は、すべての許可に優先される
アクションまたはオペレーション
IAMは以下のアクションを含む約40のアクションをサポートしている
- CreateUser
- DeleteUser
- GetUser
- UpdateUser
リソース
AWSで承認されたリクエスト内のオペレーションは、アカウント内の関連リソースに対して実行できる。リソースは、サービス内に存在するオブジェクト
IAMユーザー
AWSサービスに対して様々な操作を行うユーザ
アクセスの種類
プログラムによるアクセス
AWS API, CLI, SDKなどの開発ツールへのアクセスキーIDとシークレットアクセスキーを有効にする
AWSマネジメントコンソールへのアクセス
ユーザにAWSマネジメントコンソールへのサインインを許可するためのパスワードを有効にする
ユーザグループ
ユーザグループはIAMユーザーの集合で、グループを使用して、ユーザの集合に対するアクセス許可を指定できる。 グループ内にユーザを追加でき、グループ毎にアクセス許可ポリシーを設定できる。
ポリシー
IDまたはリソースにアタッチされたときに、そのアクセス許可を定義するエンティティ
JSONでポリシーを作成
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
}
- Version - 使用するポリシーの言語のバージョン。
2012-10-17
(最新)バージョンを使用する - Statement - ポリシーのメイン要素
- Sid - 複数のステートメントを区別するためのステートメントID
- Effect -
Allow
またはDeny
を定義。アクセスの許可を指定する。 - Principal - リソースベースのポリシーを作成する場合は、アクセスを許可または拒否するアカウント、ユーザー、ロール、またはフェデれーティッドユーザを指定する必要がある。
- Action - ポリシーで許可または拒否するアクションのリスト
- Resource - IAMアクセス許可ポリシーを作成する場合は、アクションが適用されるリソースを指定する必要がある。
- Condition - ポリシーでアクセス許可を付与する状況を指定する
ポリシーの例(参照)
ロール
特定のアクセス権限を持ち、アカウントで作成できるIAMアイデンティ。IAMロールは、AWSで許可/禁止する操作を決めるアクセス権限ポリシーが関連付けられているAWSアイデンティであるという点で、IAMユーザーと似ているが、ユーザーは一人の特定の人に一位に関連付けられるのに対し、ロールはそれを必要とする任意の人が引き受けるようになっている。
使用可能な範囲
- ロールと同じAWSアカウントのIAMユーザー
- ロールとは異なるAWSアカウントのIAMユーザー
- EC2等、AWSが提供するウェブサービス
- SAML2.0またはOpenID Connectと互換性のある外部IDプロバイダー(Idp)サービスによって認証される外部ユーザ、またはカスタム作成されたたIDブローカー
ロールの用語と概念
AWSサービスロール
サービスが顧客に変わって、顧客のアカウントでアクションを実行するために引き受けるロール。
EC2インスタンスのAWSサービスロール
アプリケーションがEC2上で実行しているサービスロールの特殊なタイプは、アカウントでアクションの実行を引き受けることが出来る。このロールはEC2インスタンス起動時に割り当てられる。
AWSサービスにリンクされたロール
AWSサービスに直接リンクされた一意のタイプのサービスロール。 サービスにリンクされたロールは、サービスによって事前定義されており、他のサービスを呼び出す必要のあるアクセス権限がすべて含まれている。
ロールの連鎖
ロールの連鎖は、AWS CLIまたはAPIを利用して2つ目のロールを引き受けるロールを使用する場合に発生する。ロールを引き受けるときは、セッションタグを渡して、タグを推移的に設定可能。ロールセッションは最長で1時間で制限されている。
委任
委任により、制御するリソースへのアクセス許可するユーザにアクセス許可を付与できる。委任には、2つのアカウント間の信頼を設定することが含まれる。1つ目は、リソースを所有するアカウント、2つ目はリソースにアクセスする必要があるユーザを含むアカウント。以下のいずれかを指定可能
- 同じアカウント
- 組織の制御下にある別々のアカウント
- 異なる組織によって所有される2つのアカウント
フェデレーション
外部IDプロバイダーとAWSとの間に信頼関係を作成すること。
フェデレーティッドユーザ
IAMユーザを作成する代わりに、AWS Directory Service、エンタープライズユーザディレクトリ、またはウェブIDプロバイダーに既存のアイデンティを使用できるユーザのこと
信頼ポリシー
ロールを引き受けるために信頼するプリンシバルを定義するJSONポリシードキュメント
アクセス許可ポリシー
ロールで使用できるアクションやリソースを定義するJSON形式のアクセス許可に関するドキュメント。
アクセス許可の境界
ポリシーを使用して、アイデンティティベースのポリシーがロールに付与出来るアクセス許可の上限を設定する機能。
プリンシバル
アクションを実行してリソースにアクセスできるAWS内のエンティティ。以下2つの方法をいずれかを使用して、リソースに対するアクセス許可を付与できる
- ユーザまたはロールに対し、アクセス権限ポリシーをアタッチすることができる
- リソースベースのポリシーをサポートするサービスについては、リソースにアタッチされているポリシーの
Principal
要素でプリンシバルを指定出来る
クロスアカウントアクセスのロール
あるアカウントのリソースに対するアクセス権限を、別のアカウントの信頼されるプリンシバルに付与するロール。
IAM IDプロバイダ
IAM IDプロバイダ(IdP)は、AWS外のユーザーIDを管理します。
サポートされているタイプ
- SAML
- OpenID Connect