IAM の仕組み
IAM は、AWS アカウント の認証と許可を制御するために必要なインフラストラクチャを提供します。IAM のインフラストラクチャーは、次の図で示されています。

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