# Cross-service confused deputy protection

这个策略是一个用于防止混淆代理（Confused Deputy）攻击的安全策略。它的主要效果是：

1\. 当 AWS 服务作为主体（Principal）访问资源时，该策略会拒绝访问，除非满足特定条件。

2\. 策略适用的服务和操作包括：

&#x20;  • S3 的所有操作

&#x20;  • SQS 的所有操作

&#x20;  • KMS 的所有操作

&#x20;  • Secrets Manager 的所有操作

&#x20;  • STS 的所有操作

3\. 拒绝条件（必须同时满足以下所有条件才会拒绝）：

&#x20;  • 请求来自 AWS 服务（aws:PrincipalIsAWSService 为 true）

&#x20;  • 请求必须包含 aws:SourceArn（不能为空）

&#x20;  • 如果请求中包含 aws:SourceOrgID，则其值必须不等于 "my-org-id"

&#x20;  • 如果请求中包含 aws:SourceAccount，则其值必须不在 \["third-party-account-a", "third-party-account-b"] 列表中

这个策略的目的是确保只有来自特定组织 ID 或特定账户的 AWS 服务调用才能访问资源，并且要求请求必须包含源 ARN，从而防止混淆代理攻击。这是一种安全最佳实践，可以限制跨服务权限提升的风险。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {            
            "Sid": "EnforceConfusedDeputyProtection",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:*",
                "sqs:*",
                "kms:*",
                "secretsmanager:*",
                "sts:*"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceOrgID": "my-org-id",
                    "aws:SourceAccount": [
                        "third-party-account-a",
                        "third-party-account-b"
                    ]
                },  
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                },
                 "Null": {
                    "aws:SourceArn": "false"
                }
            }
        }
    ]
}
```
