メニュー
AWS Identity and Access Management
ユーザーガイド

GetFederationToken のアクセス権限

GetFederationToken によって返される一時的なセキュリティ認証情報のアクセス権限は、以下を組み合わせて決定されます。

  • 認証情報が GetFederationToken の呼び出しに使用される IAM ユーザーにアタッチされたポリシー。

  • 呼び出しのパラメータとして渡されるポリシー。

渡されたポリシーは、GetFederationToken API 呼び出しから返される一時的なセキュリティ認証情報、つまり、フェデレーティッドユーザーにアタッチされます。フェデレーティッドユーザーが AWS リクエストを行うと、AWS は、認証情報が GetFederationToken の呼び出しに使用された IAM ユーザーにアタッチされたポリシーと組み合わせて、フェデレーティッドユーザーにアタッチされたポリシーを評価します。

重要

AWS でフェデレーションユーザーのリクエストが許可されるのは、アタッチされたポリシーと 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 にアタッチされたポリシー

Copy
{ "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 アクションを実行します。

フェデレーティッドユーザーにこれらのアクセス権限が割り当てられるのは、GetFederationToken を呼び出した IAM ユーザー(IAM ユーザーにアタッチされたポリシーを通じて)とフェデレーティッドユーザー(渡されたポリシーを通じて)の両方にアクセス権限が付与されているためです。フェデレーションユーザーは、GetFederationToken 呼び出しに関連付けられた IAM ユーザーにこれらのアクセス権限が付与されている場合でも、Amazon SNS、Amazon SQS、または Amazon DynamoDB でも、productionapp 以外の S3 バケットでもアクションを実行することはできません。これは、フェデレーションユーザーの有効なアクセス権限が、IAM ユーザーポリシーおよび渡されたポリシーで付与されたアクセス権限のみで構成されるためです。

GetFederationToken API 呼び出しのパラメータとして渡されるポリシー

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

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

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

Copy
{ "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/*"] } }