如何排查使用 AWS DMS 时出现的 Amazon S3 终端节点连接测试故障?

上次更新时间:2020 年 2 月 4 日

我在使用 Amazon Simple Storage Service (Amazon S3) 作为 AWS Database Migration Service (AWS DMS) 任务的源或目标终端节点。由于我的终端节点连接测试失败,我收到了一条错误消息。我该如何排查并解决终端节点连接故障?

简短描述

如果您没有为使用 Amazon S3 终端节点的 AWS Identity and Access Management (IAM) 角色配置适当的权限,则会看到以下某条日志条目:

消息
Test Endpoint failed: Application-Status: 1020912, Application-Message: Failed to connect to S3 endpoint.Access denied.
Test Endpoint failed: Application-Status: 1020912, Application-Message: Failed to list bucket wan-dms Failed to connect to database., Application-Detailed-Message: failed to list bucket wan-dms AWS failed to list bucket List bucket failed with exception 'AccessDenied', message 'Access Denied', error type '15' AWS failed to list bucket Not retriable error: Access Denied
Test Endpoint failed: Application-Status: 1020912, Application-Message: Failed to connect to database.
Error Details: [message=putDatabase call failed, errType=ERROR_RESPONSE, status=1020414, errMessage= Failed to connect to database., errDetails=]

解决方法

要解决这些错误,请授予访问 Amazon S3 终端节点所需的最低 IAM 权限。Amazon S3 源和目标终端节点拥有不同的 AWS DMS 最低权限。

请查看以下关于 Amazon S3 源终端节点的 IAM 策略示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
           
    "Action": [
                "s3:GetObject",    
                "s3:ListBucket"        
    ],
    
            "Resource": [
                "arn:aws:s3:::awsexamplebucket",   
                "arn:aws:s3:::awsexamplebucket/*" 
            ]
        }
    ]
}

注意:请将 awsexamplebucket 替换为您自己的存储桶名称。

请查看以下关于 Amazon S3 目标终端节点的 IAM 策略示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket"
            ]
        }
    ]
}

注意:请将 awsexamplebucket 替换为您自己的存储桶名称。

重要提示:

要排查权限错误,请执行以下步骤:

1.    确认 IAM 角色具有访问 Amazon S3 终端节点所需的最低权限。

2.    确认为 Amazon S3 终端节点指定的存储桶名称与 IAM 角色允许的资源匹配。例如,IAM 角色仅允许访问一个存储桶,例如前面示例策略中的 awsexamplebucket。但是如果 awsexamplebucket2 在 Amazon S3 终端节点的存储桶名称中指定,则测试连接失败。

3.    确认 dms.amazonaws.com 是与 IAM 角色关联的可信实体。有关更多信息,请参阅编辑现有角色的信任关系和以下 AWS DMS 信任策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4.    如果您使用 AWS Organizations,请确认所用 IAM 角色归属于允许访问 Amazon S3 的组织。如果您的组织不允许访问 Amazon S3,则即使 IAM 角色拥有所有必要权限,AWS DMS 也无法连接到使用该 IAM 角色的 Amazon S3 终端节点。如果您的组织不允许访问 Amazon S3,请联系您的账户管理员以允许 Amazon S3 访问您的组织。