View a markdown version of this page

使用机密进行访问 Amazon Database Migration Service 端点 - Amazon Database Migration Service
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,并将其包含在端点设置中。

注意

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

有关更多信息 Amazon Secrets Manager,请参阅什么是 Amazon 密钥管理器?在《Amazon Secrets Manager 用户指南》中

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

  • Amazon DocumentDB

  • IBM Db2 LUW

  • Microsoft SQL Server

  • MongoDB

  • MySQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

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

  • Clear-text 使用UserName、、PasswordPort设置对数据库连接进行身份验证的值。ServerName对于同时使用 Oracle ASM 的 Oracle 端点,还包括其他明文值,以使用 AsmUserNameAsmPasswordAsmServerName 设置对 ASM 进行身份验证。

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

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

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

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

    • SecretsManagerOracleAsmAccessRoleArn – 您在 IAM 中为方便 Amazon DMS 代表您访问 SecretsManagerOracleAsmSecretId 密钥而创建的秘密访问角色的 ARN。

    注意

    您也可以使用单个秘密访问角色来提供对SecretsManagerSecretId密钥和密钥的 Amazon DMS SecretsManagerOracleAsmSecretId访问权限。如果您为这两个密钥创建单个秘密访问角色,请确保将此访问角色的相同 ARN 分配给 SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn。例如,如果两个密钥的秘密访问角色的 ARN 分配给了变量 ARN2xsecrets,则可按如下方式设置 ARN:

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    有关创建这些值的更多信息,请参阅使用 Amazon Web Services 管理控制台 创建秘密和秘密访问角色

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

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

  2. 选择用户,然后选择用于发出 CreateEndpointModifyEndpoint API 调用的用户 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 角色发出 DMS API 调用,请对相应的角色重复上述步骤。

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

    1. SecretAccessRole 使用 IAM get-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 管理控制台 创建秘密和秘密访问角色

您可以使用为端点身份验证创建密钥,并创建允许代表您 Amazon DMS 访问密钥的策略和角色。 Amazon Web Services 管理控制台

要使用创建密钥 Amazon Web Services 管理控制台 that Amazon DMS 可用于对源端点和目标端点连接的数据库进行身份验证
  1. 登录 Amazon Web Services 管理控制台 并打开 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 作为值SecretsManagerSecretIdSecretsManagerOracleAsmSecretId相应的值,以验证对端点数据库连接和 Oracle ASM(如果使用)的访问权限。

创建私有访问策略和角色来设置您的SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn,这允许 Amazon DMS 要访问 Amazon Secrets Manager 访问您的相应密钥
  1. 登录 Amazon Web Services 管理控制台 并打开 Amazon Identity and Access Management (IAM) 控制台,网址为https://console.aws.amazon.com/iam/

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

  3. 选择 JSON 并输入以下策略,以启用对密钥的访问和解密。

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

    此处,secret_arn 是密钥的 ARN,您可以根据需要从 SecretsManagerSecretIdSecretsManagerOracleAsmSecretId 中获取,kms_key_arn 是您用于加密密钥的 Amazon KMS 密钥的 ARN,如以下示例所示。

    JSON
    { "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 添加到策略中。有关设置跨账户密钥的更多详细信息,请参阅不同账户中用户的密钥管理器密钥权限。 Amazon

  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 端点的更多信息,请参阅《Amazon Secrets Manager 用户指南》中的通过 VPC 端点连接到 Secrets Manager

  2. 对于 VPC 端点安全组入口规则,允许来自复制实例的私有 IP 地址或连接到复制实例的安全组的 HTTPS 流量。

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

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

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