【发布时间】:2020-07-25 21:17:20
【问题描述】:
我正在使用 Amazon CloudFormation 来描述我在 AWS 云中所需的基础设施。在 Amazon Secrets Manager 中,我创建了几个变量,它们代表 S3 的凭证以及集群中的数据库访问。这些秘密被注入到 TaskDefinition 中,如下所示:
Resources: {...}
TaskDefinition: {...}
Properties:
ContainerDefinitions:
- Name: !Ref ServiceName
Image: {...}
Environment:
-
Name: AWS_S3_SECRET_KEY
Value:
Fn::Join:
- ''
- - '{{resolve:secretsmanager:'
- Fn::ImportValue: !Ref S3CredentialsId
- ':SecretString:aws_s3_secret}}'
这种方法的问题是,TaskDefinition 不会自动获取对 Amazon Secrets Manager 的任何更改,因此不会更新 TaskDefinition 的修订版 -> 所有最近启动的容器仍在引用密钥的旧值。这就是为什么如果我更新例如的值aws_s3_secret 那么此更改将不会传播到我的 Fargate 集群中所有现有的和新创建的容器。
到目前为止,我已经通过“脏”方法实现了这种传播 - 通过向 TaskDefinition 添加一些不存在的环境变量并将此更改应用到集群(我已经上传了服务的更新 CloudFormation 模板)。只有在此操作之后,才会创建 TaskDefinition 的新修订版,其中包含更新的机密值,正如 Fargate 在 TaskDefinition 描述中提到的差异。
因此我的问题是:如何实现将秘密更改自动传播到 TaskDefinition 中?
【问题讨论】:
标签: amazon-cloudformation aws-fargate aws-secrets-manager