

# サービス間の混乱した代理の防止
<a name="cross-service-confused-deputy-prevention"></a>

混乱した代理問題は、アクションを実行する許可を持たないエンティティが、より特権のあるエンティティにアクションを実行するように強制できるセキュリティの問題です。AWS では、サービス間でのなりすましによって、混乱した代理問題が発生する場合があります。サービス間でのなりすましは、あるサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスが操作され、それ自身のアクセス許可を使用して、本来アクセス許可が付与されるべきではない方法で別の顧客のリソースに対して働きかけることがあります。これを防ぐため、AWS では、アカウント内のリソースへのアクセス許可が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

リソースポリシーで「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)」および「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)」のグローバル条件コンテキストキーを使用し、CloudFormation が CloudFormation 拡張機能などの特定リソースに別のサービスを付与する許可を制限することをお勧めします。クロスサービスアクセスにリソースを 1 つだけ関連付けたい場合は、`aws:SourceArn` を使用します。そのアカウント内のリソースをクロスサービスの使用に関連付けることを許可する場合は、`aws:SourceAccount` を使用します。

`aws:SourceArn` の値は CloudFormation が保存するリソースの ARN であることを確認します。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して `aws:SourceArn` グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合は、`aws:SourceArn` グローバルコンテキスト条件キーを使用して、ARN の未知部分をワイルドカード (`*`) で表します。例えば、`arn:aws:{{cloudformation}}:*:{{123456789012}}:*` です。

`aws:SourceArn` の値にアカウント ID が含まれていない場合、両方のグローバル条件コンテキストキーを使用して許可を制限する必要があります。

次の例では、CloudFormation で `aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を回避する方法を示します。

## `aws:SourceArn` および `aws:SourceAccount` 条件キーを使用する信頼ポリシーの例
<a name="cross-service-confused-deputy-prevention-example"></a>

レジストリサービスの場合、CloudFormation は AWS Security Token Service (AWS STS) を呼び出してアカウントでのサービスロールを引き受けます。このロールは、[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html) オペレーションで `ExecutionRoleArn` に対して構成され、[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_LoggingConfig.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_LoggingConfig.html) オペレーションで設定された `LogRoleArn` に対して構成されます。詳細については、「[IAM アクセス許可とパブリック拡張アクセスの信頼ポリシーを使用して実行ロールを設定する](registry-public.md#registry-public-enable-execution-role)」を参照してください。

このロールの信頼ポリシーの例では、条件文を使用して、サービスロールの `AssumeRole` 機能を、指定されたアカウントの指定された CloudFormation 拡張機能に対するアクションのみに制限します。`aws:SourceArn` および `aws:SourceAccount` の条件は個別に評価されます。サービスロールを使用するリクエストでは、両方の条件が満たされている必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "resources.cloudformation.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{123456789012}}"
        },
        "ArnLike": {
          "aws:SourceArn": "{{arn:aws:cloudformation:us-east-1:123456789012:type/resource/Organization-Service-Resource}}"
        }
      }
    }
  ]
}
```

------

## 追加情報
<a name="cross-service-confused-deputy-prevention-additional-information"></a>

StackSets で使用されるサービスロールの `aws:SourceArn` および `aws:SourceAccount` のグローバル条件コンテキストキーを使用するポリシーの例については、「[混乱した代理問題を軽減するためにグローバルキーを設定する](stacksets-prereqs-self-managed.md#confused-deputy-mitigation)」を参照してください。

詳細については、「IAM ユーザーガイド」の「[ロールの信頼ポリシーの変更](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)」を参照してください。