

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。

在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。

為了防止這種情況， AWS 提供工具，協助您保護所有 服務的資料，其服務主體已獲得您帳戶中資源的存取權。建議使用 Amazon EC2 Auto Scaling 服務角色的信任政策中的 [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) 全域條件內容金鑰。這些金鑰會限制 Amazon EC2 Auto Scaling 為資源提供其他服務的許可。

當 Amazon EC2 Auto Scaling 使用 AWS Security Token Service (AWS STS) 代表您擔任角色時，會設定 `SourceArn`和 `SourceAccount` 欄位的值。

若要使用 `aws:SourceArn` 或 `aws:SourceAccount` 全域條件金鑰，請將值設定為 Amazon EC2 Auto Scaling 所儲存資源的 Amazon Resource Name (ARN) 或帳戶。盡可能使用 `aws:SourceArn`，這更為具體。對於 ARN 的未知部分，將值設定為 ARN 或具有萬用字元 (`*`) 的 ARN 模式。如果您不知道資源的 ARN，請改為使用 `aws:SourceAccount`。

下列範例示範如何使用 Amazon EC2 Auto Scaling 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容金鑰，來預防混淆代理人問題。

## 範例：使用 `aws:SourceArn` 和 `aws:SourceAccount` 條件金鑰
<a name="cross-service-confused-deputy-prevention-example"></a>

服務會擔任代您執行動作的角色稱為[服務角色](control-access-using-iam.md#security_iam_service-with-iam-roles-service)。如果您想要建立會將通知傳送到 Amazon EventBridge 以外的任何位置的 lifecycle hook，您必須建立服務角色，以允許 Amazon EC2 Auto Scaling 代表您將通知傳送到 Amazon SNS 主題或 Amazon SQS 佇列。如果您想要僅允許一個 Auto Scaling 群組與跨服務存取相關聯，則可以按如下方式指定服務角色的信任政策。

此信任政策範例使用條件陳述式，將服務角色的 `AssumeRole` 能力限制為僅影響指定帳戶中指定 Auto Scaling 群組的動作。獨立評估 `aws:SourceArn` 和 `aws:SourceAccount` 條件。使用服務角色的任何請求都必須滿足這兩個條件。

在使用此政策之前，請將區域、帳戶 ID、UUID 和群組名稱取代為您帳戶的有效值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "ConfusedDeputyPreventionExamplePolicy",
        "Effect": "Allow",
        "Principal": {
            "Service": "autoscaling.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:autoscaling:us-east-1:111122223333:autoScalingGroup:uuid:autoScalingGroupName/my-asg"
            },
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            }
        }
    }
}
```

------

在上述範例中：
+ `Principal` 元素會指定服務 (`autoscaling.amazonaws.com`) 的服務主體。
+ `Action` 元素指定 `sts:AssumeRole` 動作。
+ `Condition` 元素指定 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件金鑰。來源的 ARN 包括帳戶 ID，因此不需要搭配 `aws:SourceAccount` 使用 `aws:SourceArn`。

## 其他資訊
<a name="cross-service-confused-deputy-prevention-additional-information"></a>

如需詳細資訊，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)、[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)和[更新角色信任政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。