You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform aws_secretsmanager_secret数据源批量获取指定前缀AWS密钥ARN

解决方案

完全可以实现,无需重复定义多个数据源块,按以下步骤操作即可:

步骤1:配置批量查询数据源

先通过data "aws_secretsmanager_secrets"批量筛选符合命名前缀的密钥,如果你需要获取每个密钥的更多属性(例如密钥描述、标签等),可以再通过for_each批量调用单密钥数据源。

# 批量拉取符合前缀的密钥基础信息
data "aws_secretsmanager_secrets" "db_creds" {
  filter {
    name   = "name"
    values = ["db-credentials/${var.env-name}/"]
  }
}

# 可选:批量查询每个密钥的详细信息
data "aws_secretsmanager_secret" "db_creds_detail" {
  for_each = toset(data.aws_secretsmanager_secrets.db_creds.names)
  name     = each.value
}

步骤2:在DB Proxy资源的dynamic块中调用

直接遍历批量数据源返回的ARN列表即可生成auth配置,示例如下:

resource "aws_db_proxy" "example" {
  name                   = "your-db-proxy"
  engine_family          = "MYSQL" # 替换为实际使用的数据库引擎
  role_arn               = aws_iam_role.proxy_role.arn
  vpc_subnet_ids         = var.private_subnet_ids
  vpc_security_group_ids = [aws_security_group.proxy_sg.id]

  dynamic "auth" {
    # 直接使用批量数据源返回的ARN列表
    for_each = data.aws_secretsmanager_secrets.db_creds.arns
    content {
      secret_arn                   = auth.value
      client_password_auth_type    = "MYSQL_NATIVE_PASSWORD" # 按需调整认证方式
      iam_auth                     = "DISABLED" # 按需调整是否开启IAM认证
    }
  }
}

如果需要用到密钥的其他属性,可以把for_each改为data.aws_secretsmanager_secret.db_creds_detail.values,通过auth.value.arn获取ARN即可。

注意事项

  • 执行Terraform的身份需要拥有secretsmanager:ListSecrets、secretsmanager:DescribeSecret权限,否则会查询失败
  • 如果存在同名前缀但不符合命名规则的密钥,可以用Terraform的正则匹配函数对返回的列表做二次过滤

内容的提问来源于stack exchange,提问作者JimmyJazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:33:02