AWS 多环境 Secrets Manager arn 密钥

TGH*_*TGH 6 amazon-web-services amazon-ecs aws-secrets-manager

AWS Secrets Manager 会自动向任何生成的密钥名称添加 6 个字符的后缀。由于后缀是生成的,因此在不同环境(即 prod、dev 等)中它会有所不同。

后缀的存在是有充分理由的,但是当密钥略有不同时,通过 arn 跨环境查找秘密的最佳实践是什么。

示例:作为 ECS taskDef.json 的一部分,您可以指定一个 arn 引用,如下所示:

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
    }]
  }]
}
Run Code Online (Sandbox Code Playgroud)

知道环境之间的后缀AbCdEf有所不同,那么在 taskDef.json 中为每个环境动态指定后缀的最佳方法是什么?

到目前为止,我正在考虑一个自定义环境变量,可以与字符串插值一起使用来构建它,如下所示:"arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-${code}"。

但是,AWS 是否提供了更优雅的方式?

The*_*erk 0

我相信,为了获得秘密值,您必须传递完整的 arn。对于任务定义来说也是如此,因为它在调度任务并将秘密传递给容器时使用相同的 API 。因此,您必须使用list-secrets api 来获取该值。这可以使用任何 sdk 来完成,并且取决于您如何构建此任务定义。如果使用cloudformation,则可以在创建secret后输出该值。如果您使用 terraform,则可以使用aws_secretsmanager_secret数据源,这使得按名称获取此值变得很简单。