使用密钥访问 Amazon Database Migration Service 端点 - Amazon 数据库迁移服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用密钥访问 Amazon Database Migration Service 端点

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

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

注意

您不能使用由亚马逊 A RDS urora 管理的主证书。这些凭证不包括建立连接 Amazon DMS 所需的主机或端口信息。而是应创建新用户和密钥。有关创建用户和密钥的信息,请参阅后面的使用创建 Amazon Web Services Management Console 机密和秘密访问角色

有关的更多信息 Amazon Secrets Manager,请参阅什么是 S Amazon ecrets Manager? 在《Amazon Secrets Manager 用户指南》中。

Amazon DMS 支持在支持的源端点和目标端点上对以下本地或 Amazon托管数据库进行密钥身份验证:

  • Amazon DocumentDB

  • IBMDb2 LUW

  • 微软SQL服务器

  • MongoDB

  • 我的 SQL

  • Oracle

  • Postgre SQL

  • Amazon Redshift

  • SAP ASE

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

  • 明文值,以使用 UserNamePasswordServerNamePort 设置对数据库连接进行身份验证。对于同时使用 Oracle 的 Oracle 终端节点ASM,请添加其他明文值,以便ASM使用AsmUserNameAsmPassword、和AsmServerName设置进行身份验证。

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

    • SecretsManagerSecretId— 您在中为终端节点数据库访问创建的密钥的完整 Amazon 资源名称 (ARN) ARN、部分名称或友好名称 Amazon Secrets Manager。

    • SecretsManagerAccessRoleArn— 您在中创建ARN的IAM用于代表您提供对该密钥的 Amazon DMS 访问权限的SecretsManagerSecretId秘密访问角色。

    • SecretsManagerOracleAsmSecretId— 您在中为 Oracle ASM 访问创建的密钥的完整亚马逊资源名称 (ARN) ARN、部分名称或友好名称 Amazon Secrets Manager。

    • SecretsManagerOracleAsmAccessRoleArn— 您在中创建ARN的IAM用于代表您提供对该密钥的 Amazon DMS 访问权限的SecretsManagerOracleAsmSecretId秘密访问角色。

    注意

    您还可以使用单个机密访问角色来提供对SecretsManagerSecretId密钥和密钥的 Amazon DMS SecretsManagerOracleAsmSecretId访问权限。如果您为两个密钥创建此单一秘密访问角色,请确保ARN为SecretsManagerAccessRoleArn和分配该访问角色的相同访问角色SecretsManagerOracleAsmAccessRoleArn。例如,如果两个密钥的私有访问角色都已ARN分配给变量ARN2xsecrets,则可以按如下方式设置这些ARN设置:

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    有关创建这些值的更多信息,请参阅使用创建 Amazon Web Services Management Console 机密和秘密访问角色

为终端节点创建并指定所需的机密和机密访问角色终端节点设置后,请使用这些机密详细信息更新将运行CreateEndpointModifyEndpointAPI请求的用户账户的权限。确保这些账户权限包括对IAM:GetRole秘密访问角色的SecretsManager:DescribeSecret权限和对机密的权限。 Amazon DMS 需要这些权限才能验证访问角色及其密钥。

提供和验证所需的用户权限
  1. 登录 Amazon Web Services Management Console 并打开 Amazon Identity and Access Management 控制台,网址为https://console.amazonaws.cn/iam/

  2. 选择 “用户”,然后选择用于拨打CreateEndpointModifyEndpointAPI呼叫的用户 ID

  3. 从 “权限” 选项卡中选择 {} 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角色DMSAPI拨打电话,请对相应角色重复上述步骤。

  7. 打开终端,使用假设上面使用的角色或用户来验证权限是否正确授予。 Amazon CLI

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

      aws iam get-role --role-name ROLE_NAME

      ROLE_NAME替换为的名称SecretsManagerAccessRole

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

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

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

      用户可以是友好名称,可以是部分名称ARN或完整名称ARN。有关更多信息,请参阅 describe-secret

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

使用创建 Amazon Web Services Management Console 机密和秘密访问角色

您可以使用创建 Amazon Web Services Management Console 用于终端节点身份验证的密钥,并创建允许您代表您 Amazon DMS 访问该密钥的策略和角色。

使用 Amazon DMS 可用于对数据库进行源端点和目标端点连接的身份验证的密钥 Amazon Web Services Management Console
  1. 登录 Amazon Web Services Management Console 并打开 Amazon Secrets Manager 控制台,网址为https://console.amazonaws.cn/secretsmanager/

  2. 选择存储新密钥

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

    注意

    从此刻起,这是唯一需要输入明文凭证才能连接到端点数据库的地方。

  4. 明文字段中:

    • 对于您为其分配身份的机密SecretsManagerSecretId,请输入以下JSON结构。

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

      这是对端点数据库进行身份验证所需的最低JSON成员列表。您可以根据需要将任何其他JSON端点设置添加为全部小写JSON的成员。但是, Amazon 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. 选择 Amazon KMS 加密密钥对密钥进行加密。您可以接受由为您的服务创建的默认加密密钥, Amazon Secrets Manager 也可以选择自己创建的 Amazon KMS 密钥。

  6. 指定引用此密钥的名称和可选的描述。这是您用作 SecretsManagerSecretIdSecretsManagerOracleAsmSecretId 值的友好名称。

  7. 如果要在密钥中启用自动轮换,则需要选择或创建一个 Amazon Lambda 函数,该函数有权轮换密钥的证书,如上所述。但是,在设置自动轮换以使用 Lambda 函数之前,请确保该函数的配置设置将以下四个字符添加到 EXCLUDE_CHARACTERS 环境变量的值中。

    ;.:+{}

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

    注意

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

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

创建秘密访问策略和角色来设置您的SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn,这 Amazon DMSAmazon Secrets Manager 允许访问您的相应密钥
  1. 登录 Amazon Web Services Management Console 并打开 Amazon 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是你的密钥,你可以从其中一个SecretsManagerSecretIdSecretsManagerOracleAsmSecretId适当的时候获取,kms_key_arn也是你用来加密你的秘密的密 Amazon KMS 钥,如下例所示。ARN ARN

    { "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" } ] }
    注意

    如果您使用由创建的默认加密密钥 Amazon Secrets Manager,则无需为指定 Amazon KMS 权限kms_key_arn

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

    如果您的密钥位于不同账户中,那么 SecretsManagerAccessRoleArn 角色需要额外的策略来验证跨账户密钥。对于此类使用案例,请将操作 secretsmanager:DescribeSecret 添加到策略中。有关设置跨账户密钥的更多详细信息,请参阅其他账户中的用户对 S Amazon ecrets Manager 密钥的权限

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

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

  6. 选择 Amazon 服务作为可信实体的类型。

  7. DMS从服务列表中选择可信服务,然后选择下一步:权限

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

    dms.region-name.amazonaws.com

    此处,region-name 是区域的名称,如 us-east-1。因此,该 Amazon DMS 区域的区域服务负责人随之而来。

    dms.us-east-1.amazonaws.com
  9. 编辑完角色的可信实体后,创建具友好名称和描述(可选)的角色。现在,您可以在中按友好名称查找新角色IAM,然后将该角色检索ARN为SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn值,以对您的端点数据库连接进行身份验证。

在专用子网中将密钥管理器与复制实例一起使用
  1. 创建密钥管理器VPC端点并记下该端点DNS的。有关创建凭据管理器VPC端点的更多信息,请参阅 Secr ets Manager 用户指南中的通过VPC端点连接到 S Amazon ecrets Manager。

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

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

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

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