

# IAM ポリシーによるアクセスのコントロール
<a name="id_roles_providers_outbound_policies"></a>

IAM には、アウトバウンド ID フェデレーション機能へのアクセスを制御する複数のポリシータイプが用意されています。[アイデンティティベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)を使用することで、トークンをリクエストできる IAM プリンシパルを制御し、対象者、有効期間、署名アルゴリズムなど、特定のトークンプロパティを適用することができます。[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP) を使用すると、AWS Organizations 内のすべてのアカウントで、トークン生成に組織全体の制限を適用することができます。[リソースコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (RCP) は、リソースレベルでアクセスを制御します。また、[VPC エンドポイントポリシー](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)を使用することで、VPC エンドポイントを介して AWS STS `GetWebIdentityToken` API にアクセスできるプリンシパルを制限し、セキュリティ体制にネットワークレベルのコントロールを追加することもできます。このセクションでは、これらのポリシータイプと条件キーを使用して、きめ細かいアクセスコントロールを実装する方法について説明します。

ID トークンをリクエストするには、IAM プリンシパルに `sts:GetWebIdentityToken` アクセス許可が必要です。このアクセス許可は、IAM ユーザーまたはロールにアタッチされた ID ポリシーを使用して付与します。タグ (キー、値のペア) を GetWebIdentityToken 呼び出しに渡すには、IAM プリンシパルに `sts:TagGetWebIdentityToken` アクセス許可が必要です。
+ トークンを受信できる外部サービスを制限するときは [sts:IdentityTokenAudience](reference_policies_iam-condition-keys.md#ck_identitytokenaudience) 条件キーを使用します。
+ トークンの最大有効期間を適用するときは [sts:DurationSeconds](reference_policies_iam-condition-keys.md#ck_durationseconds) 条件キーを使用します。
+ 特定の暗号化アルゴリズムを要求するときは、[sts:SigningAlgorithm](reference_policies_iam-condition-keys.md#ck_signingalgorithm) 条件キーを使用します。
+ リクエストで渡されたタグキーバリューのペアと、ポリシーで指定したタグペアを比較するときは、[aws:RequestTag](reference_policies_condition-keys.md#condition-keys-requesttag) 条件キーを使用します。
+ リクエスト内のタグキーとポリシーで指定したキーを比較するときは、[aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 条件キーを使用します。

IAM ポリシーで使用できる条件キーの詳細については、「[IAM および AWS STS の条件コンテキストキー](reference_policies_iam-condition-keys.md)」を参照してください。

このサンプル 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"
                }
            }
        }
    ]
}
```

## ベストプラクティス
<a name="outbound-best-practices"></a>

AWS ID を外部サービスに安全にフェデレーションするために、以下の推奨事項に従ってください。
+ **トークンの有効期間を短くする:** 有効期間を使用上のニーズを満たす最も短い期間に設定してトークンをリクエストします。
+ **最小特権アクセスを実装し、IAM ポリシーを使用してトークンプロパティを制限する:** `sts:GetWebIdentityToken` アクセス許可は、それを必要とする IAM プリンシパルのみに付与します。必要に応じて署名アルゴリズム、許可されたトークン対象者、トークンの最大有効期間を指定するときは条件キーを使用します。
+ **外部サービスでクレームを検証する:** セキュリティを確保するため、件名 (「sub」)、対象者 (「aud」) などの関連するクレームを必ず検証し、想定される値と一致していることを確認します。できるだけカスタムのクレームを検証し、外部サービスで承認の判断をきめ細かく行えるようにします。