我们如何通过提供 Secret Manager ARN 来使用 Terraform 创建 RDS 的 DMS 端点来获取凭证?我查看了文档,但找不到任何东西。
当前存在开放功能请求,要求 DMS 本机使用密钥管理器连接到您的 RDS 实例。这有一个链接的拉取请求,最初暂时添加了对 PostgreSQL 和 Oracle RDS 实例的支持,但目前尚未审核,因此很难知道该功能何时会发布。 如果您不使用自动秘密轮换(或者可以在轮换后重新运行 Terraform)并且不介意将密码存储在状态文件中,但仍想使用存储在 AWS Secrets Manager 中的秘密,那么您可以让 Terraform 检索在应用时从 Secrets Manager 获取机密,并使用该机密使用用户名和密码组合来配置 DMS 端点。
一个基本的例子看起来像这样:
data "aws_secretsmanager_secret" "example" {
name = "example"
}
data "aws_secretsmanager_secret_version" "example" {
secret_id = data.aws_secretsmanager_secret.example.id
}
resource "aws_dms_endpoint" "example" {
certificate_arn = "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012"
database_name = "test"
endpoint_id = "test-dms-endpoint-tf"
endpoint_type = "source"
engine_name = "aurora"
extra_connection_attributes = ""
kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
password = jsondecode(data.aws_secretsmanager_secret_version.example.secret_string)["password"]
port = 3306
server_name = "test"
ssl_mode = "none"
tags = {
Name = "test"
}
username = "test"
}
引用机密。要使用的代码类似于以下内容:
resource "aws_dms_endpoint" "test" {
database_name = "test"
endpoint_id = "test-dms-endpoint"
endpoint_type = "source"
engine_name = "postgres"
kms_key_arn = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
secrets_manager_access_role_arn = "arn:aws:iam::123456789012:role/role-name-with-path"
secrets_manager_arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:<SecretName-6RandomCharacters>"
tags = {
"Name" = "db-migration-target"
}
}
附带说明,请确保该角色的权限策略允许从 Secrets Manager 读取机密,并且也存在
"iam:PassRole"
的权限。