

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 防止跨服务混淆座席
<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)全局条件上下文密钥来限制为资源 AWS Database Migration Service 提供其他服务的权限。如果 `aws:SourceArn` 值不包含账户 ID，例如 AWS DMS 复制实例名称（ARN），则您必须使用两个全局条件上下文键来限制权限。如果同时使用全局条件上下文密钥和包含账户 ID 的 `aws:SourceArn` 值，则 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户在同一策略语句中使用时，必须使用相同的账户 ID。如果您只希望将一个资源与跨服务访问相关联，请使用 `aws:SourceArn`。如果您想允许该账户中的任何资源与跨服务使用操作相关联，请使用。`aws:SourceAccount`

AWS DMS 从 3.4.7 及更高版本开始，支持混乱的副手选项。有关更多信息，请参阅 [AWS Database Migration Service 3.4.7 版本说明](CHAP_ReleaseNotes.md#CHAP_ReleaseNotes.DMS347)。如果您的复制实例使用 AWS DMS 版本 3.4.6 或更低版本，请确保在设置混淆代理选项之前升级到最新版本。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:dms:*:123456789012:rep:*`。

**Topics**
+ [IAM 角色可与 AWS DMS API 配合使用以防止跨服务混淆副手](#cross-service-confused-deputy-prevention-dms-api)
+ [IAM policy 将预检评测存储在 Amazon S3 中，以防跨服务混淆代理](#cross-service-confused-deputy-prevention-s3)
+ [使用 Amazon DynamoDB 作为目标终端节点用于跨服务混淆副 AWS DMS 手预防](#cross-service-confused-deputy-prevention-dynamodb)

## IAM 角色可与 AWS DMS API 配合使用以防止跨服务混淆副手
<a name="cross-service-confused-deputy-prevention-dms-api"></a>

要使用 AWS CLI 或 AWS DMS API 进行数据库迁移，必须先将`dms-vpc-role`和 `dms-cloudwatch-logs-role` IAM 角色添加到您的 AWS 账户，然后才能使用的功能 AWS DMS。有关更多信息，请参阅 [创建要与一起使用的 IAM 角色 AWS DMS](security-iam.md#CHAP_Security.APIRole)。

以下示例显示了将 `dms-vpc-role` 角色用于 `my-replication-instance` 复制实例的策略。使用这些策略可防止混淆代理问题。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Sid": "AllowDMSAssumeRole",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "AWS:SourceAccount": "111122223333"
         },
         "ArnLike": {
             "aws:SourceArn": "arn:aws:dms:*:123456789012:*"
         }
      }
    }
  ]
}
```

------

## IAM policy 将预检评测存储在 Amazon S3 中，以防跨服务混淆代理
<a name="cross-service-confused-deputy-prevention-s3"></a>

要将预评测结果存储在 S3 存储桶中，您需要创建一个允许 AWS DMS 管理 Amazon S3 中的对象的 IAM policy。有关更多信息，请参阅 [创建 IAM 资源](CHAP_Tasks.AssessmentReport.Prerequisites.md#CHAP_Tasks.AssessmentReport.Prerequisites.IAM)。

以下示例显示了在 IAM 角色上设置的带有混淆代理条件的信任策略，该策略 AWS DMS 允许访问指定用户账户下的所有任务和评估。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDMSAssumeRole",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "111122223333"
        },
        "ArnLike": {
            "aws:SourceArn": [
                "arn:aws:dms:*:123456789012:assessment-run:*",
                "arn:aws:dms:*:123456789012:task:*"
          ]
        }
      }
    }
  ]
}
```

------

## 使用 Amazon DynamoDB 作为目标终端节点用于跨服务混淆副 AWS DMS 手预防
<a name="cross-service-confused-deputy-prevention-dynamodb"></a>

要使用 Amazon DynamoDB 作为数据库迁移的目标终端节点，您必须创建 AWS DMS 允许代入和授予对 DynamoDB 表的访问权限的 IAM 角色。然后，当您在 AWS DMS中创建目标 DynamoDB 端点时使用此角色。有关更多信息，请参阅 [将 Amazon DynamoDB 作为目标](CHAP_Target.DynamoDB.md)。

以下示例显示了在允许所有 AWS DMS 终端节点访问 DynamoDB 表的 IAM 角色上设置的具有混淆代理条件的信任策略。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDMSAssumeRole",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*",
      "Condition": {
      "StringEquals": {
          "AWS:SourceAccount": "111122223333"
        },
        "ArnLike": {
        "aws:SourceArn": [
            "arn:aws:dms:*:123456789012:assessment-run:*",
            "arn:aws:dms:*:123456789012:task:*"
            ]
         }
      }
    }
  ]
}
```

------