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

上次更新日期:2022 年 12 月 14 日

我在使用 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 作为 AWS DMS 的源或目标时,请务必先阅读以下文章:

要解决这些错误,请授予访问 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。但是如果在 Amazon S3 端点的存储桶名称中指定 awsexamplebucket2,则测试连接将失败。

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 的组织。如果您的组织不允许访问,则 AWS DMS 无法使用该 IAM 角色连接到 Amazon S3 端点。即使角色拥有所有必需的权限,情况也是如此。如果您的组织不允许访问 Amazon S3,请联系您的账户管理员以允许 Amazon S3 访问您的组织。

5.    如果您的复制实例版本为 3.4.7 或更高版本,请执行以下操作之一:

        将您的复制实例子网设置为可公开路由。向 AWS DMS 复制实例使用的 VPC 添加互联网网关(IGW)路由。

        -或者-

        创建 VPC 端点,以便您的复制实例可以访问 AWS DMS 使用的所有源端点和目标端点。有关更多信息,请参阅准备迁移到 AWS DMS 版本 3.4.7 及更高版本


这篇文章对您有帮助吗?


您是否需要账单或技术支持?