IAM の仕組みについて
ユーザーを作成する前に、IAM の機能を理解しておく必要があります。IAM は、アカウントの認証と許可を制御するために必要なインフラストラクチャを提供します。IAM インフラストラクチャには以下のエレメントが含まれています。

Terms
IAM の用語について説明します。
- IAM リソース
-
IAM に保存されているユーザー、グループ、ロール、ポリシー、および ID プロバイダー。AWS サービスと同様に、IAM のリソースを追加、編集、削除することができます。
- IAM アイデンティティ
-
識別し、グループ化するために使用される IAM リソースオブジェクト。IAM ユーザーにポリシーをアタッチすることができます。ユーザー、グループ、およびロールなどがあります。
- IAM エンティティ
-
AWS によって認証に使用される IAM リソースオブジェクト。これらには、IAM ユーザーおよびロールが含まれます。
- プリンシパル
-
AWS アカウント にサインインし、リクエストを作成するために AWS のルートユーザー、IAM ユーザー、または IAM ロールを使用する人またはアプリケーション。プリンシパルには、フェデレーティッドユーザーと引き受けたロールが含まれます。
Principal
プリンシパルは、AWS リソースのアクションまたはオペレーションに対してリクエストできるユーザーまたはアプリケーションを指します。プリンシパルは、AWS アカウント のルートユーザー または IAM エンティティとして認証され、AWS にリクエストを行うことができます。ベストプラクティスとして、ルートユーザー 認証情報は日常業務に使用しないでください。代わりに、IAM エンティティ (ユーザーおよびロール) を作成します。フェデレーティッドユーザーやプログラムによるアクセスをサポートし、AWS アカウントへのアクセスをアプリケーションに許可することもできます。
Request
プリンシパルが AWS Management Console、AWS API、または AWS CLI を使用しようとすると、プリンシパルは AWS にリクエストを送信します。リクエストには、以下の情報が含まれます。
-
アクションまたはオペレーション – プリンシパルが実行するアクションまたはオペレーション。AWS Management Console ではアクション、AWS CLI や AWS API ではオペレーションです。
-
リソース – アクションまたはオペレーションを実行する対象の AWS リソースオブジェクト。
-
プリンシパル – エンティティ (ユーザーまたはロール) を使用してリクエストを送信するユーザーまたはアプリケーション。プリンシパルに関する情報には、プリンシパルがサインインに使用したエンティティに関連付けられたポリシーが含まれます。
-
環境データ – IP アドレス、ユーザーエージェント、SSL 有効化ステータス、または時刻に関する情報。
-
リソースデータ – リクエストされているリソースに関連するデータ。これには、DynamoDB テーブル名、Amazon EC2 インスタンスのタグなどの情報が含まれる場合があります。
AWS は、リクエスト情報をリクエストコンテキスト内に収集し、リクエストの評価と承認に使用します。
Authentication
プリンシパルとして、AWS に認証情報を使用してリクエストを送信するには、認証されている必要があります (AWS にサインイン)。Amazon S3 や AWS STS などの一部のサービスは、匿名ユーザーからの少数のリクエストを許可します。ただし、これは例外的です。
コンソールから ルートユーザー として認証するには、E メールアドレスとパスワードでサインインする必要があります。IAM ユーザーとして、アカウント ID またはエイリアスを入力してから、ユーザー名とパスワードを入力します。API または AWS CLI から認証するには、アクセスキーとシークレットキーを指定する必要があります。また、追加のセキュリティ情報を提供する必要があります。例えば、AWS では多要素認証 (MFA) を使用してアカウントのセキュリティを高めることを推奨しています。AWS が認証できる IAM エンティティの詳細については、「IAM ユーザー」および「IAM ロール」を参照してください。
Authorization
また、リクエストを完了する権限がある (許可されている) 必要があります。承認の際に、AWS はリクエストコンテキストの値に基づいて、リクエストに適用されるポリシーを確認します。次に、ポリシーを使用してリクエストの許可または拒否を決定します。通常、ポリシーは JSON ドキュメントとして AWS に保存され、プリンシパルエンティティのアクセス許可を指定します。複数のポリシータイプがリクエストの承認/却下に影響する場合があります。ユーザーに許可したアクセス許可でユーザー自身のアカウント内の AWS リソースにアクセスする場合は、アイデンティティベースのポリシーのみが必要です。リソースベースのポリシーは、一般的にクロスアカウントアクセスを許可するために使用します。他のポリシータイプはアドバンスド機能であり、慎重に使用する必要があります。
AWS は、リクエストのコンテキストに該当する各ポリシーをチェックします。1 つのアクセス許可ポリシーに拒否されたアクションが含まれている場合、AWS はリクエスト全体を拒否し、評価を停止します。このプロセスは明示的な拒否と呼ばれています。リクエストはデフォルトで拒否されるため、AWS では、リクエストのすべての部分が該当するアクセス許可ポリシーによって許可された場合に限り、リクエストを承認します。単一アカウント内のリクエストの評価ロジックは、以下の一般的なルールに基づきます。
-
デフォルトでは、すべてのリクエストが拒否されます。(通常、AWS アカウント のルートユーザー認証情報を使用したアカウントのリソースに対するリクエストは常に許可されます)。
-
アクセス許可ポリシー (アイデンティティベースまたはリソースベース) に明示的な許可が含まれている場合、このデフォルト設定は上書きされます。
-
組織 SCP、IAM アクセス許可の境界、またはセッションポリシーがある場合、その許可は上書きされます。上記のポリシータイプが 1 つ以上存在する場合は、そのすべてにおいてリクエストが許可されている必要があります。それ以外の場合、リクエストは暗黙的に拒否されます。
-
ポリシー内の明示的な拒否は、すべての許可に優先します。
すべてのタイプのポリシーの評価方法については、「ポリシーの評価論理」を参照してください。別のアカウントでリクエストを作成する必要がある場合は、他のアカウントのポリシーでリソースへのアクセスを許可する必要があります。また、リクエストを作成するために使用する IAM エンティティには、リクエストを許可するアイデンティティベースのポリシーが必要です。
アクションまたはオペレーション
リクエストが認証および承認されると、AWS はリクエストのアクションまたはオペレーションを承認します。オペレーションはサービスによって定義されます。オペレーションは、リソースの表示、作成、編集、削除など、リソースに対して実行できる処理です。たとえば、IAM は、ユーザーリソースに対して、以下のアクションを含む約 40 のアクションをサポートしています。
-
CreateUser
-
DeleteUser
-
GetUser
-
UpdateUser
オペレーションを実行することをプリンシパルに許可するには、プリンシパルまたは対象のリソースに適用されるポリシーに、必要なアクションを含める必要があります。各サービスでサポートされているアクション、リソースタイプ、および条件キーのリストについては、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。
Resources
AWS で承認されたリクエスト内のオペレーションは、アカウント内の関連リソースに対して実行できます。リソースは、サービス内に存在するオブジェクトです。例として、Amazon EC2 インスタンス、IAM ユーザー、Amazon S3 バケットなどがあります。このサービスは、各リソースで実行できる一連のアクションを定義します。関連していないアクションをリソースに対して実行するリクエストを作成すると、そのリクエストは拒否されます。たとえば、IAM ロールの削除をリクエストしても IAM グループリソースを指定すると、そのリクエストは失敗します。アクションの影響を受けるリソースを示す AWS のサービス別の表については、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。