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

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

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

AWS Database Migration Service 中的数据保护

AWS DMS 符合 AWS 责任共担模式,此模式包含适用于数据保护的法规和准则。AWS 负责保护运行所有 AWS 服务的全球基础设施。AWS 保持对此基础设施上托管的数据的控制,包括用于处理客户内容和个人数据的安全配置控制。充当数据控制者或数据处理者的 AWS 客户和 Amazon 合作伙伴网络 (APN) 合作伙伴对他们在 AWS 云中放置的任何个人数据承担责任。

对于数据保护,我们建议您使用 AWS Identity and Access Management (IAM) 保护 AWS 账户凭证和设置委托人。这样做意味着仅向每个用户授予履行其工作职责所需的权限。我们还建议您通过以下方式保护您的数据:

  • 对每个账户使用 Multi-Factor Authentication (MFA)。

  • 使用 SSL/TLS 与 AWS 资源进行通信。

  • 使用 AWS CloudTrail 设置 API 和用户活动日志记录。

  • 使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。

  • 使用高级托管安全服务(例如 Amazon Macie),它有助于发现和保护存储在 Amazon S3 中的个人数据。

我们强烈建议您切勿将敏感标识信息(例如您客户的账号)放入数据库的自由格式字段。从控制台、API、AWS CLI 或 AWS 开发工具包处理作为 AWS DMS 源终端节点使用的 AWS 数据库服务时,此建议尤其适用。您输入到这些数据库服务中的任何数据都可能被选取以包含在诊断日志中。此外,当您向外部服务器提供 URL 时,请勿在 URL 中包含任何类型的凭证来验证您对该服务器的请求。

有关数据保护的更多信息,请参阅 AWS 安全性博客上的 AWS 责任共担模型和 GDPR 博客文章。

数据加密

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

静态加密

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

受众

如何使用 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 管理控制台登录的更多信息,请参阅 IAM 用户指南 中的 IAM 控制台和登录页面

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

要直接登录到 AWS 管理控制台,请使用您的密码和 根用户 电子邮件或 IAM 用户名。您可以使用 根用户 或 IAM 用户访问密钥以编程方式访问 AWS。AWS 提供了开发工具包和命令行工具,可使用您的凭证对您的请求进行加密签名。如果您不使用 AWS 工具,则必须自行对请求签名。使用签名版本 4(用于对入站 API 请求进行验证的协议)完成此操作。有关验证请求的更多信息,请参阅 AWS General Reference 中的签名版本 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 管理控制台中暂时代入 IAM 角色。您可以调用 AWS CLI 或 AWS API 操作或使用自定义 URL 以代入角色。有关使用角色方法的更多信息,请参阅 IAM 用户指南 中的使用 IAM 角色

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

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

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

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

  • AWS 服务访问 –服务角色是服务代表您在您的账户中执行操作而担任的 IAM 角色。在设置一些 AWS 服务环境时,您必须为服务定义要代入的角色。这个服务角色必须包含该服务访问所需的 AWS 资源会用到的所有必要权限。服务角色因服务而异,但只要您满足服务记录在案的要求,许多服务都允许您选择权限。服务角色只在您的账户内提供访问权限,不能用于为访问其他账户中的服务授权。您可以在 IAM 中创建、修改和删除服务角色。例如,您可以创建一个角色,此角色允许 Amazon Redshift 代表您访问 Amazon S3 存储桶,然后将该存储桶中的数据加载到 Amazon Redshift 集群中。有关更多信息,请参阅 IAM 用户指南 中的创建角色以向 AWS 服务委派权限

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

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

使用策略管理访问权限

您将创建策略并将其附加到 IAM 身份或 AWS 资源,以便控制 AWS 中的访问。策略是 AWS 中的对象;在与身份或资源相关联时,策略定义它们的权限。在某个实体(根用户、IAM 用户或 IAM 角色)发出请求时,AWS 将评估这些策略。策略中的权限确定是允许还是拒绝请求。大多数策略在 AWS 中存储为 JSON 文档。有关 JSON 策略文档的结构和内容的更多信息,请参阅 IAM 用户指南 中的 JSON 策略概述

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

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

基于身份的策略

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

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

基于资源的策略

基于资源的策略是附加到资源 (如 Amazon S3 存储桶) 的 JSON 策略文档。服务管理员可以使用这些策略来定义指定的委托人(账户成员、用户或角色)可以对该资源以及在什么条件执行哪些操作。基于资源的策略是内联策略。没有基于托管资源的策略。

访问控制列表 (ACL)

访问控制列表 (ACL) 是一种策略类型,用于控制哪些委托人(账户成员、用户或角色)有权访问资源。ACL 类似于基于资源的策略,但它们不使用 JSON 策略文档格式。Amazon S3、AWS WAF 和 Amazon VPC 是支持 ACL 的服务示例。要了解有关 ACL 的更多信息,请参阅Amazon Simple Storage Service 开发人员指南中的访问控制列表 (ACL) 概述

其他策略类型

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

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

  • 服务控制策略 (SCP) – SCP 是 JSON 策略,指定了组织或组织单位 (OU) 在 AWS Organizations 中的最大权限。AWS Organizations 是一项服务,用于分组和集中管理您的企业拥有的多个 AWS 账户。如果在组织内启用了所有功能,则可对任意或全部账户应用服务控制策略 (SCP)。SCP 限制成员账户中实体(包括每个 AWS 账户根用户)的权限。有关 组织 和 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 策略元素参考

操作

基于 IAM 身份的策略的 Action 元素描述该策略将允许或拒绝的特定操作。策略操作通常与关联的 AWS API 操作同名。此策略用于策略中以授予执行关联操作的权限。

AWS DMS 中的策略操作在操作前使用以下前缀:dms:。例如,要授予某人使用 AWS DMS CreateReplicationTask API 操作创建复制任务的权限,您应将 dms:CreateReplicationTask 操作纳入其策略中。策略语句必须包括 ActionNotAction 元素。AWS DMS 定义了自己的一组操作,描述了您可以使用该服务执行的任务。

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

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

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

"Action": "dms:Describe*"

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

资源

Resource 元素指定要向其应用操作的对象。语句必须包含 ResourceNotResource 元素。您可使用 ARN 来指定资源,或使用通配符 (*) 以指明该语句适用于所有资源。

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

  • 证书

  • 终端节点

  • 事件订阅

  • 复制实例

  • 复制子网(安全)组

  • 复制任务

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

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

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

有关 ARN 格式的更多信息,请参阅 Amazon 资源名称 (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 的列表,请参阅 IAM 用户指南 中的 AWS Database Migration Service 定义的资源。要了解您可以使用哪些操作指定每个资源的 ARN,请参阅 AWS Database Migration Service 定义的操作

条件键

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

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

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

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

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

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

示例

要查看 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 目标对象

示例

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

基于 AWS DMS 标签的授权

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

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

适用于 AWS DMS 的 IAM 角色

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

将临时凭证用于 AWS DMS

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

AWS DMS 支持使用临时凭证。

服务相关角色

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

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

服务角色

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

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

在 AWS DMS 中选择一个 IAM 角色

如果使用 AWS CLI 或 AWS DMS API 进行数据库迁移,则首先必须添加特定 IAM 角色到您的 AWS 账户,然后才能使用 AWS DMS 的功能。其中两个角色为 dms-vpc-roledms-cloudwatch-logs-role。如果使用 Amazon Redshift 作为目标数据库,还必须添加 IAM 角色 dms-access-for-endpoint 到您的 AWS 账户。有关更多信息,请参阅 创建 IAM 角色以用于 AWS CLI 和 AWS DMS API

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

默认情况下,IAM 用户和角色没有创建或修改 AWS DMS 资源的权限。它们还无法使用 AWS 管理控制台、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 用户指南 中的 IAM JSON 策略元素:Condition

使用 AWS DMS 控制台

下面的策略为您提供了对 AWS DMS(包括 AWS DMS 控制台)的访问权限,还指定了其他 Amazon 服务(如 Amazon EC2)所需的特定操作的权限。

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

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

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

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

对于需要在终端节点中传入角色 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": "*" }

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

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" }

AWS DMS 控制台创建多个角色,在您使用 AWS DMS 控制台时可自动附加到您的 AWS 账户。如果将 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 存储桶

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

以下示例显示了一个 AmazonDMSRedshiftS3Role 策略版本。它允许 AWS DMS 向 AWS 账户中的 IAM 用户授予访问其中一个 Amazon S3 存储桶的权限。它还允许用户添加、更新和删除对象。

除了授予该用户 s3:PutObjects3:GetObjects3:DeleteObject 权限外,此策略还授予 s3:ListAllMyBucketss3:GetBucketLocations3:ListBucket 权限。这些是控制台所需的其他权限。其他权限允许 AWS DMS 管理存储桶生命周期。此外,需要 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 资源的访问。此示例演示如何创建允许访问所有 AWS DMS 终端节点的策略。但是,仅当终端节点数据库标签 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 用户指南 中的 IAM JSON 策略元素:Condition

AWS KMS 基于资源的策略示例

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

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

以下示例显示了为 AWS KMS 加密密钥创建的密钥策略的 JSON,该加密密钥是为加密 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 外部的数据。他们还可以返回有关客户主密钥 (CMK) 的详细信息,例如,您刚刚创建的密钥。此外,此类用户还可以管理 AWS 资源的附件,例如,目标终端节点。

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

以下示例显示了为 AWS KMS 加密密钥创建的密钥策略的 JSON,该加密密钥是为加密 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 外部的数据。他们还可以返回有关客户主密钥 (CMK) 的详细信息,例如,您刚刚创建的密钥。此外,此类用户还可以管理 AWS 资源的附件,例如,目标终端节点。

排查 AWS Database Migration Service 身份和权限的问题

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

我无权在 AWS DMS 中执行操作

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

mateojackson IAM 用户尝试使用控制台查看有关 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 DMS 和您的 AWS 解决方案的可靠性、可用性和性能的重要方面。您应该从 AWS 解决方案的各个部分收集监控数据,以便您可以更轻松地调试多点故障(如果发生)。AWS 提供了多种工具来监控您的 AWS DMS 任务和资源并对潜在事件做出响应。

AWS DMS 事件和通知

AWS DMS 使用 Amazon Simple Notification Service (Amazon SNS) 在发生 AWS DMS 事件时提供通知,例如,创建或删除复制实例。AWS DMS 将事件分组为各个类别,您可以订阅这些类别以便在发生该类别中的事件时收到通知。例如,如果您订阅了指定复制实例的“创建”类别,则只要发生了与创建相关的事件影响到您的复制实例,您就会收到通知。您可以 AWS 区域的 Amazon SNS 支持的任何形式使用这些通知,如电子邮件、短信或者调用 HTTP 终端节点。有关更多信息,请参阅 在 AWS Database Migration Service 中使用事件和通知

任务状态

您可以查看任务状态和监控任务的控制表,以便监控任务的进度。任务状态指示 AWS DMS 任务及其关联资源的状况。它包含此类指示,如同正在创建、启动、运行或停止任务一样。此外,它还包含任务正在迁移的表的当前状态,例如,表已开始或正在进行完全加载时,并包含表已执行的插入、删除和更新次数等详细信息。有关监控任务和任务资源条件的更多信息,请参阅 任务状态任务期间的表状态。有关控制表的更多信息,请参阅控制表任务设置

Amazon CloudWatch 警报和日志

使用 Amazon CloudWatch 警报,您可以在指定时间段内监控一个或多个任务指标。如果该指标超出指定阈值,则会向 Amazon SNS 主题发送通知。CloudWatch 警报不会因为处于特定状态就调用操作,而是必须在状态已改变并在指定的若干个时间段内保持不变后才调用。AWS DMS 还使用 CloudWatch 在迁移过程中记录任务信息。您可以使用 AWS CLI 或 AWS DMS API 查看有关任务日志的信息。有关将 CloudWatch 与 AWS DMS 配合使用的更多信息,请参阅使用 Amazon CloudWatch 监控复制任务。有关监控 AWS DMS 指标的更多信息,请参阅AWS Database Migration Service 指标。有关使用 AWS DMS 任务日志的更多信息,请参阅 查看和管理 AWS DMS 任务日志

AWS CloudTrail 日志

AWS DMS 与 AWS CloudTrail 集成,后者是一项在 AWS DMS 中提供用户、IAM 角色或 AWS 服务所采取操作的记录的服务。CloudTrail 会将 AWS DMS 的所有 API 调用(包括来自 AWS DMS 控制台的调用和对 AWS DMS API 操作的代码调用)作为事件捕获。如果您创建跟踪,则可以使 CloudTrail 事件持续交付到 Amazon S3 存储桶(包括 AWS DMS 的事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。通过使用 CloudTrail 收集的信息,您可以确定向 AWS DMS 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。有关更多信息,请参阅使用 AWS CloudTrail 记录 AWS DMS API 调用

数据库日志

您可以使用 AWS 数据库服务的 AWS 管理控制台、AWS CLI 或 API 查看、下载和监控任务终端节点的数据库日志。有关更多信息,请参阅 AWS 文档中的数据库服务文档。

AWS Database Migration Service 的合规性验证

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

  • SOC

  • PCI

  • ISO

  • FedRAMP

  • DoD CC SRG

  • HIPAA BAA

  • MTCS

  • CS

  • K-ISMS

  • ENS High

  • OSPAR

  • HITRUST CSF

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

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

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

AWS Database Migration Service 中的恢复功能

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

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

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

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

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

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

作为一项托管服务,AWS Database Migration Service 由 Amazon Web Services:安全流程概览白皮书中所述的 AWS 全球网络安全程序提供保护。

您可以使用 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 所需的 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": "*" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" } ] }

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

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

{ "Effect": "Allow", "Action": "dms:*", "Resource": "*" }

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

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

对于需要在终端节点中传入 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": "*" }

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

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }

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

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" }

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

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

如果使用 AWS CLI 或 AWS DMS API 进行数据库迁移,则首先必须添加三个 IAM 角色到您的 AWS 账户,然后才能使用 AWS DMS 的功能。其中两个角色为 dms-vpc-roledms-cloudwatch-logs-role。如果使用 Amazon Redshift 作为目标数据库,还必须添加 IAM 角色 dms-access-for-endpoint 到您的 AWS 账户。

对托管策略的更新是自动的。如果您为 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": "*", "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-access-for-endpoint 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 分配策略。

以下策略拒绝访问具有 ARN arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV 的 AWS DMS 复制实例:

{ "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 资源的更多信息,请参阅在 AWS Database Migration Service 中标记资源

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

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

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

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

  • 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 账户唯一的 AWS Key Management Service (AWS KMS) 密钥。您可以使用 AWS KMS 查看和管理此密钥。您可以使用您账户 (aws/dms) 中的默认 AWS KMS 密钥,也可以创建自定义 AWS KMS 密钥。如果您有现有的 AWS KMS 密钥,也可以使用该密钥加密。

注意

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

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

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

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

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

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

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

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

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

您可以在以下 AWS 管理控制台 中查找 AWS KMS

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

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

  3. 选择以下选项之一以使用 AWS KMS 密钥:

    • 要查看您账户中 AWS 为您创建和管理的密钥,请在导航窗格中,选择 AWS managed keys (AWS 托管密钥)

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

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

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

在创建 AWS DMS 资源以及 AWS 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 中的 Amazon RDS 数据库实例迁移到 VPC 中数据库实例的配置 — 当源或目标 Amazon RDS 数据库实例不在 VPC 中,并且不与复制实例所在的 VPC 共享安全组时,您可以设置代理服务器并使用 ClassicLink 连接源数据库和目标数据库。

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

将 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,可以下载由 Amazon RDS 托管的 rds-combined-ca-bundle.pem 文件中提供的根 CA 和证书捆绑包。有关下载此文件的更多信息,请参阅 Amazon RDS 用户指南 中的使用 SSL/TLS 加密到数据库实例的连接

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

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

  • 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

默认值 不支持 支持 不支持

将 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 Service SSL 证书管理

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

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

使用 SSL 创建 AWS DMS 终端节点

  1. 登录到 AWS 管理控制台,然后选择 AWS Database Migration Service。

    注意

    如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

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

  3. 选择导入证书

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

    注意

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

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

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

  1. 登录到 AWS 管理控制台,然后选择 AWS Database Migration Service。

    注意

    如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

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

  3. 选择导入证书

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

    注意

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

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

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

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

    
                            AWS Database Migration Service SSL 证书管理
  7. 选择 Modify

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

创建源和目标终端节点之后,创建使用这些终端节点的任务。有关创建任务的更多信息,请参阅步骤 4:创建任务

Oracle 终端节点的 SSL 支持

AWS DMS Oracle 终端节点支持 SSL V3 用于 noneverify-ca SSL 模式。要将 SSL 用于 Oracle 终端节点,请上传终端节点的 Oracle wallet 而不是 .pem 证书文件。

为 Oracle SSL 使用现有证书

要使用现有的 Oracle 客户端安装,从 CA 证书文件创建 Oracle wallet 文件,请执行以下步骤。

在 AWS DMS 中为 Oracle SSL 使用现有 Oracle 客户端安装

  1. 通过运行以下命令将 ORACLE_HOME 系统变量设置为 dbhome_1 目录的位置。

    prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1
  2. $ORACLE_HOME/lib 附加到 LD_LIBRARY_PATH 系统变量。

    prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  3. $ORACLE_HOME/ssl_wallet 处的 Oracle wallet 创建一个目录。

    prompt>mkdir $ORACLE_HOME/ssl_wallet
  4. 将 CA 证书 .pem 文件放入 ssl_wallet 目录中。如果使用 Amazon RDS,则可以下载由 Amazon RDS 托管的 rds-ca-2015-root.pem 根 CA 证书文件。有关下载此文件的更多信息,请参阅 Amazon RDS 用户指南 中的使用 SSL/TLS 加密到数据库实例的连接

  5. 运行下列命令以创建 Oracle wallet。

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ca-cert.pem -auto_login_only

完成前面的步骤之后,您可以通过指定 certificate-wallet 参数,使用 ImportCertificate API 调用来导入 wallet 文件。然后,在创建或修改 Oracle 终端节点时,如果选择 verify-ca 作为 SSL 模式,您可以使用导入的 wallet 证书。

注意

Oracle wallet 是二进制文件。AWS DMS 按原样接受这些文件。

使用适用于 Oracle SSL 的自签名证书

要使用适用于 Oracle SSL 的自签名证书,请执行以下操作。

在 AWS DMS 中使用适用于 Oracle SSL 的自签名证书

  1. 创建一个您将用于处理自签名证书的目录。

    mkdir SELF_SIGNED_CERT_DIRECTORY
  2. 转到您在上一步创建的目录中。

    cd SELF_SIGNED_CERT_DIRECTORY
  3. 创建根密钥。

    openssl genrsa -out self-rootCA.key 2048
  4. 使用在上一步中创建的根密钥对根证书进行自签名。

    openssl req -x509 -new -nodes -key self-rootCA.key -sha256 -days 1024 -out self-rootCA.pem
  5. 为 Oracle 数据库创建 Oracle wallet 目录。

    mkdir $ORACLE_HOME/self_signed_ssl_wallet
  6. 创建新的 Oracle wallet。

    orapki wallet create -wallet $ORACLE_HOME/self_signed_ssl_wallet -pwd password -auto_login_local
  7. 将根证书添加到 Oracle wallet。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -trusted_cert -cert self-rootCA.pem -pwd password
  8. 列出 Oracle wallet 的内容。该列表应包含根证书。

    orapki wallet display -wallet $ORACLE_HOME/self_signed_ssl_wallet
  9. 使用 ORAPKI 实用程序生成证书签名请求 (CSR)。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -dn "CN=dms" -keysize 2048 -sign_alg sha256 -pwd password
  10. 运行以下命令。

    openssl pkcs12 -in $ORACLE_HOME/self_signed_ssl_wallet/ewallet.p12 -nodes -out nonoracle_wallet.pem
  11. 将“dms”用作公用名。

    openssl req -new -key nonoracle_wallet.pem -out self-signed-oracle.csr
  12. 获取证书签名。

    openssl req -noout -text -in self-signed-oracle.csr | grep -i signature
  13. 如果步骤 12 的输出是 sha1WithRSAEncryption 或 sha256WithRSAEncryption,则运行以下代码。

    openssl x509 -req -in self-signed-oracle.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out self-signed-oracle.crt -days 365 -sha256
  14. 如果步骤 12 的输出为 md5WithRSAEncryption,则运行以下代码。

    openssl x509 -req -in self-signed-oracle.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out self-signed-oracle.crt -days 365 -sha256
  15. 将证书添加到 wallet。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -user_cert -cert self-signed-oracle.crt -pwd password
  16. 配置 sqlnet.ora 文件 ($ORACLE_HOME/network/admin/sqlnet.ora)。

    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = ORACLE_HOME/self_signed_ssl_wallet) ) ) SQLNET.AUTHENTICATION_SERVICES = (NONE) SSL_VERSION = 1.0 SSL_CLIENT_AUTHENTICATION = FALSE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
  17. 停止 Oracle 侦听器。

    lsnrctl stop
  18. listener.ora 文件 ($ORACLE_HOME/network/admin/listener.ora) 中添加 SSL 条目。

    SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = ORACLE_HOME/self_signed_ssl_wallet) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = SID) (ORACLE_HOME = ORACLE_HOME) (SID_NAME = SID) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
  19. 配置 tnsnames.ora 文件 ($ORACLE_HOME/network/admin/tnsnames.ora)。

    <SID>= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) ) <SID>_ssl= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) )
  20. 重新启动 Oracle 侦听器。

    lsnrctl start
  21. 显示 Oracle 侦听器状态。

    lsnrctl status
  22. 使用 sqlplus 和 SSL tnsnames 条目测试从本地主机到数据库的 SSL 连接。

    sqlplus -L ORACLE_USER@SID_ssl
  23. 验证您已使用 SSL 成功连接。

    SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') -------------------------------------------------------------------------------- tcps
  24. 将目录更改为具有自签名证书的目录。

    cd SELF_SIGNED_CERT_DIRECTORY
  25. 创建 AWS DMS 将使用的新客户端 Oracle wallet。

    orapki wallet create -wallet ./ -auto_login_only
  26. 将自签名根证书添加到 Oracle wallet。

    orapki wallet add -wallet ./ -trusted_cert -cert rootCA.pem -auto_login_only
  27. 列出 AWS DMS 将使用的 Oracle wallet 的内容。该列表应包含自签名根证书。

    orapki wallet display -wallet ./
  28. 将您刚刚创建的 Oracle wallet 上传到 AWS DMS。

更改数据库密码

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

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

  1. 登录到 AWS 管理控制台,然后选择 AWS DMS。如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关所需权限的更多信息,请参阅使用 AWS DMS 所需的 IAM 权限

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

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

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

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

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

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

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

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

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