IAM ポリシーによるアクセスのコントロール
IAM には、アウトバウンド ID フェデレーション機能へのアクセスを制御する複数のポリシータイプが用意されています。アイデンティティベースのポリシーを使用することで、トークンをリクエストできる IAM プリンシパルを制御し、対象者、有効期間、署名アルゴリズムなど、特定のトークンプロパティを適用することができます。サービスコントロールポリシー (SCP) を使用すると、AWS Organizations 内のすべてのアカウントで、トークン生成に組織全体の制限を適用することができます。リソースコントロールポリシー (RCP) は、リソースレベルでアクセスを制御します。また、VPC エンドポイントポリシーを使用することで、VPC エンドポイントを介して AWS STS GetWebIdentityToken API にアクセスできるプリンシパルを制限し、セキュリティ体制にネットワークレベルのコントロールを追加することもできます。このセクションでは、これらのポリシータイプと条件キーを使用して、きめ細かいアクセスコントロールを実装する方法について説明します。
ID トークンをリクエストするには、IAM プリンシパルに sts:GetWebIdentityToken アクセス許可が必要です。このアクセス許可は、IAM ユーザーまたはロールにアタッチされた ID ポリシーを使用して付与します。タグ (キー、値のペア) を GetWebIdentityToken 呼び出しに渡すには、IAM プリンシパルに sts:TagGetWebIdentityToken アクセス許可が必要です。
-
トークンを受信できる外部サービスを制限するときは sts:IdentityTokenAudience 条件キーを使用します。
-
トークンの最大有効期間を適用するときは sts:DurationSeconds 条件キーを使用します。
-
特定の暗号化アルゴリズムを要求するときは、sts:SigningAlgorithm 条件キーを使用します。
-
リクエストで渡されたタグキーバリューのペアと、ポリシーで指定したタグペアを比較するときは、aws:RequestTag 条件キーを使用します。
-
リクエスト内のタグキーとポリシーで指定したキーを比較するときは、aws:TagKeys 条件キーを使用します。
IAM ポリシーで使用できる条件キーの詳細については、「IAM および AWS STS の条件コンテキストキー」を参照してください。
このサンプル ID ポリシーは、複数の条件キーを組み合わせています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowTokenGenerationWithRestrictions", "Effect": "Allow", "Action": "sts:GetWebIdentityToken", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "sts:IdentityTokenAudience": [ "https://api1.example.com", "https://api2.example.com" ] }, "NumericLessThanEquals": { "sts:DurationSeconds": 300 }, "StringEquals": { "sts:SigningAlgorithm": "ES384" } } } ] }
ベストプラクティス
AWS ID を外部サービスに安全にフェデレーションするために、以下の推奨事項に従ってください。
-
トークンの有効期間を短くする: 有効期間を使用上のニーズを満たす最も短い期間に設定してトークンをリクエストします。
-
最小特権アクセスを実装し、IAM ポリシーを使用してトークンプロパティを制限する:
sts:GetWebIdentityTokenアクセス許可は、それを必要とする IAM プリンシパルのみに付与します。必要に応じて署名アルゴリズム、許可されたトークン対象者、トークンの最大有効期間を指定するときは条件キーを使用します。 -
外部サービスでクレームを検証する: セキュリティを確保するため、件名 (「sub」)、対象者 (「aud」) などの関連するクレームを必ず検証し、想定される値と一致していることを確認します。できるだけカスタムのクレームを検証し、外部サービスで承認の判断をきめ細かく行えるようにします。