簡體   English   中英

AWS Multi Environment Secrets Manager arn 密鑰

[英]AWS Multi Environment Secrets Manager arn keys

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"
    }]
  }]
}

知道只有后綴AbCdEf會因環境而異,在 taskDef.json 中為每個環境動態指定后綴的最佳方法是什么?

到目前為止,我正在考慮一個自定義環境變量,它可以與字符串插值一起使用來構建它,如下所示: "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-${code}"

但是,是否有通過 AWS 提供的更優雅的方式?

get-secret-value secret-id參數可以是密鑰 ARN 或密鑰名稱。 根據您的上下文/界面,按名稱指定秘密可能是一種解決方案。

當您需要使用 ARN(例如包含 AWS 賬戶)時,您可以使用部分 ARN。 盡管最佳實踐是使用完整的 ARN,但在這種情況下,只要避免命名以連字符加 6 個字符結尾的機密,就可以省略生成的后綴; 根據https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-secretsmanager-secret.html

“不要以連字符后跟六個字符結束您的秘密名稱。如果這樣做,您可能會在按部分 ARN 搜索秘密時冒混淆和意外結果的風險。Secrets Manager 會在秘密名稱后自動添加一個連字符和六個隨機字符ARN 的結尾。”

例如,AWS CDK 具有Secret.fromSecretPartialArn ,因此以下內容應該有效:

new ecs.ContainerDefinition(this, 'ContainerDefinition', {
      taskDefinition: new ecs.TaskDefinition(this, 'TaskDefinition', {
        compatibility: ecs.Compatibility.FARGATE
      }),
      image: ecs.ContainerImage.fromAsset('some/path'),
      secrets: {
        SOME_SECRET: ecs.Secret.fromSecretsManager(
          secretsmanager.Secret.fromSecretPartialArn(
            this,
            'Secret',
            'arn:aws:secretsmanager:region:aws_account_id:secret:secret_name')
        )
      }
    })

我相信,為了獲得秘密價值,您必須傳遞完整的信息。 在任務定義的情況下也是如此,因為它在安排任務和將機密傳遞給容器時使用相同的 api。 因此,您必須使用list-secrets api 來獲取該值。 這可以使用任何 sdk 來完成,並且取決於您如何構建此任務定義。 如果您使用 cloudformation,您可以在創建秘密后將值設為 output 如果您使用 terraform,則可以使用aws_secretsmanager_secret數據源,這使得通過名稱獲取此值變得微不足道。

我認為將敏感數據作為來自 SSM 參數存儲的環境變量注入是優雅的。

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
    }]
  }]
}

如果你想處理多個環境,這也很優雅。

首先根據您的 envs /test/passwordstage/passwordprod/password創建機密並存儲在參數存儲中,並在 ECS 任務定義中使用相同的內容。

例如..你也可以使用環境變量。

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:prod/password"
    }]
  }]
}

參考:- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-parameters.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM