AWS Identity and Access Management
ユーザーガイド

GetFederationToken のアクセス権限

セッションポリシーは、フェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。フェデレーティッドユーザーのセッションを作成するには、IAM ユーザーのアクセスキーを使用して、API の GetFederationToken オペレーションをプログラムで呼び出します。この方法で、セッションポリシーを渡した場合、結果として得られるセッションには、IAM ユーザーのアイデンティティベースのポリシーおよびセッションポリシーの両方で付与されるアクセス許可のみが含まれます。

フェデレーティッドユーザーに割り当てるアクセス権限は、次の 2 か所のどちらかで定義されます。

  • GetFederationToken API コールのパラメータとして渡されるセッションポリシー。(こちらが普通です)。

  • ポリシーの Principal エレメントでフェデレーティッドユーザーを明示的に指名するリソースベースのポリシー(こちらはそれほど一般的ではありません)。

つまり、ほとんどの場合、GetFederationToken API 呼び出しでポリシーを渡さなければ、返される一時的なセキュリティ認証情報はアクセス許可を持ちません。唯一の例外は、ポリシーの Principal エレメントでフェデレーティッドユーザーセッションを具体的に参照するリソースベースのポリシーを持つリソースに、認証情報を使用してアクセスする場合です。

次の図は、ポリシーがどのように相互作用して、GetFederationToken の呼び出しによって返される一時的なセキュリティ認証情報のアクセス許可が決まるかを視覚的に示しています。

例: GetFederationToken を使用してアクセス権限を割り当てる

GetFederationToken API アクションをさまざまなポリシーと共に使用できます。ここにいくつか例を挙げます。

IAM ユーザーにアタッチされたポリシー

この例では、2 つのバックエンドウェブサービスに頼ったブラウザベースのクライアントアプリケーションがあります。1 つのバックエンドサービスは、独自の ID システムを使用してクライアントアプリケーションを認証する独自の認証サーバーです。もう 1 つのバックエンドサービスは、クライアントアプリケーションの機能の一部を提供する AWS サービスです。クライアントアプリケーションはサーバーによって認証され、サーバーは適切なアクセス許可ポリシーを作成または取得します。サーバーは、続いて、GetFederationToken API を呼び出して一時的なセキュリティ認証情報を取得し、その認証情報をクライアントアプリケーションに返します。クライアントアプリケーションは、その後、一時的なセキュリティ認証情報を使って AWS サービスに対してリクエストを直接行うことができます。このアーキテクチャでは、AWS 長期的認証情報を埋め込まなくても、クライアントアプリケーションが AWS リクエストを実行できます。

認証サーバーは、token-app という名前の IAM ユーザーの長期的なセキュリティ認証情報を使用して GetFederationToken API を呼び出しますが、長期的な IAM ユーザー認証情報はサーバーにとどまり、クライアントには決して配布されません。以下の例のポリシーは、token-app IAM ユーザーにアタッチされ、フェデレーティッドユーザー (クライアント) が必要とする最も広範なアクセス許可を定義します。フェデレーティッドユーザーの一時的なセキュリティ認証情報を取得するには、認証サービスに sts:GetFederationToken アクセス許可が必要となることに注意してください。

注記

AWS にはこの目的にかなったサンプル Java アプリケーションが用意されていて、「ID 登録のためのトークン自動販売機 - サンプル Java ウェブアプリケーション」からダウンロードできます。

GetFederationToken を呼び出す IAM ユーザー token-app にアタッチされたポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:GetFederationToken", "Resource": "*" }, { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "*" }, { "Effect": "Allow", "Action": "sqs:*", "Resource": "*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "*" }, { "Effect": "Allow", "Action": "sns:*", "Resource": "*" } ] }

前述のポリシーは、複数のアクセス権限を付与しますが、それだけではフェデレーティッドユーザーにアクセス権限を付与できません。前述のポリシーで定義されたアクセス許可を持つ IAM ユーザーが GetFederationToken を呼び出して、API コールのパラメータとしてポリシーを渡さない場合、結果として、フェデレーティッドユーザーは有効なアクセス許可を持ちません。

パラメータとして渡されたセッションポリシー

フェデレーティッドユーザーに適切なアクセス許可を確実に割り当てる最も一般的な方法は、GetFederationToken API コールのパラメータとしてセッションポリシーを渡すことです。前述の例を拡張して、GetFederationToken が IAM ユーザー token-app の認証情報を使用して呼び出され、以下のセッションポリシーが API コールのパラメータとして渡されるとします。フェデレーティッドユーザーは、以下のアクションを実行するアクセス許可のみを付与されます。

  • productionapp という Amazon S3 バケットの内容を表示します。

  • productionapp バケットの項目に対して Amazon S3 の GetObjectPutObjectDeleteObject アクションを実行します。

このアクセス許可は 2 名のユーザーに付与されているため、フェデレーティッドユーザーにはこれらのアクセス許可が割り当てられます。

  • GetFederationToken を呼び出した IAM ユーザー (IAM ユーザーにアタッチされたポリシーを使用)

  • フェデレーティッドユーザー (セッションポリシーを使用)

フェデレーティッドユーザーは、Amazon SNS、Amazon SQS、Amazon DynamoDB または S3 バケット (productionapp を除く) でアクションを行うことができませんでした。これらのアクションは、このアクセス許可が GetFederationToken コールに関連付けられている IAM ユーザーに付与されている場合でも拒否されます。これは、フェデレーティッドユーザーの有効なアクセス許可が、IAM ユーザーポリシーセッションポリシーの両方で付与されたアクセス許可のみで構成されるためです。

GetFederationToken API コールのパラメータとして渡されるセッションポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::productionapp"] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::productionapp/*"] } ] }

リソースベースのポリシー

一部の AWS リソースはリソースベースのポリシーをサポートし、このポリシーはフェデレーティッドユーザーにアクセス許可を直接付与するもう 1 つの仕組みとして利用できます。一部の AWS サービスのみでリソースに基づくポリシーをサポートしています。たとえば、Amazon S3 にはバケット、Amazon SNS にはトピック、Amazon SQS にはキューがあり、これらにポリシーをアタッチできます。リソースベースのポリシーをサポートするすべてのサービスのリストについては、「IAM と連携する AWS のサービス」を参照の上、テーブルの「リソースベースのポリシー」列を確認してください。これらのサービスのうち 1 つを使用していて、リソースベースのポリシーを利用することが妥当である場合は、リソースベースのポリシーの Principal 要素でフェデレーションユーザーの Amazon リソースネームを指定することで、フェデレーションユーザーに直接、アクセス許可を割り当てます。以下に示しているのはこのポリシーの例です。以下の例では、前の例を拡張して、productionapp という名前の S3 バケットを使用します。

次のリソースベースのポリシーは、バケットにアタッチされています。このバケットポリシーでは、Carol という名前のフェデレーティッドユーザーにバケットへのアクセスを許可します。前に示したサンプルポリシーが token-app IAM ユーザーにアタッチされていると、Carol というフェデレーティッドユーザーには、s3:GetObjects3:PutObjects3:DeleteObject アクションを productionapp という名前のバケットに対して実行するアクセス許可が付与されています。これは、GetFederationToken API コールのパラメータとしてセッションポリシーが渡されていない場合にも当てはまります。Carol というフェデレーションユーザーが以下のリソースベースのポリシーによって明示的にアクセス権限を付与されているためです。

フェデレーティッドユーザーがアクセス許可を付与されるのは、IAM ユーザーとフェデレーティッドユーザーの両方に、明示的にアクセス許可が付与されている場合のみであることを忘れないでください。アクセス許可は、GetFederationToken API コールのパラメータとしてセッションポリシーでフェデレーティッドユーザーに付与することができます。また、次の例のように、ポリシーの Principal 要素でフェデレーティッドユーザーを明示的に指名するリソースベースのポリシーでも付与することができます。

例 フェデレーティッドユーザーにアクセスを許可するバケットポリシー

{ "Version": "2012-10-17", "Statement": { "Principal": {"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:federated-user/Carol"}, "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::productionapp/*"] } }