公司动态

  • Home
  • 配置 AWS DMS 端点以访问 AWS Secrets Manager 中的跨账户秘密 数据库博客

配置 AWS DMS 端点以访问 AWS Secrets Manager 中的跨账户秘密 数据库博客

2026-01-27 15:02:00 6

配置 AWS DMS 端点以访问跨账户的 AWS Secrets Manager 秘密

关键要点

本文引导您如何配置 AWS 数据库迁移服务DMS端点,从跨账户的 AWS Secrets Manager 中获取数据库凭证。本文适用于在 AWS 云中迁移数据库,涉及到涉及跨账户的 AWS DMS 复制实例和端点。详细步骤包括在两个 AWS 账户中创建 KMS 密钥、Secrets Manager 秘密和 IAM 角色,以便安全访问和管理数据库凭证。

AWS 数据库迁移服务AWS DMS与 AWS Secrets Manager 集成,以便存储数据库凭证。这种集成使您可以存储、轮换和检索用于 AWS DMS 端点的凭证。

作为安全最佳实践,客户使用此集成增强安全控制,并且有时维护一个中央账户或相关业务账户,以容纳在相关账户中创建的所有数据库秘密。当将数据库迁移到 AWS 云或使用 Amazon 关系数据库服务Amazon RDS通过 AWS DMS 进行跨账户数据库或数据湖迁移时,您可能会遇到 AWS DMS 复制实例、任务和端点位于迁移账户中,而数据库秘密存储在一个安全账户中的场景。

在此文章中,我们将提供如何配置您的 AWS DMS 端点并运行迁移任务的指导,以便从跨账户 Secrets Manager 中获取存储的秘密。如果您想使用 AWS CloudFormation 测试类似的解决方案,请参考 通过 AWS Secrets Manager 集成创建到受信任的第三方账户的 AWS DMS 端点。

解决方案概述

我们利用跨账户的 AWS 身份与访问管理AWS IAM角色和策略,使存在于一个账户的 AWS DMS 实例能够安全连接到另一个账户,在该账户中存储 Amazon RDS 数据库秘密和 AWS 密钥管理服务AWS KMS密钥。

飞鱼网络梯子

在此示例中,我们提到两个 AWS 账户,A 和 B。账户 A 包含一个 RDS 数据库实例、KMS 密钥和一个 Secrets Manager 中存储主机名、端口、用户名和密码的秘密。账户 B 包含 AWS DMS 复制实例和端点。

配置 AWS DMS 端点以访问 AWS Secrets Manager 中的跨账户秘密 数据库博客

以下图示说明了解决方案架构。

前提条件

如果您打算按照以下指导进行操作,请确认您具备以下前提条件:

一个作为端点的 Amazon RDS 实例。一个为跨账户 Amazon 虚拟私有云Amazon VPC通信配置的网络。在此示例中,我们已为跨账户通信预配置了 VPC 对等连接。一个 跨账户安全组,允许 AWS DMS 复制实例访问 RDS 实例。一个包含 AWS DMS 资源的账户中的 VPC 端点,用于访问 Secrets Manager。

以下配置步骤提供了如何配置资源以设置此模式的指导。

配置账户 A

要配置账户 A,请完成以下步骤:

创建 KMS 密钥,用于加密秘密如果尚不存在。密钥的 ARN 为 arnawskmsltRegiongtltAccountID Agtkey/xxxxxx。使用 KMS 密钥创建一个 Secrets Manager 秘密。对此文章,我们命名秘密为 secretname。新秘密的 ARN 为 arnawssecretsmanagerltRegiongtltAccountID Agtsecretsecretname。

如果您在账户 B 中已创建名为 DMSCrossAccountSecretAccessRole 的 AWS DMS 角色以获取跨账户秘密,则请继续以下步骤。否则,首先按照下节中的步骤创建 DMSCrossAccountSecretAccessRole 角色,然后返回此部分的步骤 3。

分配资源权限给秘密:

json { Version 20121017 Statement [{ Effect Allow Principal { AWS arnawsiamltAccountID Bgtrole/DMSCrossAccountSecretAccessRole } Action [secretsmanagerGetSecretValue secretsmanagerDescribeSecret] Resource arnawssecretsmanagerltRegiongtltAccountID Agtsecretsecretname }] }

添加以下部分到现有 KMS 密钥策略中:

json { Effect Allow Principal { AWS arnawsiamltAccountID Bgtrole/DMSCrossAccountSecretAccessRole } Action kmsDecrypt Resource arnawskmsltRegiongtltAccountID Agtkey/xxxxxx Condition { StringEquals { kmsViaService secretsmanagerltRegiongtamazonawscom } StringLike { kmsEncryptionContextSecretARN arnawssecretsmanagerltRegiongtltAccountID Agtsecretsecretname } } }

下一步,我们进入账户 B。

配置账户 B

完成以下步骤以配置账户 B:

创建 IAM 服务角色,名称为 DMSCrossAccountSecretAccessRole,使 AWS DMS 能够访问跨账户秘密,使用以下信任策略:

json { Version 20121017 Statement [ { Sid Effect Allow Principal { Service dmsltRegiongtamazonawscom } Action stsAssumeRole } ] }

创建 IAM 策略,名称为 DMSCrossAccountSecretAccess,使 AWS DMS 可以从 Secrets Manager 访问跨账户秘密:

json { Version 20121017 Statement [ { Action [ secretsmanagerGetSecretValue ] Resource arnawssecretsmanagerltRegiongtltAccountID Agtsecretsecretname Effect Allow } { Action [kmsDecrypt kmsDescribeKey] Resource arnawskmsltRegiongtltAccountID Agtkey/xxxxxx Effect Allow } ] }

将策略 DMSCrossAccountSecretAccess 指派给角色 DMSCrossAccountSecretAccessRole。如果尚未完成上述步骤,请返回到 来自账户 A 的配置 部分的步骤 3。

在账户 B 中创建 AWS DMS 端点

创建一个 AWS DMS 端点,使用 Secrets Manager 配置:

对于秘密 ID,提供来自账户 A 的完整秘密 ARN。对于 IAM 角色,提供 IAM 角色 DMSCrossAccountSecretAccessRole 的 ARN。

测试 AWS DMS 端点

创建 DMS 复制实例,并在 AWS DMS 控制台中 测试 该端点,以确保建立了连接,并且 AWS DMS 可以获取数据库的秘密。

端点设置,显示使用 IAM 角色和秘密的配置

端点连接成功测试。

清理

在您测试并将数据库切换到目标之后,删除您创建的 AWS DMS 复制实例和端点资源,以避免迁移后产生额外费用。

总结

在这篇文章中,您学习了如何在迁移账户中集中管理 AWS DMS 复制实例,并从另一个安全账户中获取存储在 Secrets Manager 中的数据库凭证。

如果您有任何问题或请求,请在评论中与我们联系。祝您迁移顺利!

作者简介

ShivamGulati 是亚马逊网络服务的高级数据架构师。他与客户合作,设计和构建在 AWS 云中具备高可用性和可扩展性的数据库和数据分析解决方案。工作之余,他喜欢旅行、摄影,并与朋友和家人探索新地方。

SushantDeshmukh 是 AWS 专业服务的数据库顾问。他提供在 AWS 上运行数据库的技术设计和实施专业知识,并帮助客户迁移和现代化他们的数据库。工作之外,他喜欢探索新地方、尝试美食,并与家人和朋友共度时光。

发表评论