IAM の仕組み
AWS Identity and Access Management は、AWS アカウントの認証と認可を管理するために必要なインフラストラクチャを提供します。
まず、人間のユーザーまたはアプリケーションがサインイン認証情報を使用して AWS と認証します。IAM は、サインイン認証情報を、AWS アカウント が信頼するプリンシパル (IAM ユーザー、フェデレーションユーザー、IAM ロール、またはアプリケーション) と照合し、AWS にアクセスするための許可を認証します。
次に、IAM はリソースへのアクセスをプリンシパルに付与するようリクエストします。IAM は、認可リクエストに応じてアクセスを許可または拒否します。例えば、コンソールに初めてサインインしてコンソールのホームページを開いたときは、特定のサービスにアクセスしているわけではありません。サービスを選択すると、そのサービスの IAM に認可リクエストを送信することになります。IAM は、認可されたユーザーのリストにユーザーの ID が含まれていることを検証し、付与されるアクセスレベルを制御するポリシーを決定して、有効な他のポリシーを評価します。AWS アカウント 内のプリンシパルまたは信頼する他の AWS アカウント は認可リクエストを実行できます。
認可されると、プリンシパルはユーザー内の AWS アカウント リソースに対してアクションや操作を実行したりできます。例えば、プリンシパルは新しい Amazon Elastic Compute Cloud インスタンスを起動したり、IAM グループメンバーシップを変更したり、Amazon Simple Storage Service バケットを削除したりできます。次の図は、IAM インフラストラクチャを通じたこのプロセスを示しています。
リクエストのコンポーネント
プリンシパルが AWS Management Console、AWS API、または AWS CLI を使用しようとすると、プリンシパルは AWS にリクエストを送信します。リクエストには、以下の情報が含まれます。
-
[アクションまたはオペレーション] – プリンシパルが実行するアクションまたはオペレーション (AWS Management Console のアクション、AWS CLI または AWS API のオペレーションなど)。
-
リソース – プリンシパルがアクションまたはオペレーションの実行をリクエストする AWS リソースオブジェクト。
-
プリンシパル – エンティティ (ユーザーまたはロール) を使用してリクエストを送信するユーザーまたはアプリケーション。プリンシパルに関する情報には、許可ポリシーが含まれます。
-
環境データ – IP アドレス、ユーザーエージェント、SSL 有効化ステータス、およびタイムスタンプに関する情報。
-
[リソースデータ] – DynamoDB テーブル名や Amazon EC2 インスタンスのタグなど、リクエストされたリソースに関連するデータ。
AWS は、リクエスト情報をリクエストコンテキスト内に収集します。IAM は、リクエストを認可するためにこれを評価します。
プリンシパルの認証方法
プリンシパルは、認証情報を使用して AWS にサインインします。IAM は、プリンシパルが AWS にリクエストを送信するのを許可するためにこの認証情報を認証します。Amazon S3 や AWS STS などの特定のサービスは、匿名ユーザーからの少数のリクエストを許可します。ただし、これは例外的です。各タイプのユーザーは認証を通過します。
-
[ルートユーザー] – 認証に使用されるサインイン認証情報は、AWS アカウント を作成するために使用したメールアドレスと、その時点で指定したパスワードです。
-
[フェデレーションユーザー] – ID プロバイダーはユーザーを認証し、認証情報を AWS に渡します。AWS に直接サインインする必要はありません。IAM アイデンティティセンターと IAM はどちらもフェデレーションユーザーをサポートしています。
-
AWS IAM アイデンティティセンターディレクトリ のユーザー (フェデレーションユーザーではない) – IAM アイデンティティセンターのデフォルトディレクトリで直接作成されたユーザーは、AWS アクセスポータルを使用してサインインし、ユーザー名とパスワードを指定します。
-
[IAM ユーザー] – アカウント ID またはエイリアス、ユーザー名、パスワードを指定してサインインします。API または AWS CLI からワークロードを認証するには、ロールの引き受けを通じて一時的な認証情報を使用することも、アクセスキーとシークレットキーを指定して長期的な認証情報を使用することもできます。
AWS では、すべてのユーザーで多要素認証 (MFA) を使用して、アカウントのセキュリティを強化することを推奨しています。MFA の詳細については、「IAM の AWS 多要素認証」を参照してください。
認可と許可ポリシーの基本
認可とは、リクエストを完了するために必要な許可を持つプリンシパルをいいます。認可中に、IAM はリクエストコンテキストの値を使用して、リクエストに適用されるポリシーを識別します。次に、ポリシーを使用してリクエストの許可または拒否を決定します。IAM は、ほとんどの許可ポリシーを、プリンシパルエンティティ用の許可を指定する JSON ドキュメントとして保存します。
認可リクエストに影響を及ぼす可能性のあるポリシーにはいくつかの種類があります。アカウント内の AWS リソースにアクセスするための許可をユーザーに付与するには、ID ベースのポリシーを使用できます。リソースベースのポリシーにより、クロスアカウントアクセスを付与できます。別のアカウントでリクエストを作成するには、他のアカウントのポリシーでリソースへのアクセスを許可する必要があります。また、リクエストを作成するために使用する IAM エンティティには、リクエストを許可する ID ベースのポリシーが必要です。
IAM は、リクエストのコンテキストに該当する各ポリシーをチェックします。IAM ポリシー評価では明示的な拒否が使用されます。つまり、1 つの許可ポリシーに拒否されたアクションが含まれている場合、IAM はリクエスト全体を拒否し、評価を停止します。リクエストはデフォルトで拒否されるため、IAM がリクエストを認可するようにするには、適用可能な許可ポリシーでリクエストのすべての部分を許可する必要があります。単一アカウント内のリクエストの評価ロジックは、以下の基本的なルールに基づきます。
-
デフォルトでは、すべてのリクエストが拒否されます。(通常、AWS アカウントのルートユーザー 認証情報を使用したアカウントのリソースに対するリクエストは常に許可されます)。
-
アクセス許可ポリシー (アイデンティティベースまたはリソースベース) に明示的な許可が含まれている場合、このデフォルト設定は上書きされます。
-
Organizations サービスコントロールポリシー (SCP) またはリソースコントロールポリシー (RCP)、IAM アクセス許可の境界、またはセッションポリシーが存在する場合、許可がオーバーライドされます。上記のポリシータイプが 1 つ以上存在する場合は、そのすべてにおいてリクエストが許可されている必要があります。それ以外の場合、リクエストは暗黙的に拒否されます。SCP および RCP の詳細については、「AWS Organizations ユーザーガイド」の「Authorization policies in AWS Organizations」を参照してください。
-
ポリシーにおける明示的な拒否は、ポリシーの許可をオーバーライドします。
詳細については、「ポリシーの評価論理」を参照してください。
IAM がプリンシパルを認証および認可すると、IAM は、プリンシパルに適用される許可ポリシーを評価することで、リクエスト内のアクションまたはオペレーションを承認します。各 AWS サービスは、サポートするアクション (オペレーション) を定義し、リソースの表示、作成、編集、削除など、リソースに対して実行できる操作が含まれます。プリンシパルに適用される許可ポリシーには、オペレーションを実行するために必要なアクションが含まれている必要があります。IAM が許可ポリシーを評価する方法の詳細については、「ポリシーの評価論理」を参照してください。
サービスは、プリンシパルが各リソースに対して実行できる一連のアクションを定義します。許可ポリシーを作成する際には、ユーザーに実行させたいアクションを必ず含めてください。例えば、IAM は、ユーザーリソースに対して、次の基本的なアクションを含む 40 超のアクションをサポートしています。
-
CreateUser
-
DeleteUser
-
GetUser
-
UpdateUser
さらに、リクエストが指定された条件を満たすときにリソースへのアクセスを付与する旨の条件を許可ポリシーで指定できます。例えば、特定の日付よりも後にポリシーステートメントを有効にしたり、API に特定の値が表示されたときにアクセスを制御したりする必要がある場合があります。条件を指定するには、ポリシーステートメントの Condition 要素を使用します。
IAM がリクエスト内のオペレーションを承認すると、プリンシパルはアカウント内の関連リソースを操作できるようになります。リソースは、サービス内に存在するオブジェクトです。例として、Amazon EC2 インスタンス、IAM ユーザー、Amazon S3 バケットなどがあります。プリンシパルが許可ポリシーに含まれていないリソースに対してアクションを実行するリクエストを作成すると、サービスはリクエストを拒否します。例えば、IAM ロールを削除するための許可はあるが、IAM グループを削除するための許可がない場合に、IAM グループの削除をリクエストすると、リクエストは失敗します。さまざまな AWS サービスがサポートするアクション、リソース、および条件キーの詳細については、「Actions, Resources, and Condition Keys for AWS Services」を参照してください。