中的安全性AWS Database Migration Service - AWS Database Migration Service

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

中的安全性AWS Database Migration Service

AWS 的云安全性的优先级最高。作为 AWS 客户,您将从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益。

安全性是 AWS 和您的共同责任。责任共担模型将其描述为云安全性和云的安全性:

  • 云的安全性 – AWS负责保护在AWS云中运行AWS服务的基础设施。AWS还向您提供可安全使用的服务。作为 AWS 合规性计划的一部分,第三方审核人员将定期测试和验证安全性的有效性。要了解适用于 AWS DMS 的合规性计划,请参阅合规性计划范围内的 AWS 服务

  • 云中的安全性 - 您的责任由您使用的 AWS 服务决定。您还需要对其他因素负责,包括您的数据的敏感性、您组织的要求以及适用的法律法规。

此文档将帮助您了解如何在使用 AWS DMS 时应用责任共担模型。以下主题说明如何配置 AWS DMS 以实现您的安全性和合规性目标。您还将了解如何使用其他 AWS 服务来帮助您监控和保护 AWS DMS 资源。

您可以管理对 AWS DMS 资源和数据库 (DB) 的访问。用来管理访问的方法取决于您需要对 AWS DMS 执行的复制任务:

  • 使用AWS Identity and Access Management(IAM) 策略分配决定谁可以管理的权限。AWS DMS资源的费用。AWS DMS如果您以 IAM 用户身份登录,则需要具有适当的权限。例如,您可以使用 IAM 确定可以创建、描述、修改和删除数据库实例和集群、为资源添加标签或修改安全组的人员。有关 IAM 以及将其与结合使用的更多信息AWS DMS,请参阅适用于 AWS Database Migration Service 的 Identity and Access Management.

  • AWS DMS 使用带传输层安全性 (TLS) 的安全套接字层 (SSL) 进行终端节点连接。有关将 SSL/TLS 与 AWS DMS 一起使用的更多信息,请参阅将 SSL 与 AWS Database Migration Service 配合使用

  • AWS DMS使用AWS Key Management Service(AWS KMS) 加密密钥用于加密复制实例使用的存储及其终端节点连接信息。AWS DMS还使用AWS KMS加密密钥用于保护 Amazon S3 和 Amazon Redshift 目标终端节点的静态目标数据。有关更多信息,请参阅设置加密密钥和指定 AWS KMS 权限

  • AWS DMS始终在基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 中创建复制实例以尽可能获得最大的网络访问控制。对于数据库实例和实例集群,请使用与复制实例相同的 VPC,或使用其他 VPC 来匹配此级别的访问控制。您使用的每个 Amazon VPC 必须与安全组关联,该安全组应具有规则,允许所有端口上的所有流量离开(传出)VPC。使用此方法,只要这些终端节点上启用了正确的传入,就允许从复制实例与您的源和目标数据库终端节点通信。

    有关 AWS DMS 的可用网络配置的更多信息,请参阅 为复制实例设置网络。有关在 VPC 中创建数据库实例或实例集群的更多信息,请参阅 Amazon 数据库的安全和集群管理文档,AWS文档. 有关 AWS DMS 支持的网络配置的更多信息,请参阅 为复制实例设置网络

  • 要查看数据库迁移日志,所使用的 IAM 角色需要适当的 Amazon CloudWatch Logs Logs 权限。有关 AWS DMS 日志记录的更多信息,请参阅 使用 Amazon CloudWatch 监控复制任务

AWS Database Migration Service 中的数据保护

数据加密

您可以为支持的 AWS DMS 目标终端节点的数据资源启用加密。AWS DMS 还会对与 AWS DMS 的连接以及 AWS DMS 与其所有源及目标终端节点之间的连接进行加密。此外,您还可以管理 AWS DMS 及其支持的目标终端节点启用此加密所使用的密钥。

静态加密

AWS DMS通过允许您指定服务器端加密模式来支持静态加密,该加密模式用于在将复制数据复制到支持的 Amazon S3 之前将其推送到 Amazon S3。AWS DMS目标终端节点。您可以通过设置终端节点的 encryptionMode 额外连接属性来指定此加密模式。如果这样encryptionMode设置指定 KMS 密钥加密模式,您还可以创建自定义AWS KMS密钥专门用于加密以下目标数据:AWS DMS目标终端节点:

传输中加密

AWS DMS 通过确保其复制的数据从源终端节点安全移至目标终端节点来支持传输过程中的加密。这包括对复制实例上的 S3 存储桶进行加密,在复制管道中传输数据时,复制任务将 S3 存储桶用作中间存储。要加密与源和目标终端节点的任务连接,AWS DMS 使用带传输层安全性 (TLS) 的安全套接字层 (SSL)。通过加密与两个终端节点的连接,AWS DMS 可确保数据在从源终端节点移动到复制任务以及从任务移动到目标终端节点时都是安全的。有关将 SSL/TLS 与 AWS DMS 一起使用的更多信息,请参阅 将 SSL 与 AWS Database Migration Service 配合使用

AWS DMS 支持默认密钥和自定义密钥来加密中间复制存储和连接信息。您可以使用 AWS KMS 来管理这些密钥。有关更多信息,请参阅设置加密密钥和指定 AWS KMS 权限

密钥管理

AWS DMS 支持默认或自定义密钥来加密特定目标终端节点的复制存储、连接信息和目标数据存储。您可以使用 AWS KMS 来管理这些密钥。有关更多信息,请参阅设置加密密钥和指定 AWS KMS 权限

互联网络流量隐私

无论是在本地运行还是作为云中 AWS 服务的一部分运行,都会为 AWS DMS 和同一 AWS 区域中的源及目标终端节点之间的连接提供保护。(必须至少有一个源或目标终端节点作为云中 AWS 服务的一部分运行。) 无论这些组件是共享同一 Virtual Private Cloud (VPC),还是存在于单独的 VPC 中(如果 VPC 全部位于同一 AWS 区域),都会应用此保护。有关 AWS DMS 支持的网络配置的更多信息,请参阅 为复制实例设置网络。有关使用这些网络配置时的安全注意事项的更多信息,请参阅 AWS Database Migration Service 网络安全

适用于 AWS Database Migration Service 的 Identity and Access Management

AWS Identity and Access Management (IAM) 是一种 AWS 服务,可以帮助管理员安全地控制对 AWS 资源的访问。IAM 管理员控制谁可以通过身份验证(登录)和授权(具有权限)使用 AWS DMS 资源。IAM 是一个可以免费使用的 AWS 服务。

Audience

使用 AWS Identity and Access Management (IAM) 的方式因您可以在 AWS DMS 中执行的操作而异。

服务用户 - 如果您使用 AWS DMS 服务来完成工作,则您的管理员会为您提供所需的凭证和权限。当您使用更多 AWS DMS 功能来完成工作时,您可能需要额外权限。了解如何管理访问权限可帮助您向管理员请求适合的权限。如果您无法访问 AWS DMS 中的一项功能,请参阅对 AWS Database Migration Service 身份和访问进行故障排除

服务管理员 - 如果您在公司负责管理 AWS DMS 资源,则您可能具有 AWS DMS 的完全访问权限。您有责任确定您的员工应访问哪些 AWS DMS 功能和资源。然后,您必须向 IAM 管理员提交请求以更改服务用户的权限。请查看该页面上的信息以了解 IAM 的基本概念。要了解有关您的公司如何将 IAM 与 AWS DMS 搭配使用的更多信息,请参阅 AWS Database Migration Service 如何与 IAM 协同工作

IAM 管理员 - 如果您是 IAM 管理员,您可能希望了解如何编写策略以管理对 AWS DMS 的访问的详细信息。要查看您可在 IAM 中使用的 AWS DMS 基于身份的策略示例,请参阅 AWS Database Migration Service 基于身份的策略示例

使用身份进行身份验证

身份验证是您使用身份凭证登录 AWS 的方法。有关使用 AWS Management Console登录的更多信息,请参阅 IAM 用户指南中的以 AWS Management Console IAM 用户或根用户身份登录

您必须作为 AWS 账户 根用户、IAM 用户或代入 IAM 角色以进行身份验证(登录到AWS)。您还可以使用公司的单一登录身份验证方法,甚至使用 Google 或 Facebook 登录。在这些情况下,您的管理员以前使用 IAM 角色设置了联合身份验证。在您使用来自其他公司的凭证访问 AWS 时,您间接地代入了角色。

要直接登录到 AWS Management Console,请将密码与根用户电子邮件地址或 IAM 用户名一起使用。您可以使用根用户或 IAM 用户访问密钥以编程方式访问AWS。AWS提供了开发工具包和命令行工具,可使用您的凭证对您的请求进行加密签名。如果您不使用 AWS 工具,则必须自行对请求签名。使用签名版本 4(用于对入站 API 请求进行验证的协议)完成此操作。有关验证请求的更多信息,请参阅《AWS 一般参考》中的 Signature Version 4 签名流程

无论使用何种身份验证方法,您可能还需要提供其他安全信息。例如,AWS 建议您使用多重身份验证 (MFA) 来提高账户的安全性。要了解更多信息,请参阅《IAM 用户指南》中的在 AWS 中使用多重身份验证 (MFA)

AWS 账户 根用户

当您首次创建 AWS 账户 时,最初使用的是一个对账户中所有AWS服务和资源有完全访问权限的单点登录身份。此身份称为 AWS 账户 根用户,使用您创建账户时所用的电子邮件地址和密码登录,即可获得该身份。强烈建议您不使用根用户执行日常任务,即使是管理任务。相反,请遵循仅使用根用户创建您的第一个 IAM 用户的最佳实践。然后请妥善保存根用户凭证,仅用它们执行少数账户和服务管理任务。

IAM 用户和组

IAM 用户是 AWS 账户 内对某个人员或应用程序具有特定权限的一个身份。IAM 用户可能具有长期凭证,例如用户名和密码或一组访问密钥。要了解如何生成访问密钥,请参阅 IAM 用户指南 中的管理 IAM 用户的访问密钥。为 IAM 用户生成访问密钥时,请确保查看并安全保存密钥对。您以后无法找回秘密访问密钥,而是必须生成新的访问密钥对。

IAM 组 是一个指定一组 IAM 用户的身份。您不能使用组的身份登录。您可以使用组来一次性为多个用户指定权限。如果有大量用户,使用组可以更轻松地管理用户权限。例如,您可能具有一个名为 IAMAdmins 的组,并为该组授予权限以管理 IAM 资源。

用户与角色不同。用户唯一地与某个人员或应用程序关联,而角色旨在让需要它的任何人代入。用户具有永久的长期凭证,而角色提供临时凭证。要了解更多信息,请参阅 IAM 用户指南中的何时创建 IAM 用户(而不是角色)

IAM 角色

IAM 角色是 AWS 账户 中具有特定权限的身份。它类似于 IAM 用户,但与特定人员不关联。您可以通过切换角色,在 AWS Management Console 中暂时代入 IAM 角色。您可以调用 AWS CLI 或 AWS API 操作或使用自定义 URL 以代入角色。有关使用角色的方法的更多信息,请参阅 IAM 用户指南 中的使用 IAM 角色

具有临时凭证的 IAM 角色在以下情况下很有用:

  • 临时 IAM 用户权限 – IAM 用户可以代入 IAM 角色,以暂时获得不同的权限以执行特定的任务。

  • 联合身份用户访问 – 您可以不创建 IAM 用户,而是使用来自 AWS Directory Service、您的企业用户目录或 Web 身份提供商的现有身份。这些用户被称为联合用户。在通过身份提供商请求访问权限时,AWS 将为联合身份用户分配角色。有关联合身份用户的更多信息,请参阅 IAM 用户指南 中的联合身份用户和角色

  • 跨账户访问 – 您可以使用 IAM 角色以允许不同账户中的某个人(可信委托人)访问您的账户中的资源。角色是授予跨账户访问权限的主要方式。但是,对于某些 AWS 服务,您可以将策略直接附加到资源(而不是使用角色作为代理)。要了解用于跨账户访问的角色和基于资源的策略之间的差别,请参阅 IAM 用户指南 中的 IAM 角色与基于资源的策略有何不同

  • 跨服务访问 – 某些 AWS 服务使用其他 AWS 服务中的功能。例如,当您在某个服务中进行调用时,该服务通常会在 Amazon EC2 中运行应用程序或在 Amazon S3 中存储对象。服务可能会使用发出调用的委托人的权限、使用服务角色或使用服务相关角色来执行此操作。

    • 委托人权限 – 当您使用 IAM 用户或角色在 AWS 中执行操作时,您将被视为委托人。策略向委托人授予权限。使用某些服务时,您可能会执行一个操作,此操作然后在不同服务中触发另一个操作。在这种情况下,您必须具有执行这两个操作的权限。要查看某个操作是否需要策略中的其他相关操作,请参阅服务授权参考中的 AWS Database Migration Service 的操作、资源和条件键

    • 服务角色 – 服务角色是服务代表您在您的账户中执行操作而担任的 IAM 角色。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息,请参阅 IAM 用户指南中的创建向AWS服务委派权限的角色

    • 服务相关角色 – 服务相关角色是与 AWS 服务关联的一种服务角色。服务可以代入代表您执行操作的角色。服务相关角色显示在您的 IAM 账户中,并归该服务所有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

  • 在 Amazon EC2 上运行的应用程序 – 您可以使用 IAM 角色管理在 EC2 实例上运行并发出 AWS CLI 或 AWS API 请求的应用程序的临时凭证。这优先于在 EC2 实例中存储访问密钥。要将 AWS 角色分配给 EC2 实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件。实例配置文件包含角色,并使 EC2 实例上运行的程序能够获得临时凭证。有关更多信息,请参阅 IAM 用户指南 中的使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限

要了解是使用 IAM 角色还是 IAM 用户,请参阅 IAM 用户指南 中的何时创建 IAM 角色(而不是用户)

使用策略管理访问

您将创建策略并将其附加到 IAM 身份或AWS资源,以便控制AWS中的访问。策略是AWS中的对象;在与标识或资源相关联时,策略定义它们的权限。您可以通过 root 用户或 IAM 用户身份登录,也可以代入 IAM 角色。随后,当您提出请求时,AWS会评估相关的基于身份或基于资源的策略。策略中的权限确定是允许还是拒绝请求。大多数策略在 AWS 中存储为 JSON 文档。有关 JSON 策略文档的结构和内容的更多信息,请参阅 IAM 用户指南中的 JSON 策略概述

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说,哪个委托人 可以对什么资源 执行操作,以及在什么 条件 下执行。

每个 IAM 实体(用户或角色)最初没有任何权限。换言之,默认情况下,用户什么都不能做,甚至不能更改他们自己的密码。要为用户授予执行某些操作的权限,管理员必须将权限策略附加到用户。或者,管理员可以将用户添加到具有预期权限的组中。当管理员为某个组授予访问权限时,该组内的全部用户都会获得这些访问权限。

IAM 策略定义操作的权限,无关乎您使用哪种方法执行操作。例如,假设您有一个允许 iam:GetRole 操作的策略。具有该策略的用户可以从 AWS Management Console、AWS CLI 或 AWS API 获取角色信息。

基于身份的策略

基于身份的策略是可附加到身份(如 IAM 用户、用户组或角色)的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略,请参阅 IAM 用户指南中的创建 IAM 策略

基于身份的策略可以进一步归类为内联策略托管策略。内联策略直接嵌入单个用户、组或角色中。托管策略是可以附加到中的多个用户、组和角色的独立策略。 AWS 账户 . 托管策略包括 AWS 托管策略和客户托管策略。要了解如何在托管策略和内联策略之间进行选择,请参阅 IAM 用户指南中的在托管策略与内联策略之间进行选择

基于资源的策略

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM 角色信任策略 和 Amazon S3 存储桶策略。在支持基于资源的策略的服务中,服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源,策略定义指定委托人可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中指定委托人。委托人可以包括账户、用户、角色、联合身份用户或 AWS 服务。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用来自 IAM 的 AWS 托管策略。

访问控制列表 (ACL)

访问控制列表 (ACL) 控制哪些委托人(账户成员、用户或角色)有权访问资源。ACL 与基于资源的策略类似,尽管它们不使用 JSON 策略文档格式。

Amazon S3、AWS WAF 和 Amazon VPC 是支持 ACL 的服务示例。要了解有关 ACL 的更多信息,请参阅访问控制列表 (ACL) 概述中的Amazon Simple Storage Service 开发人员指南.

其他策略类型

AWS 支持额外的、不太常用的策略类型。这些策略类型可以设置更常用的策略类型向您授予的最大权限。

  • 权限边界 – 权限边界是一个高级功能,用于设置基于身份的策略可以为 IAM 实体(IAM 用户或角色)授予的最大权限。您可为实体设置权限边界。这些结果权限是实体的基于身份的策略及其权限边界的交集。在 Principal 中指定用户或角色的基于资源的策略不受权限边界限制。任一项策略中的显式拒绝将覆盖允许。有关权限边界的更多信息,请参阅 IAM 用户指南中的 IAM 实体的权限边界

  • 服务控制策略 (SCP)— SCP 是指定中的组织或组织单位 (OU) 的最大权限的 JSON 策略。AWS Organizations.AWS Organizations是用于分组和集中管理多个服务。 AWS 账户 你的企业拥有的。如果在组织内启用了所有功能,则可对任意或全部账户应用服务控制策略 (SCP)。SCP 限制成员账户中实体的权限,包括每个 AWS 账户 根用户。有关 Organization 和 SCP 的更多信息,请参阅 AWS Organizations 用户指南中的 SCP 的工作原理

  • 会话策略 – 会话策略是当您以编程方式为角色或联合身份用户创建临时会话时作为参数传递的高级策略。结果会话的权限是用户或角色的基于身份的策略和会话策略的交集。权限也可以来自基于资源的策略。任一项策略中的显式拒绝将覆盖允许。有关更多信息,请参阅 IAM 用户指南中的会话策略

多个策略类型

当多个类型的策略应用于一个请求时,生成的权限更加复杂和难以理解。要了解AWS如何确定在涉及多种策略类型时是否允许请求,请参阅 IAM 用户指南中的策略评估逻辑

AWS Database Migration Service 如何与 IAM 协同工作

在使用 IAM 管理对 AWS DMS 的访问之前,您应了解哪些 IAM 功能可与 AWS DMS 结合使用。要大致了解 AWS DMS 和其他 AWS 服务如何与 IAM 一起使用,请参阅 IAM 用户指南中的与 IAM 一起使用的 AWS 服务

AWS DMS 基于身份的策略

通过使用 IAM 基于身份的策略,您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。AWS DMS支持特定的操作、资源和条件键。要了解您在 JSON 策略中使用的所有元素,请参阅 IAM 用户指南中的 IAM JSON 策略元素参考

Actions

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说,哪个委托人 可以对什么资源 执行操作,以及在什么 条件 下执行。

JSON 策略的 Action 元素描述可用于在策略中允许或拒绝访问的操作。策略操作通常与关联的 AWS API 操作同名。有一些例外情况,例如没有匹配 API 操作的仅限权限 操作。还有一些操作需要在策略中执行多个操作。这些附加操作称为相关操作

在策略中包含操作以授予执行相关操作的权限。

中的策略操作AWS DMS在操作前使用以下前缀:dms:. 例如,要授予某人使用AWS DMS CreateReplicationTaskAPI 操作,你包括dms:CreateReplicationTask他们的政策中的行动。策略语句必须包括 ActionNotAction 元素。AWS DMS 定义了自己的一组操作,这些操作描述了可使用该服务执行的任务。

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示。

"Action": [ "dms:action1", "dms:action2"

您也可以使用通配符 (*) 指定多个操作。例如,要指定以单词 Describe 开头的所有操作,请包括以下操作。

"Action": "dms:Describe*"

要查看 AWS DMS 操作列表,请参阅 IAM 用户指南中的 AWS Database Migration Service 定义的操作

Resources

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说,哪个委托人 可以对什么资源 执行操作,以及在什么 条件 下执行。

Resource JSON 策略元素指定要向其应用操作的一个或多个对象。语句必须包含 ResourceNotResource 元素。作为最佳实践,请使用其 Amazon Resource Name(ARN)指定资源。对于支持特定资源类型(称为资源级权限)的操作,您可以执行此操作。

对于不支持资源级权限的操作(如列出操作),请使用通配符 (*) 指示语句应用于所有资源。

"Resource": "*"

AWS DMS与以下资源配合使用:

  • Certificates

  • 端点

  • 事件订阅

  • 复制实例

  • 复制子网(安全)组

  • 复制任务

AWS DMS 需要的一个或多个资源取决于您调用的一个或多个操作。您需要一个允许对资源 ARN 指定的关联资源执行这些操作的策略。

例如,AWS DMS 终端节点资源具有以下 ARN:

arn:${Partition}:dms:${Region}:${Account}:endpoint/${InstanceId}

有关 ARN 格式的更多信息,请参阅 Amazon Resource Name (ARN) 和 AWS 服务命名空间

例如,要在语句中指定 use-east-2 区域的 1A2B3C4D5E6F7G8H9I0J1K2L3M 终端节点实例,请使用以下 ARN。

"Resource": "arn:aws:dms:us-east-2:987654321098:endpoint/1A2B3C4D5E6F7G8H9I0J1K2L3M"

要指定特定账户包含的所有终端节点,请使用通配符 (*)。

"Resource": "arn:aws:dms:us-east-2:987654321098:endpoint/*"

无法对特定资源执行某些 AWS DMS 操作,例如,用于创建资源的操作。在这些情况下,您必须使用通配符 (*)。

"Resource": "*"

一些 AWS DMS API 操作涉及多种资源。例如,StartReplicationTask启动复制任务并将其连接到两个数据库终端节点资源(一个源和一个目标),因此 IAM 用户必须具有读取源终端节点和写入目标终端节点的权限。要在单个语句中指定多个资源,请使用逗号分隔 ARN。

"Resource": [ "resource1", "resource2" ]

有关使用策略控制对 AWS DMS 资源的访问的更多信息,请参阅 。要查看列表AWS DMS资源类型及其 ARN,请参阅定义的资源AWS Database Migration Service中的IAM 用户指南. 要了解您可以在哪些操作中指定每个资源的 ARN,请参阅 AWS Database Migration Service 定义的操作

条件键

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说,哪个委托人 可以对什么资源 执行操作,以及在什么 条件 下执行。

Condition 元素(或 Condition )中,可以指定语句生效的条件。Condition 元素是可选的。您可以创建使用条件运算符(例如,等于或小于)的条件表达式,以使策略中的条件与请求中的值相匹配。

如果您在一个语句中指定多个 Condition 元素,或在单个 Condition 元素中指定多个键,则 AWS 使用逻辑 AND 运算评估它们。如果您为单个条件键指定多个值,则 AWS 使用逻辑 OR 运算来评估条件。在授予语句的权限之前必须满足所有的条件。

在指定条件时,您也可以使用占位符变量。例如,只有在使用 IAM 用户名标记 IAM 用户时,您才能为其授予访问资源的权限。有关更多信息,请参阅 IAM 用户指南 中的 IAM 策略元素:变量和标签

AWS支持全局条件键和特定于服务的条件键。要查看所有 AWS 全局条件键,请参阅 IAM 用户指南中的 AWS 全局条件上下文键。

AWS DMS 定义了自己的一组条件键,还支持使用一些全局条件键。要查看所有 AWS 全局条件键,请参阅 IAM 用户指南中的 AWS 全局条件上下文键

AWS DMS 定义了一组可在其条件键中使用的标准标签,并允许您定义自己的自定义标签。有关更多信息,请参阅使用标签控制访问

要查看列表AWS DMS条件键,请参阅的条件键AWS Database Migration Service中的IAM 用户指南. 要了解您可以对哪些操作和资源使用条件键,请参阅定义的操作AWS Database Migration Service定义的资源AWS Database Migration Service.

Examples

要查看 AWS DMS 基于身份的策略的示例,请参阅AWS Database Migration Service 基于身份的策略示例

AWS DMS 基于资源的策略

基于资源的策略是 JSON 策略文档,它们指定了所指定委托人可对给定 AWS DMS 资源执行的操作以及在什么条件下可执行。AWS DMS 对 AWS KMS 加密密钥支持基于资源的权限策略,可以对迁移到支持的目标终端节点的数据进行加密。支持的目标终端节点包括 Amazon Redshift 和 Amazon S3。通过使用基于资源的策略,您可以向每个目标终端节点的其他账户授予使用这些加密密钥的权限。

要启用跨账户访问,您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的委托人。将跨账户委托人添加到基于资源的策略只是建立信任关系工作的一半而已。当委托人和资源位于不同的AWS账户中时,还必须授予委托人实体对资源的访问权限。通过将基于身份的策略附加到实体以授予权限。但是,如果基于资源的策略向同一个账户中的委托人授予访问权限,则不需要额外的基于身份的策略。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色与基于资源的策略有何不同

AWS DMS 服务仅支持一种类型的基于资源的策略(称为密钥策略),这种策略附加到 AWS KMS 加密密钥。此策略定义哪些委托人实体(账户、用户、角色和联合身份用户)可以对支持的目标终端节点上的迁移数据进行加密。

要了解如何将基于资源的策略附加到为支持的目标终端节点创建的加密密钥,请参阅 创建和使用AWS KMS用于加密 Amazon Redshift 目标数据的密钥创建AWS KMS用于加密 Amazon S3 目标对象的密钥

Examples

有关 AWS DMS 基于资源的策略的示例,请参阅AWS KMS 基于资源的策略示例

基于 AWS DMS 标签的授权

您可以将标签附加到 AWS DMS 资源或将请求中的标签传递到 AWS DMS。要基于标签控制访问,您需要在条件元素使用策略dms:ResourceTag/key-nameaws:RequestTag/key-name,或者aws:TagKeys条件键。AWS DMS定义了一组可在其条件键中使用的标准标签,还允许您定义自己的自定义标签。有关更多信息,请参阅使用标签控制访问

有关基于标签限制资源访问权的基于身份的策略示例,请参阅根据标签访问 AWS DMS 资源

适用于的 IAM 角色AWS DMS

IAM 角色是 AWS 账户中具有特定权限的实体。

将临时凭证用于 AWS DMS

您可以使用临时凭证进行联合身份登录,担任 IAM 角色或担任跨账户角色。您可以通过调用 AWS STS API 操作(如 AssumeRoleGetFederationToken)获取临时安全凭证。

AWS DMS 支持使用临时凭证。

服务相关角色

服务相关角色允许 AWS 服务访问其他服务中的资源以代表您完成操作。服务相关角色显示在您的 IAM 账户中,并归该服务所有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

AWS DMS 不支持服务相关角色。

服务角色

此功能允许服务代表您担任服务角色。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在您的 IAM 账户中,并归该账户所有。这意味着,IAM 管理员可以更改该角色的权限。但是,这样做可能会中断服务的功能。

AWS DMS 支持两种类型的服务角色,您必须创建这些角色才能使用特定的源或目标终端节点:

在中选择 IAM 角色AWS DMS

如果您将AWS CLI或者AWS对于数据库迁移的 DMS API,您必须添加特定 IAM 角色到您的AWS账户之前你可以使用AWSDMS. 其中两个角色为 dms-vpc-roledms-cloudwatch-logs-role。如果您使用 Amazon Redshift 作为目标数据库,还必须添加 IAM 角色。dms-access-for-endpoint对您的AWSaccount. 有关更多信息,请参阅创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

AWS Database Migration Service 基于身份的策略示例

预设情况下,IAM 用户和角色没有创建或修改 AWS DMS 资源的权限。它们还无法使用 AWS Management Console、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅 IAM 用户指南中的在 JSON 选项卡上创建策略

策略最佳实践

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 AWS DMS 资源。这些操作可能会使 AWS 账户 产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

  • 开始使用AWS托管式策略 – 要快速开始使用 AWS DMS,请使用AWS托管式策略,为您的员工提供他们所需的权限。这些策略已在您的账户中提供,并由 AWS 维护和更新。有关更多信息,请参阅 IAM 用户指南中的开始使用 AWS 托管策略中的权限

  • 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最低权限

  • 为敏感操作启用 MFA – 为了提高安全性,要求 IAM 用户使用多重验证 (MFA) 访问敏感资源或 API 操作。有关更多信息,请参阅《IAM 用户指南》中的在 AWS 中使用多重身份验证 (MFA)

  • 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 。IAM JSON 策略元素:Condition中的IAM 用户指南.

使用 AWS DMS 控制台

以下策略允许您访问AWSDMS,包括AWS此外,还指定了其他 Amazon 服务(如 Amazon EC2)所需的特定操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "arn:aws:dms:region:account:resourcetype/id" } ] }

细分这些权限可以帮助您更好地了解使用控制台需要每个权限的原因。

需要使用以下部分以允许用户列出可用的 AWS KMS 密钥和别名,以便在控制台中显示。如果您知道 KMS 密钥的 Amazon 资源名称 (ARN) 并且仅使用 AWS Command Line Interface (AWS CLI),则不需要此条目。

{ "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

对于需要在终端节点中传入角色 ARN 的某些终端节点类型,需要使用以下部分。此外,如果没有提前创建所需的 AWS DMS 角色,则 AWS DMS 控制台可以创建该角色。如果提前配置了所有角色,这是 iam:GetRoleiam:PassRole 中所需的所有角色。有关 角色的更多信息,请参阅创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

以下部分是必需的,因为AWS DMS需要创建 Amazon EC2 实例并为创建的复制实例配置网络。这些资源位于客户的账户中,因此,需要能够代表客户执行这些操作。

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用以下部分,以允许用户查看复制实例指标。

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用该部分,以允许用户查看复制日志。

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

在将 Amazon Redshift 作为目标时,需要使用以下部分。允许AWS DMS验证是否为正确设置 Amazon Redshift 群集。AWS DMS.

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "arn:aws:dms:region:account:resourcetype/id" }

这些区域有:AWSDMS 控制台创建多个角色,可自动附加到您的AWS使用时的帐户AWSDMS 控制台。如果您将AWS Command Line Interface(AWS CLI) 或者AWS对于您的迁移 DMS API,您需要将这些角色添加到您的账户。有关添加这些角色的更多信息,请参阅 创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

有关使用此策略访问的要求的更多信息。AWS请参阅 DMS使用 AWS DMS 所需的 IAM 权限.

允许用户查看他们自己的权限

该示例说明了您如何创建策略,以允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

访问一个 Amazon S3 存储桶

AWSDMS 使用 Amazon S3 存储桶作为数据库迁移的中间存储。通常,AWS为此,DMS 管理默认 S3 存储桶。但是,在某些情况下,特别是当您使用AWS CLI或者AWSDMS API,AWS而是,DMS 允许您指定您自己的 S3 存储桶。例如,您可以指定自己的 S3 存储桶以将数据迁移到 Amazon Redshift 目标终端节点。在这种情况下,您需要创建具有基于AWS-管理AmazonDMSRedshiftS3Role政策。

以下示例显示了的AmazonDMSRedshiftS3Role政策。允许AWS在您的 DMS 中授予 IAM 用户AWS对您的 Amazon S3 存储桶之一的账户访问。它还允许用户添加、更新和删除对象。

除了授予该用户 s3:PutObjects3:GetObjects3:DeleteObject 权限外,此策略还授予 s3:ListAllMyBucketss3:GetBucketLocations3:ListBucket 权限。这些是控制台所需的其他权限。允许其他权限AWSDMS 用于管理存储桶生命周期。此外,需要 s3:GetObjectAcl 操作才能复制对象。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:ListBucket", "s3:DeleteBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetBucketPolicy", "s3:PutBucketPolicy", "s3:GetBucketAcl", "s3:PutBucketVersioning", "s3:GetBucketVersioning", "s3:PutLifecycleConfiguration", "s3:GetLifecycleConfiguration", "s3:DeleteBucketPolicy" ], "Resource": "arn:aws:s3:::dms-*" } ] }

有关基于此策略创建角色的更多信息,请参阅 Amazon S3 存储桶设置

根据标签访问 AWS DMS 资源

您可以在基于身份的策略中使用条件,以便基于标签控制对 AWS DMS 资源的访问。此示例演示如何创建允许访问所有的策略。AWSDMS 端点。但是,仅当终端节点数据库标签 Owner 具有该用户的用户名值时,才会授予相应权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:*:*:endpoint/*", "Condition": { "StringEquals": {"dms:endpoint-tag/Owner": "${aws:username}"} } } ] }

您可以将该策略附加到您账户中的 IAM 用户。如果名为 richard-roe 的用户尝试访问 AWS DMS 终端节点,终端节点数据库必须带有 Owner=richard-roeowner=richard-roe 标签。否则,此用户将被拒绝访问。条件标签键 Owner 匹配 Ownerowner,因为条件键名称不区分大小写。有关更多信息,请参阅 。IAM JSON 策略元素:Condition中的IAM 用户指南.

AWS KMS 基于资源的策略示例

AWSDMS 允许你创建自定义AWS KMS加密密钥来加密支持的目标终端节点数据 要了解如何创建密钥策略并将其附加到为支持的目标数据加密而创建的加密密钥,请参阅 创建和使用AWS KMS用于加密 Amazon Redshift 目标数据的密钥创建AWS KMS用于加密 Amazon S3 目标对象的密钥

自定义策略AWS KMS用于加密 Amazon Redshift 目标数据的加密密钥

以下示例显示了为AWS KMS您为加密 Amazon Redshift 目标数据而创建的加密密钥。

{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-Redshift-endpoint-access-role" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-Redshift-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }

您可以在此示例中看到密钥策略引用在创建密钥之前创建的角色以便访问 Amazon Redshift 目标终端节点数据。在该示例中,该角色为 DMS-Redshift-endpoint-access-role。您还可以查看不同委托人(用户和角色)所允许的不同密钥操作。例如,任何具有 DMS-Redshift-endpoint-access-role 的用户都可以对目标数据进行加密、解密和重新加密。此类用户还可以生成用于导出的数据密钥来加密 AWS KMS 外部的数据。他们还可以返回有关AWS KMSkey,例如,刚刚创建的密钥。此外,此类用户还可以管理附件AWS资源,例如,目标终端节点。

自定义策略AWS KMS用于加密 Amazon S3 目标数据的加密密钥

以下示例显示了为AWS KMS您为加密 Amazon S3 目标数据而创建的加密密钥。

{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-S3-endpoint-access-role" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-S3-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]

您可以在此示例中看到密钥策略引用在创建密钥之前创建的角色以便访问 Amazon S3 目标终端节点数据。在该示例中,该角色为 DMS-S3-endpoint-access-role。您还可以查看不同委托人(用户和角色)所允许的不同密钥操作。例如,任何具有 DMS-S3-endpoint-access-role 的用户都可以对目标数据进行加密、解密和重新加密。此类用户还可以生成用于导出的数据密钥来加密 AWS KMS 外部的数据。他们还可以返回有关AWS KMSkey,例如,刚刚创建的密钥。此外,此类用户还可以管理附件AWS资源,例如,目标终端节点。

使用秘密来访问AWS Database Migration Service终端节点

适用于AWS DMS,a密钥是一种加密密钥,您可以用它来表示一组要进行身份验证的用户凭据,通过秘密验证,受支持的数据库连接AWS DMS源或目标终端节点。对于同时使用 Oracle 高级存储管理 (ASM) 的 Oracle 终端节点,AWS DMS需要一个表示用户凭据的附加密钥才能访问 Oracle ASM。

你可以创建一个或多个秘密AWS DMS需要进行秘密身份验证AWS Secrets Manager,这是一项用于安全创建、存储和检索凭据的服务,以访问云中和本地的应用程序、服务和 IT 资源。这包括支持在无需干预的情况下自动定期轮换加密密钥值,从而为您的凭证提供额外的安全级别。在中启用密钥值轮换AWS Secrets Manager还可以确保这种密钥值轮换不会对依赖密钥的任何数据库迁移产生任何影响。要秘密对端点数据库连接进行身份验证,请创建一个您分配给其身份或 ARN 的密钥SecretsManagerSecretId,您将其包含在终端节点设置中。要秘密身份验证作为 Oracle 终端节点的一部分的 Oracle ASM,请创建一个您分配给其身份或 ARN 的密钥SecretsManagerOracleAsmSecretId,您还将其包括在终端节点设置中。

有关AWS Secrets Manager,请参阅什么是AWSSecrets Manager?中的AWS Secrets Manager用户指南.

AWS DMS支持以下内部部署的秘密身份验证或AWS-受支持的源端点和目标端点上的托管数据库

  • Amazon DocumentDB

  • IBM Db2 LUW

  • Microsoft SQL Server

  • MongoDB

  • MySQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

要连接到这些数据库中的任何一个,您可以选择输入以下值集之一,但不能同时输入两组值,作为终端节点设置的一部分:

  • 使用 Clear-text 值来验证数据库连接UserNamePasswordServerName, 和Port设置。对于同时使用 Oracle ASM 的 Oracle 终端节点,请包含额外的明文值,以便使用AsmUserNameAsmPassword, 和AsmServerName设置。

  • 使用的值进行秘密身份验证SecretsManagerSecretIdSecretsManagerAccessRoleArn设置。对于使用 Oracle ASM 的 Oracle 终端节点,请包含SecretsManagerOracleAsmSecretIdSecretsManagerOracleAsmAccessRoleArn设置。这些设置的秘密值可以包括以下内容:

    • SecretsManagerSecretId— 完整的 Amazon 资源名称 (ARN)、部分 ARN 或您在AWS Secrets Manager.

    • SecretsManagerAccessRoleArn— 您在 IAM 中创建的要提供的秘密访问角色的 ARNAWS DMS针对的访问权限SecretsManagerSecretId代表您密钥。

    • SecretsManagerOracleAsmSecretId— 您在AWS Secrets Manager.

    • SecretsManagerOracleAsmAccessRoleArn— 您在 IAM 中创建的要提供的秘密访问角色的 ARNAWS DMS针对的访问权限SecretsManagerOracleAsmSecretId代表您密钥。

    注意

    您还可以使用单个秘密访问角色来提供AWS DMS同时访问SecretsManagerSecretId secret and the SecretsManagerOracleAsmSecretId密钥。如果为两个密钥创建此单个密钥访问角色,请确保为此访问角色分配了相同的 ARN 给两个机密SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn. 例如,如果两个机密的秘密访问角色都将其 ARN 分配给该变量,ARN2xsecrets,您可以按如下方式设置这些 ARN 设置:

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    有关创建这些值的更多信息,请参阅。使用AWS Management Console创建秘密和秘密访问角色.

为终端节点创建并指定了所需的机密和秘密访问角色终端节点设置后,请更新将运行CreateEndpoint或者ModifyEndpoint包含这些秘密细节的 API 请求。确保这些账户权限包括IAM:GetRole对秘密访问角色和SecretsManager:DescribeSecret对秘密的许可。AWS DMS需要这些权限才能验证访问角色及其秘密。

提供和验证所需的用户权限

  1. 通过以下网址登录 AWS Management Console并打开 AWS Identity and Access Management 控制台:https://console.aws.amazon.com/iam/

  2. 选择用户,然后选择User ID (用户 ID)用于制作CreateEndpointModifyEndpointAPI 调用。

  3. Permissions (权限)选项卡上,选择{} JSON.

  4. 确保用户拥有以下权限。

    { "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "SECRET_ACCESS_ROLE_ARN" }, { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "SECRET_ARN" } ] }
  5. 如果用户没有这些权限,请添加权限。

  6. 如果您使用 IAM 角色来调用 DMS API 调用,请对相应角色重复上述步骤。

  7. 打开终端并使用AWS CLI通过承担上面使用的角色或用户来验证权限是否正确授予。

    1. 使用 IAM 验证用户对 SecretAccessRole 的权限get-role命令。

      aws iam get-role --role-name ROLE_NAME

      ReplaceROLE_NAME用的名字SecretsManagerAccessRole.

      如果命令返回错误消息,请确保正确授予权限。

    2. 使用密钥 Secrets Manager 验证用户对密码的权限describe-secret命令。

      aws secretsmanager describe-secret --secret-id SECRET_NAME OR SECRET_ARN --region=REGION_NAME

      用户可以是友好名称、部分 ARN 或完整的 ARN。有关更多信息,请参阅 。描述密钥.

      如果命令返回错误消息,请确保正确授予权限。

使用AWS Management Console创建秘密和秘密访问角色

您可以使用AWS Management Console为终端节点身份验证创建密码并创建允许的策略和角色AWS DMS代表您访问密钥。

使用创建密钥AWS Management ConsolethatAWS DMS可以用来验证数据库以获取源端点和目标终端节点连接

  1. 通过以下网址登录 AWS Management Console并打开 AWS Secrets Manager 控制台:https://console.aws.amazon.com/secretsmanager/

  2. 选择 Store a new secret (存储新密钥)

  3. 根据选择密钥类型存储新密钥页面上,选择其他密钥,然后选择明文.

    注意

    这是您需要输入明文凭据才能从此之后连接到终端节点数据库的唯一位置。

  4. 明文字段:

    • 对于你分配身份的秘密SecretsManagerSecretId中,输入以下 JSON 结构。

      { "username": db_username, "password": db_user_password, "port": db_port_number, "host": db_server_name }
      注意

      这是验证终端节点数据库所需的 JSON 成员的最低列表。您可以将任何额外的 JSON 终端节点设置添加为 JSON 成员,所需的所有小写字母。但是,AWS DMS忽略任何其他 JSON 成员进行端点身份验证。

      此处,db_username是访问数据库的用户的名称,db_user_password是数据库用户的密码,db_port_number是访问数据库的端口号,并且db_server_name是 Web 上的数据库服务器名称(地址),如以下示例所示。

      { "username": "admin", "password": "some_password", "port": "8190", "host": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com" }
    • 对于你分配身份的秘密SecretsManagerOracleAsmSecretId中,输入以下 JSON 结构。

      { "asm_user": asm_username, "asm_password": asm_user_password, "asm_server": asm_server_name }
      注意

      这是对 Oracle 终端节点的 Oracle ASM 进行身份验证所需的最低 JSON 成员列表。它也是您可以根据可用的 Oracle ASM 终端节点设置指定的完整列表。

      此处,asm_username是访问 Oracle ASM 的用户的名称,asm_user_password是 Oracle ASM 用户的密码,并且asm_server_name是 Web 上的 Oracle ASM 服务器名称(地址),包括端口,如以下示例所示。

      { "asm_user": "oracle_asm_user", "asm_password": "oracle_asm_password", "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" }
  5. 选择AWS KMS加密密钥来加密密钥。您可以接受为您的服务创建的默认加密密钥:AWS Secrets Manager或选择AWS KMS您创建的键。

  6. 指定要引用此密钥的名称和可选描述。这是你用作值的友好名称SecretsManagerSecretId或者SecretsManagerOracleAsmSecretId.

  7. 如果你想在密码中启用自动轮换,你需要选择或创建AWS Lambda函数具有按照所述轮换密钥的凭据的权限。但是,在将自动轮换设置为使用 Lambda 函数之前,请确保该函数的配置设置将以下四个字符添加到EXCLUDE_CHARACTERS环境变量。

    ;.:+

    AWS DMS不允许在用于端点凭据的密码中使用这些字符。将 Lambda 函数配置为排除它们可防止AWS Secrets Manager从生成这些字符作为其轮换密码值的一部分。将自动轮换设置为使用 Lambda 函数之后,AWS Secrets Manager立即轮换密码以验证你的密钥配置。

    注意

    根据数据库引擎的配置,数据库可能无法获取轮换的凭据。在这种情况下,您需要手动重新启动任务才能刷新凭据。

  8. 在中查看并存储密钥AWS Secrets Manager. 然后您可以按友好名称查找每个密钥。AWS Secrets Manager,然后检索秘密 ARN 作为SecretsManagerSecretId或者SecretsManagerOracleAsmSecretId以验证对终端节点数据库连接和 Oracle ASM(如果使用)的访问权限。

创建秘密访问策略和角色以设置SecretsManagerAccessRoleArn或者SecretsManagerOracleAsmAccessRoleArn,这允许AWS DMS访问AWS Secrets Manager访问适当的秘密

  1. 登录到AWS Management Console打开AWS Identity and Access Management(IAM) 控制台https://console.aws.amazon.com/iam/.

  2. 选择策略,然后选择创建策略.

  3. 选择JSON然后输入以下策略以启用对秘密的访问和解密。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": secret_arn, }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": kms_key_arn, } ] }

    此处,secret_arn是你的秘密的 ARN,可以从任何一个中获取。SecretsManagerSecretId或者SecretsManagerOracleAsmSecretId根据需要使用,kms_key_arn是的 ARNAWS KMS您用来加密密钥的密钥,如以下示例所示。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-2:123456789012:secret:MySQLTestSecret-qeHamH" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/761138dc-0542-4e58-947f-4a3a8458d0fd" } ] }
    注意

    如果使用创建的默认加密密密钥AWS Secrets Manager,您不必指定AWS KMS的权限kms_key_arn.

    如果你希望你的策略提供对两个密钥的访问权限,只需为另一个密钥指定一个额外的 JSON 资源对象secret_arn.

  4. 查看并创建具有友好名称和可选描述的策略。

  5. 选择角色,然后选择创建角色.

  6. 选择AWS服务作为受信任实体的类型。

  7. 选择DMS从服务列表中作为可信服务,然后选择后续:Permissions (下一步:权限)

  8. 查找并附加您在步骤 4 中创建的策略,然后继续添加任何标签并查看您的角色。此时,编辑角色的信任关系以使用AWS DMS区域服务委托人作为可信实体。此委托人采用以下格式。

    dms.region-name.amazonaws.com

    此处,region-name是你所在地区的名称,例如us-east-1. 因此,AWS DMS该区域的区域服务主体如下。

    dms.us-east-1.amazonaws.com
  9. 编辑角色的受信任实体后,创建具有友好名称和可选描述的角色。现在,您可以在 IAM 中按其友好名称查找新角色,然后将角色 ARN 作为SecretsManagerAccessRoleArn或者SecretsManagerOracleAsmAccessRoleArn值来验证终端节点数据库连接。

将密钥管理器与私有子网中的复制实例一起使用

  1. 创建一个秘密管理器 VPC 终端节点并记下终端节点的 DNS。有关创建密钥管理器 VPC 终端节点的更多信息,请参阅通过 VPC 终端节点连接到 Secrets Manager 中的AWSSecrets Manager 用户指南。

  2. 将复制实例安全组附加到秘密管理器 VPC 终端节点。

  3. 对于复制实例安全组出口规则,允许目标的所有流量0.0.0.0/0.

  4. 设置端点额外连接属性,secretsManagerEndpointOverride=secretsManager endpoint DNS提供密钥管理器 VPC 终端节点 DNS,如下例所示。

    secretsManagerEndpointOverride=vpce-1234a5678b9012c-12345678.secretsmanager.eu-west-1.vpce.amazonaws.com

对 AWS Database Migration Service 身份和访问进行故障排除

使用以下信息可帮助您诊断和修复在使用 AWS DMS 和 IAM 时可能遇到的常见问题。

我无权在 AWS DMS 中执行操作

如果 AWS Management Console 告诉您,您无权执行某个操作,则必须联系您的管理员寻求帮助。您的管理员是指为您提供用户名和密码的那个人。

下面的示例错误发生在mateojacksonIAM 用户尝试使用控制台来查看有关的详细信息。AWS但没有 DMS 终端节点dms: DescribeEndpoint权限。

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: dms:DescribeEndpoint on resource: my-postgresql-target

在这种情况下,Mateo 请求管理员更新其策略,以允许他使用 dms:DescribeEndpoint 操作访问 my-postgresql-target 终端节点资源。

我无权执行 iam:PassRole

如果您收到错误消息,提示您无权执行 iam:PassRole 操作,则必须联系您的管理员寻求帮助。您的管理员是指为您提供用户名和密码的那个人。请求该人员更新您的策略,以便允许您将角色传递给 AWS DMS。

有些 AWS 服务允许您将现有角色传递到该服务,而不是创建新服务角色或服务相关角色。为此,您必须具有将角色传递到服务的权限。

当名为 marymajor 的 IAM 用户尝试使用控制台在 AWS DMS 中执行操作时,会发生以下示例错误。但是,服务必须具有服务角色所授予的权限才可执行操作。Mary 不具有将角色传递到服务的权限。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

在这种情况下,Mary 请求她的管理员来更新其策略,以允许她执行 iam:PassRole 操作。

我想要查看我的访问密钥

在创建 IAM 用户访问密钥后,您可以随时查看您的访问密钥 ID。但是,您无法再查看您的秘密访问密钥。如果您丢失了私有密钥,则必须创建一个新的访问密钥对。

访问密钥包含两部分:访问密钥 ID(例如 AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。与用户名和密码一样,您必须同时使用访问密钥 ID 和秘密访问密钥对请求执行身份验证。像对用户名和密码一样,安全地管理访问密钥。

重要

请不要向第三方提供访问密钥,即便是为了帮助找到您的规范用户 ID 也不行。如果您这样做,可能会向某人提供对您的账户的永久访问权限。

当您创建访问密钥对时,系统会提示您将访问密钥 ID 和秘密访问密钥保存在一个安全位置。秘密访问密钥仅在您创建它时可用。如果丢失了您的秘密访问密钥,您必须为 IAM 用户添加新的访问密钥。您最多可拥有两个访问密钥。如果您已有两个密钥,则必须删除一个密钥对,然后再创建新的密钥。要查看说明,请参阅 IAM 用户指南 中的管理访问密钥

我是管理员并希望允许其他人访问 AWS DMS

要允许其他人访问 AWS DMS,您必须为需要访问权限的人员或应用程序创建 IAM 实体(用户或角色)。它们将使用该实体的凭证访问 AWS。然后,您必须将策略附加到实体,以便在 AWS DMS 中向其授予正确的权限。

要立即开始使用,请参阅 IAM 用户指南中的创建您的第一个 IAM 委派用户和组

我希望允许我的 AWS 账户之外的人员访问我的 AWS DMS 资源

您可以创建一个角色,以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖,可以代入角色。对于支持基于资源的策略或访问控制列表 (ACL) 的服务,您可以使用这些策略向人员授予对您的资源的访问权。

要了解更多信息,请参阅以下内容:

AWS Database Migration Service 的合规性验证

作为多个 AWS Database Migration Service 合规性计划的一部分,第三方审核员将评估 AWS 的安全性和合规性。这些方案包括以下方案:

  • SOC

  • PCI

  • ISO

  • FedRAMP

  • DoD CC SRG

  • HIPAA BAA

  • MTCS

  • CS

  • K-ISMS

  • ENS High

  • OSPAR

  • HITRUST CSF

有关特定合规性计划范围内的 AWS 服务列表,请参阅合规性计划范围内的 AWS 服务。有关常规信息,请参阅 AWS 合规性计划

您可以使用 AWS Artifact 下载第三方审计报告。有关更多信息,请参阅 。在中下载报告AWS项目.

您使用 AWS DMS 的合规性责任取决于您数据的敏感度、贵公司的合规性目标以及适用的法律法规。AWS 提供以下资源来帮助满足合规性:

AWS Database Migration Service 中的故障恢复能力

AWS全球基础设施围绕AWS区域和可用区构建。AWS区域提供多个在物理上独立且隔离的可用区,这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起。利用可用区,您可以设计和操作在可用区之间无中断地自动实现故障转移的应用程序和数据库。与传统的单个或多个数据中心基础设施相比,可用区具有更高的可用性、容错性和可扩展性。

有关 AWS 区域和可用区的更多信息,请参阅 AWS 全球基础设施.

除了AWS全球基础设施,AWS DMS在选择时,使用多可用区部署的复制实例提供高可用性和故障转移支持。多可用区选项。

在多可用区部署中,AWS在不同可用区中,DMS 自动在不同可用区中预置和维护复制实例的备用副本。主复制实例将同步复制到备用副本。如果主复制实例发生故障或没有响应,备用副本将以最少中断恢复任何正在运行的任务。由于主复制实例会不断将其状态复制到备用副本中,因此多可用区部署会产生一些性能开销。

有关使用多可用区部署的更多信息,请参阅 使用 AWS DMS 复制实例

AWS Database Migration Service 中的基础设施安全性

作为托管服务,AWS Database Migration Service受保护AWS中描述的全局网络安全程序Amazon Web Services:安全流程概述白皮书。

您可以使用 AWS 发布的 API 调用通过网络访问 AWS DMS。客户端必须支持传输层安全性 (TLS) 1.0 或更高版本。客户端还必须支持具有完全向前保密 (PFS) 的密码套件,例如 Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)。大多数现代系统(如 Java 7 及更高版本)都支持这些模式。

此外,必须使用访问密钥 ID 和与AWS Identity and Access Management(IAM) 负责人。或者,您可以使用 AWS Security Token Service (AWS STS) 生成临时安全凭证来对请求进行签名。

您可以从任何网络位置调用这些 API 操作。AWS DMS此外还支持基于资源的访问策略,该策略可以指定对操作和资源的限制,例如,基于源 IP 地址。此外,您还可以使用AWS DMS控制来自特定 Amazon VPC 终端节点或特定 Virtual Private Cloud (VPC) 的访问的策略。事实上,这隔离了在 AWS 网络中仅从特定 VPC 到给定 AWS DMS 资源的网络访问。有关将基于资源的访问策略与 AWS DMS 结合使用的更多信息(包括示例),请参阅 使用资源名称和标签进行精细访问控制

限制你的沟通AWS DMS在单个 VPC 中,您可以创建 VPC 接口终端节点,使您能够连接到AWS DMS通过 AWS PrivateLink . AWS PrivateLink 有助于确保任何电话AWS DMS而且其相关结果仍限于为其创建接口终端节点的特定 VPC。然后,您可以将此接口终端节点的 URL 指定为一个选项,其中每个AWS DMS你使用AWS CLI或开发工具包。这样做可帮助确保您与的整个沟通AWS DMS仍然局限于 VPC,否则对公共互联网是不可见的。

创建接口终端节点以访问单个 VPC 中的 DMS

  1. 登录到AWS Management Console并打开 Amazon VPC 控制台,网址:https://console.aws.amazon.com/vpc/

  2. 从导航窗格中,选择终端节点. 此操作打开创建端节点页面,您可以在其中创建从 VPC 到的接口终端节点AWS DMS.

  3. 选择AWS服务,然后搜索并选择一个值服务名称在本例中为AWS DMS按照以下形式。

    com.amazonaws.region.dms

    此处,region指定AWS地区AWS DMS例如,运行com.amazonaws.us-west-2.dms.

  4. 适用于VPC例如,选择要从其创建接口终端节点的 VPC。vpc-12abcd34.

  5. 为选择一个值可用区而且对于子网 ID. 这些值应表示您选择的位置AWS DMS例如,终端节点可以运行us-west-2a (usw2-az1)subnet-ab123cd4.

  6. 选择启用 DNS 名称以创建带有 DNS 名称的终端节点。此 DNS 名称由终端节点 ID 组成 (vpce-12abcd34efg567hij) 用随机字符串连字符串 (ab12dc34)。它们与服务名称以反向点分隔的顺序用点分隔,其中vpce已将添加到dms.us-west-2.vpce.amazonaws.com)。

    示例是 vpce-12abcd34efg567hij-ab12dc34.dms.us-west-2.vpce.amazonaws.com

  7. 适用于安全组中,选择要用于终端节点的组。

    设置安全组时,请确保允许来自安全组内的出站 HTTPS 呼叫。有关更多信息,请参阅 。创建安全组中的Amazon VPC User Guide.

  8. 选择完全访问权限或者自定义值策略. 例如,您可以选择类似于以下内容的自定义策略,以限制终端节点对某些操作和资源的访问。

    { "Statement": [ { "Action": "dms:*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": [ "dms:ModifyReplicationInstance", "dms:DeleteReplicationInstance" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-west-2:<account-id>:rep:<replication-instance-id>", "Principal": "*" } ] }

    在这里,示例策略允许任何AWS DMSAPI 调用,但删除或修改特定复制实例除外。

现在,您可以指定使用步骤 6 中创建的 DNS 名称形成的 URL 作为选项。你为每个人都指定这个AWS DMS使用创建的接口终端节点访问服务实例的 CLI 命令或 API 操作。例如,您可以运行 DMS CLI 命令DescribeEndpoints在此 VPC 中,如下所示。

$ aws dms describe-endpoints --endpoint-url https://vpce-12abcd34efg567hij-ab12dc34.dms.us-west-2.vpce.amazonaws.com

如果您启用私有 DNS 选项,则不必在请求中指定终端节点 URL。

有关创建和使用 VPC 接口终端节点(包括启用私有 DNS 选项)的更多信息,请参阅接口 VPC 终端节点 (AWS(PrivateLink)中的Amazon VPC User Guide.

使用 AWS DMS 所需的 IAM 权限

您使用特定 IAM 权限和 IAM 角色来使用 AWS DMS。如果以 IAM 用户的身份登录并希望使用 AWS DMS,账户管理员必须附加本节中讨论的策略到 IAM 用户、组或运行 AWS DMS 所用的角色。有关 IAM 权限的更多信息,请参阅 IAM 用户指南

以下策略允许您访问AWS DMS,以及其他 Amazon 服务 (如) 的特定操作所需的权限。AWS KMS、IAM、Amazon EC2 和 Amazon CloudWatch。CloudWatch 监控您的AWS DMS并收集和跟踪指示迁移进度的指标。您可以使用 CloudWatch 日志来调试任务中的问题。

注意

您可以使用标记进一步限制对 AWS DMS 资源的访问。有关使用标记限制对 AWS DMS 资源的访问的更多信息,请参阅使用资源名称和标签进行精细访问控制

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }, { "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "arn:aws:dms:region:account:resourcetype/id" } ] }

细分以下这些权限可以帮助您更好地了解需要每个权限的原因。

需要使用以下部分以允许用户调用 AWS DMS API 操作。

{ "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:region:account:resourcetype/id" }

需要使用以下部分以允许用户列出可用的 AWS KMS 密钥和别名,以便在控制台中显示。如果您知道 KMS 密钥的 Amazon 资源名称 (ARN) 并且仅使用 AWS Command Line Interface (AWS CLI),则不需要此条目。

{ "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

对于需要在终端节点中传入 IAM 角色 ARN 的某些终端节点类型,需要使用以下部分。此外,如果没有提前创建所需的 AWS DMS 角色,AWS DMS 控制台可以创建该角色。如果提前配置了所有角色,则只需要 iam:GetRoleiam:PassRole。有关 角色的更多信息,请参阅创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

以下部分是必需的,因为AWS DMS需要创建 Amazon EC2 实例并为创建的复制实例配置网络。这些资源位于客户的账户中,因此,需要能够代表客户执行这些操作。

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用以下部分,以允许用户查看复制实例指标。

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

需要使用该部分,以允许用户查看复制日志。

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "arn:aws:service:region:account:resourcetype/id" }

在将 Amazon Redshift 作为目标时,需要使用以下部分。允许AWS DMS验证是否为正确设置 Amazon Redshift 群集。AWS DMS.

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "arn:aws:dms:region:account:resourcetype/id" }

这些区域有:AWS DMS控制台创建多个角色,可自动附加到您的AWS使用时的帐户AWS DMS控制台。如果将 AWS Command Line Interface (AWS CLI) 或 AWS DMS API 用于迁移,则需要将这些角色添加到您的账户。有关添加这些角色的更多信息,请参阅 创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

如果您将AWS CLI或者AWS DMSAPI 用于数据库迁移,您必须添加三个 IAM 角色到您的AWS账户之前你可以使用AWS DMS. 其中两个角色为 dms-vpc-roledms-cloudwatch-logs-role。如果您使用 Amazon Redshift 作为目标数据库,还必须添加 IAM 角色。dms-access-for-endpoint对您的AWSaccount.

对托管策略的更新是自动的。如果您为 IAM 角色使用自定义策略,请确保定期在此文档中检查对托管策略的更新。您可以使用 get-policyget-policy-version 命令的组合查看托管策略的详细信息。

例如,以下 get-policy 命令检索有关指定 IAM 角色的信息。

aws iam get-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole

命令返回的信息如下所示。

{ "Policy": { "PolicyName": "AmazonDMSVPCManagementRole", "Description": "Provides access to manage VPC settings for AWS managed customer configurations", "CreateDate": "2015-11-18T16:33:19Z", "AttachmentCount": 1, "IsAttachable": true, "PolicyId": "ANPAJHKIGMBQI4AEFFSYO", "DefaultVersionId": "v3", "Path": "/service-role/", "Arn": "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole", "UpdateDate": "2016-05-23T16:29:57Z" } }

以下 get-policy-version 命令检索 IAM 策略信息。

aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole --version-id v3

命令返回的信息如下所示。

{ "PolicyVersion": { "CreateDate": "2016-05-23T16:29:57Z", "VersionId": "v3", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "arn:aws:service:region:account:resourcetype/id", "Effect": "Allow" } ] }, "IsDefaultVersion": true } }

您可以使用相同命令获取有关 AmazonDMSCloudWatchLogsRoleAmazonDMSRedshiftS3Role 托管策略的信息。

注意

如果您将AWS DMS控制台用于数据库迁移,这些角色将添加到您的AWS账户自动。

以下过程创建 dms-vpc-roledms-cloudwatch-logs-roledms-access-for-endpoint IAM 角色。

创建用于 AWS CLI 或 AWS DMS API 的 dms-vpc-role IAM 角色

  1. 使用以下 IAM 策略创建 JSON 文件。将 JSON 文件命名为 dmsAssumeRolePolicyDocument.json

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

    使用 AWS CLI 通过以下命令创建角色。

    aws iam create-role --role-name dms-vpc-role --assume-role-policy-document file://dmsAssumeRolePolicyDocument.json
  2. 使用以下命令将 AmazonDMSVPCManagementRole 策略附加到 dms-vpc-role

    aws iam attach-role-policy --role-name dms-vpc-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole

创建用于 AWS CLI 或 AWS DMS API 的 dms-cloudwatch-logs-role IAM 角色

  1. 使用以下 IAM 策略创建 JSON 文件。将 JSON 文件命名为 dmsAssumeRolePolicyDocument2.json

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

    使用 AWS CLI 通过以下命令创建角色。

    aws iam create-role --role-name dms-cloudwatch-logs-role --assume-role-policy-document file://dmsAssumeRolePolicyDocument2.json
  2. 使用以下命令将 AmazonDMSCloudWatchLogsRole 策略附加到 dms-cloudwatch-logs-role

    aws iam attach-role-policy --role-name dms-cloudwatch-logs-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole

如果您使用 Amazon Redshift 作为目标数据库,则必须创建 IAM 角色。dms-access-for-endpoint以提供对 Amazon S3 的访问。

要创建 dms-访问for 终端节点 IAM 角色以将 Amazon Redshift 作为目标数据库

  1. 使用以下 IAM 策略创建 JSON 文件。将 JSON 文件命名为 dmsAssumeRolePolicyDocument3.json

    { "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "2", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 使用 AWS CLI 通过以下命令创建角色。

    aws iam create-role --role-name dms-access-for-endpoint --assume-role-policy-document file://dmsAssumeRolePolicyDocument3.json
  3. 使用以下命令将 AmazonDMSRedshiftS3Role 策略附加到 dms-access-for-endpoint 角色。

    aws iam attach-role-policy --role-name dms-access-for-endpoint \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSRedshiftS3Role

现在,您应该准备好了 IAM 策略来使用 AWS CLI 或 AWS DMS API。

使用资源名称和标签进行精细访问控制

您可以使用资源名称和基于 Amazon 资源名称 (ARN) 的资源标签来管理对 AWS DMS 资源的访问。为此,请在 IAM 策略中定义允许的操作或包括条件语句。

使用资源名称控制访问

您可以创建一个 IAM 用户账户,并根据 AWS DMS 资源的 ARN 分配策略。

以下策略将拒绝对AWS DMS使用 ARN 的复制实例arn: aws: dms: 美国东部 -1:152683116: REP: DOH67ZTOXMIHKITV

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" } ] }

例如,在该策略生效时,以下命令将失败:

$ aws dms delete-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" A client error (AccessDeniedException) occurred when calling the DeleteReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV $ aws dms modify-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" A client error (AccessDeniedException) occurred when calling the ModifyReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV

您还可以指定限制访问 AWS DMS 终端节点和复制任务的 IAM 策略。

以下策略使用终端节点的 ARN 限制对 AWS DMS 终端节点的访问。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" } ] }

例如,在使用终端节点的 ARN 的策略生效时,以下命令将失败。

$ aws dms delete-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" A client error (AccessDeniedException) occurred when calling the DeleteEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX $ aws dms modify-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" A client error (AccessDeniedException) occurred when calling the ModifyEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX

以下策略使用任务的 ARN 限制对 AWS DMS 任务的访问。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT" } ] }

例如,在使用任务的 ARN 的策略生效时,以下命令将失败。

$ aws dms delete-replication-task --replication-task-arn "arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT" A client error (AccessDeniedException) occurred when calling the DeleteReplicationTask operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationTask on resource: arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT

使用标签控制访问

AWS DMS 定义了一组可用于客户定义的策略的常见键值对,而没有任何额外的标记要求。有关标记 AWS DMS 资源的更多信息,请参阅在 中标记资源AWSDatabase Migration Service

下面列出了可用于 AWS DMS 的标准标签:

  • aws:CurrentTime – 表示请求日期和时间,从而允许根据时间条件限制访问。

  • aws: EpochTime — 该标签类似于前面的 aws: CurrentTime 标签,所不同的是,当前时间表示为自 Unix 纪元时间以来经过的秒数。

  • aws: MultiFactorAuthPreent — 这是一个布尔值标签,它指示是否通过多重身份验证对请求进行签名。

  • aws:MultiFactorAuthAge – 提供对多重身份验证令牌期限 (秒) 的访问。

  • aws: principaltype — 提供对当前请求的委托人类型(用户、账户、联合身份用户等)的访问。

  • AWS: SourceIp — 表示发出请求的用户的源 IP 地址。

  • aws:UserAgent – 提供有关请求资源的客户端应用程序的信息。

  • aws:userid – 提供对发出请求的用户的 ID 的访问。

  • aws:username – 提供对发出请求的用户的名称的访问。

  • dms:InstanceClass – 提供对复制实例主机的计算大小的访问。

  • dms: StorageSize — 提供对存储卷大小 (GB) 的访问。

您还可以定义自己的标签。客户定义的标签是保留在AWS标记服务。您可以将它们添加到 AWS DMS 资源,包括复制实例、终端节点和任务。这些标签是通过使用策略中的 IAM“条件”语句匹配的,并使用特定的条件标签引用这些标签。标签键前面带有“dms”、资源类型和“tag”前缀。下面显示了标签格式。

dms:{resource type}-tag/{tag key}={tag value}

例如,假设您要定义一个策略,以仅允许包含“stage=production”标签的复制实例成功完成 API 调用。以下条件语句会匹配具有给定标签的资源。

"Condition": { "streq": { "dms:rep-tag/stage":"production" } }

您将以下标签添加到与该策略条件匹配的复制实例中。

stage production

除了已分配给 AWS DMS 资源的标签以外,还可以编写策略以限制可应用于给定资源的标签键和值。在此情况下,标签前缀为“req”。

例如,以下策略语句将用户可为给定资源分配的标签限制为特定的允许值列表。

"Condition": { "streq": { "dms:rep-tag/stage": [ "production", "development", "testing" ] } }

以下策略示例根据资源标签限制对 AWS DMS 资源的访问。

以下策略限制对标签值为“Desktop”且标签键为“Env”的复制实例的访问:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:rep-tag/Env": [ "Desktop" ] } } } ] }

根据在标签值为“Desktop”且标签键为“Env”时限制访问的 IAM 策略,以下命令成功或失败。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --endpoint-url http://localhost:8000 { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN" A client error (AccessDeniedException) occurred when calling the DeleteReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms modify-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN" A client error (AccessDeniedException) occurred when calling the ModifyReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN

以下策略限制对标签值为“Desktop”且标签键为“Env”的 AWS DMS 终端节点的访问。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:endpoint-tag/Env": [ "Desktop" ] } } } ] }

根据在标签值为“Desktop”且标签键为“Env”时限制访问的 IAM 策略,以下命令成功或失败。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I" A client error (AccessDeniedException) occurred when calling the DeleteEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms modify-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I" A client error (AccessDeniedException) occurred when calling the ModifyEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I

以下策略限制对标签值为“Desktop”且标签键为“Env”的复制任务的访问。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:task-tag/Env": [ "Desktop" ] } } } ] }

根据在标签值为“Desktop”且标签键为“Env”时限制访问的 IAM 策略,以下命令成功或失败。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-replication-task --replication-task-arn "arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3" A client error (AccessDeniedException) occurred when calling the DeleteReplicationTask operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationTask on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3

设置加密密钥和指定 AWS KMS 权限

AWS DMS 加密复制实例使用的存储以及终端节点连接信息。要加密复制实例使用的存储,AWS DMS使用AWS Key Management Service(AWS KMS) 你唯一的密钥AWSaccount. 您可以使用 AWS KMS 查看和管理此密钥。您可以使用您账户 (aws/dms) 中的默认 KMS 密钥,也可以创建自定义 KMS 密钥。如果您有现有的 KMS 密钥,也可以使用该密钥加密。

注意

用作加密密钥的任何自定义或现有 AWS KMS 密钥都必须是对称密钥。AWS DMS 不支持使用非对称加密密钥。有关对称和非对称加密密钥的详细信息,请参阅https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html中的AWS Key Management Service开发人员指南.

默认 KMS 密钥 (aws/dms如果未从中选择自定义 KMS 密钥,将在首次启动复制实例时创建)。Advanced的 部分创建复制实例页. 如果您使用默认的 KMS 密钥,您只需要将 kms:ListAliaseskms:DescribeKey 权限授予用于迁移的 IAM 用户账户。有关使用默认 KMS 密钥的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

要使用自定义 KMS 密钥,请使用以下选项之一为自定义 KMS 密钥分配权限:

  • 以 AWS KMS 自定义密钥的密钥管理员或密钥用户的身份添加用于迁移的 IAM 用户账户。这样做可确保将必需的 AWS KMS 权限授予 IAM 用户账户。除了向 IAM 用户账户授予使用 AWS DMS 的 IAM 权限之外,还需执行此操作。有关向密钥用户授予权限的更多信息,请参阅允许密钥用户使用 KMS 密钥中的AWS Key Management Service开发人员指南 的第一个版本。

  • 如果您不希望添加 IAM 用户账户作为自定义 KMS 密钥的密钥管理员或密钥用户,则除了必须向 IAM 用户账户授予使用 AWS DMS 的 IAM 权限以外,还需授予以下附加权限。

    { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey", "kms:CreateGrant", "kms:Encrypt", "kms:ReEncrypt*" ], "Resource": "*" },

AWS DMS 也适用于 KMS 密钥别名。有关创建您自己的更多信息AWS KMS密钥以及授予用户对 KMS 密钥的访问权限,请参阅AWS KMS开发人员指南.

如果未指定 KMS 密钥标识符,则AWS DMS使用默认加密密密钥。AWS KMS创建的默认加密密密钥AWS DMS为您的AWSaccount. 您的AWS每个账户都有一个不同的默认加密密密钥AWS区域。

要管理用于加密 AWS DMS 资源的 AWS KMS 密钥,您可以使用 AWS Key Management Service。AWS KMS 将安全、高度可用的硬件和软件结合起来,提供可扩展到云的密钥管理系统。通过使用 AWS KMS,您可创建加密密钥并定义控制这些密钥的使用方式的策略。

您可以找到AWS KMS中的AWS Management Console

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

  2. 要更改 AWS 区域,请使用页面右上角的 Region selector (区域选择器)。

  3. 选择以下选项之一进行使用:AWS KMS键:

    • 要查看您账户中 AWS 为您所创建和管理的密钥,请在导航窗格中选择 AWS managed keys(亚马逊云科技托管式密钥)。

    • 要查看您账户中自己所创建和管理的密钥,请在导航窗格中选择 Customer managed keys (客户托管密钥).

AWS KMS 支持 AWS CloudTrail,因此,您可审核密钥使用情况以验证密钥是否使用得当。您的AWS KMS钥匙可以结合使用AWS DMS并支持AWSAmazon RDS、Amazon S3、Amazon Redshift 和 Amazon EBS 等服务。

您也可以专门创建自定义 AWS KMS 密钥来加密以下 AWS DMS 终端节点的目标数据:

在创建 AWS DMS 资源以及 KMS 密钥后,无法更改这些资源的加密密钥。请确保先确定加密密钥要求,然后再创建 AWS DMS 资源。

AWS Database Migration Service 网络安全

在使用 AWS Database Migration Service 时为网络创建的安全要求取决于配置网络的方式。AWS DMS 网络安全的一般规则如下:

  • 复制实例必须具有对源和目标终端节点的访问权限。复制实例的安全组必须具有网络 ACL 或规则来允许从实例数据库端口上传出到数据库终端节点。

  • 数据库终端节点必须包括网络 ACL 和安全组规则,允许来自复制实例的传入访问。根据配置,您可以使用复制实例的安全组、私有 IP 地址、公有 IP 地址或 NAT 网关的公有地址来实现这一点。

  • 如果您的网络使用 VPN 隧道,则作为 NAT 网关的 Amazon EC2 实例使用的安全组必须具有规则,允许复制实例通过它发送流量。

默认情况下,AWS DMS 复制实例使用的 VPC 安全组具有允许传出到所有端口上的 0.0.0.0/0 的规则。如果您修改此安全组或者使用自己的安全组,则必须至少允许传出到相应数据库端口上的源和目标终端节点。

您可用于数据库迁移的网络配置均要求有特定安全注意事项:

  • 一个 VPC 中具有所有数据库迁移组件的配置— 终端节点使用的安全组必须允许从复制实例向数据库端口的传入。确保由复制实例使用的安全组已传入到终端节点,或者您可以在由终端节点使用的安全组中创建规则,允许访问复制实例的私有 IP 地址。

  • 两个 VPC 的配置— 复制实例使用的安全组规则必须具有针对数据库上的 VPC 范围和数据库端口的规则。

  • 使用 AWS Direct Connect 或 VPN 连接到 VPC 的网络的配置— VPN 隧道,允许流量从 VPC 通过隧道流向本地 VPN。在此配置中,VPC 包含路由规则,会将以特定 IP 地址或范围为目标的流量发送到主机,该主机可以桥接从 VPC 到本地 VPN 的流量。如果是这种情况,NAT 主机包括自己的安全组设置,必须允许从复制实例私有 IP 地址或安全组到 NAT 实例的流量。

  • 使用 Internet 连接 VPC 的网络配置— VPC 安全组必须包括路由规则,将并非以 VPC 为目标的流量发送到 Internet 网关。在此配置中,与终端节点的连接显示为来自复制实例上的公有 IP 地址。

  • 使用 ClassicLink 将不在 VPC 中的 RDS 数据库实例迁移到 VPC 中数据库实例的配置— 当源或目标 Amazon RDS 数据库实例不在 VPC 中,并且不与复制实例所在的 VPC 共享安全组时,您可以设置代理服务器并使用 ClassicLink 连接源数据库和目标数据库。

  • 源终端节点位于复制实例使用的 VPC 之外,并使用 NAT 网关— 您可以使用绑定到单个弹性网络接口的单个弹性 IP 地址来配置网络地址转换 (NAT) 网关。之后,该弹性网络接口会收到一个 NAT 标识符 (nat-#####)。如果 VPC 包含到 NAT 网关而不是 Internet 网关的默认路由,复制实例将改为显示使用 Internet 网关的公有 IP 地址连接数据库终端节点。在这种情况下,对 VPC 外部的数据库终端节点的传入需要允许从 NAT 地址的传入,而不是复制实例的公有 IP 地址。

  • 适用于非 RDBMS 引擎的 VPC 终端节点–AWS DMS不支持非 RDBMS 引擎的 VPC 终端节点。

将 SSL 与 AWS Database Migration Service 配合使用

您可以使用安全套接字层 (SSL) 为源和目标终端节点的连接加密。要执行此操作,可以使用 AWS DMS 管理控制台或 AWS DMS API 将证书分配到终端节点。也可以使用 AWS DMS 控制台来管理证书。

并非所有数据库都以相同的方式使用 SSL。Amazon Aurora MySQL 兼容版将服务器名称 (集群中主实例的终端节点) 作为 SSL 的终端节点。Amazon Redshift 终端节点已使用 SSL 连接,并且不需要由 AWS DMS 设置 SSL 连接。Oracle 终端节点需要其他步骤;有关更多信息,请参阅 Oracle 终端节点的 SSL 支持

要将证书分配到某个终端节点,您需要提供对部署到终端节点的服务器 SSL 证书进行签名时使用的根证书或者直至根的中间 CA 证书链 (作为证书捆绑包)。只接受 PEM 格式的 X509 文件的证书。在导入证书时,您收到可用于为终端节点指定证书的 Amazon 资源名称 (ARN)。如果使用 Amazon RDS,则可以下载在中提供的根 CA 和证书捆绑包。rds-combined-ca-bundle.pem由 Amazon RDS 托管的文件。有关下载此文件的更多信息,请参阅。使用 SSL/TLS 加密与数据库实例的连接中的Amazon RDS 用户指南.

您可从多个 SSL 模式中选择用于 SSL 证书验证的模式。

  • — 连接未加密。该选项不安全,但需要的开销较少。

  • require— 使用 SSL (TLS) 加密连接,但不进行任何 CA 验证。该选项更为安全,但需要的开销较多。

  • verify-ca— 连接经过加密。该选项更为安全,但需要的开销较多。该选项将验证服务器证书。

  • verify-full— 连接经过加密。该选项更为安全,但需要的开销较多。该选项验证服务器证书并验证服务器主机名与证书的主机名属性匹配。

并非所有 SSL 模式均适用于所有数据库终端节点。下表显示了各个数据库引擎支持哪些 SSL 模式。

数据库引擎

require

verify-ca

verify-full

MySQL/MariaDB/Amazon Aurora MySQL

默认值 不支持 支持 支持

Microsoft SQL Server

默认值 支持 不支持 支持

PostgreSQL

默认值 支持 支持 支持

Amazon Redshift

默认值 SSL 未启用 SSL 未启用 SSL 未启用

Oracle

默认值 不支持 支持 不支持

SAP ASE

默认值 SSL 未启用 SSL 未启用 支持

MongoDB

默认值 支持 不支持 支持

Db2 LUW

默认值 不支持 支持 不支持
注意

DMS 控制台或 API 上的 SSL 模式选项不适用于某些数据流和 NoSQL 服务,如 Kinesis 和 DynamoDB。默认情况下它们是安全的,因此 DMS 显示 SSL 模式设置等于 none(SSL 模式 = 无)。您无需为终端节点提供任何其他配置即可使用 SSL。例如,当使用 Kinesis 作为目标终端节点时,默认情况下它是安全的。对 Kinesis 的所有 API 调用都使用 SSL,因此无需在 DMS 终端节点中添加额外的 SSL 选项。您可以使用 HTTPS 协议安全地通过 SSL 端点放置数据和检索数据,DMS 在连接到 Kinesis 数据流时默认使用该协议。

将 SSL 与 AWS DMS 配合使用的限制

以下是将 SSL 与 AWS DMS 配合使用的限制:

  • 不支持与 Amazon Redshift 目标终端节点的 SSL 连接。AWS DMS使用 Amazon S3 存储桶将数据传输到 Amazon Redshift 数据库。此传输默认情况下由 Amazon Redshift 加密。

  • 使用启用了 SSL 的 Oracle 终端节点执行更改数据捕获 (CDC) 任务时,可能会出现 SQL 超时。如果您遇到 CDC 计数器未体现预期数字的问题,请在任务设置的 ChangeProcessingTuning 部分将 MinimumTransactionSize 参数设置为较低的值。您可以从最低值 100 开始。有关 MinimumTransactionSize 参数的更多信息,请参阅更改处理优化设置

  • 您只能以 .pem 和 .sso (Oracle wallet) 格式导入证书。

  • 在某些情况下,您的服务器 SSL 证书可能由中间证书颁发机构 (CA) 签名。此种情况下,请确保从中间 CA 到根 CA 的整个证书链作为单个 .pem 文件导入。

  • 如果在服务器上使用自签名证书,请选择 require 以作为 SSL 模式。require SSL 模式隐式信任服务器的 SSL 证书,而不会尝试验证证书是否由 CA 签名。

管理证书

您可以使用 DMS 控制台来查看和管理 SSL 证书。您也可以使用 DMS 控制台导入证书。


                     AWS Database Migration ServiceSSL 证书管理

为 MySQL 兼容、PostgreSQL 或 SQL Server 终端节点启用 SSL

您可以添加指向新创建终端节点或现有终端节点的 SSL 连接。

使用 SSL 创建 AWS DMS 终端节点

  1. 登录到AWS Management Console打开AWS DMS控制台https://console.aws.amazon.com/dms/v2/.

    如果您以AWS Identity and Access Management(IAM) 用户,请确保您拥有适当的访问权限。AWS DMS. 有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

  2. 在导航窗格中,选择证书

  3. 选择导入证书

  4. 将要用于加密连接的证书上传到终端节点。

    注意

    在创建或修改终端节点时,您也可以在 AWS DMS 控制台的创建数据库终端节点页上选择添加新的 CA 证书以上传证书。

    对于作为目标的 Aurora 无服务器,请获取中提到的证书将 TLS/SSL 与 Aurora Inverless 一起使用.

  5. 第 2 步:指定源和目标终端节点中所述创建终端节点

修改现有 AWS DMS 终端节点以使用 SSL

  1. 登录到AWS Management Console打开AWS DMS控制台https://console.aws.amazon.com/dms/v2/.

    如果您以 IAM 用户身份登录,请确保具有适当的访问权限。AWS DMS. 有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

  2. 在导航窗格中,选择证书

  3. 选择导入证书

  4. 将要用于加密连接的证书上传到终端节点。

    注意

    在创建或修改终端节点时,您也可以在 AWS DMS 控制台的创建数据库终端节点页上选择添加新的 CA 证书以上传证书。

  5. 在导航窗格中选择终端节点,选择要修改的终端节点,然后选择修改

  6. SSL mode (SSL 模式) 选择一个值。

    如果选择 verify-caverify-full 模式,则需指定要用于 CA certificate (CA 证书) 的证书,如下所示。

    
                             AWS Database Migration ServiceSSL 证书管理

  7. 选择修改

  8. 在修改终端节点后,选择终端节点,然后选择Test connection (测试连接) 以确定 SSL 连接是否正常工作。

创建源和目标终端节点之后,创建使用这些终端节点的任务。有关创建任务的更多信息,请参阅第 3 步:创建任务并迁移数据

更改数据库密码

在大多数情况下,更改源或目标终端节点的数据库密码非常直接。如果您需要更改当前在迁移或复制任务中使用的终端节点的数据库密码,过程会略微复杂。以下过程演示了如何完成此操作。

更改迁移或复制任务中的终端节点的数据库密码

  1. 登录到AWS Management Console打开AWS DMS控制台https://console.aws.amazon.com/dms/v2/.

    如果您以 IAM 用户身份登录,请确保具有适当的访问权限。AWS DMS. 有关所需权限的更多信息,请参阅使用 AWS DMS 所需的 IAM 权限

  2. 在导航窗格中,选择任务

  3. 选择使用要更改数据库密码的终端节点的任务,然后选择停止

  4. 任务停止时,您可以使用数据库中的本机工具来更改终端节点的数据库密码。

  5. 返回到 DMS 管理控制台,然后从导航窗格中选择终端节点

  6. 选择已更改密码的数据库的终端节点,然后选择修改

  7. 密码框中键入新密码,然后选择修改

  8. 从导航窗格中选择任务

  9. 选择以前停止的任务,然后选择启动/恢复

  10. 根据您希望如何继续执行该任务,选择启动恢复,然后选择启动任务