aws-cloudformation - 如何自动将 secret 更改传播到 Fargate 任务定义?

标签 aws-cloudformation aws-fargate aws-secrets-manager

我正在使用 Amazon CloudFormation 来描述我在 AWS 云中所需的基础设施。在 Amazon Secrets Manager 中,我创建了几个变量,它们代表 S3 的凭证以及集群中的数据库访问。这些 secret 被注入(inject)到 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 的修订版 -> 所有最近启动的容器仍引用旧的 key 值。这就是为什么如果我更新例如的值aws_s3_secret 则此更改将不会传播到我的 Fargate 集群中的所有现有容器和新创建的容器。

到目前为止,我已经通过“脏”方法实现了这种传播 - 通过向 TaskDefinition 添加一些不存在的环境变量并将此更改应用于集群(我已经上传了服务的更新的 CloudFormation 模板)。仅在此操作之后,才会创建 TaskDefinition 的新修订版,其中包含更新的 secret 值,正如 Fargate 在 TaskDefinition 描述中提到的差异一样。

因此我的问题是:如何实现将 secret 更改自动传播到任务定义中?

最佳答案

这并不能直接回答您的问题,因为据我所知,不可能通过 CloudFormation 强制传播 secret 更改。

话虽如此,您不应该使用 Secrets Manager 来管理用于访问 S3 的 AWS 凭证。相反,请使用任务的 IAM 角色 ( https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-iam-roles.html )。这会将 IAM 角色附加到您的任务定义中,如果您需要承担具有 S3 存储桶权限的不同角色,则可以使用该角色调用 S3 甚至 STS AssumeRole。

如果您需要访问其他 secret ,请查看以下教程:https://docs.aws.amazon.com/AmazonECS/latest/userguide/specifying-sensitive-data-tutorial.html 。通过遵循它,您应该能够在 CloudFormation 容器定义中指定 Secret。以下是使用 Secrets 容器定义指定 secret 的示例。我还没有时间测试它是否有效,但它应该根据the AWS documentation .

Resources: {...}
    TaskDefinition: {...}
        Properties:
            ContainerDefinitions:
                -   Name: !Ref ServiceName
                    Image: {...}
                    Secrets:
                        -
                          Name: AWS_S3_SECRET_KEY
                          ValueFrom: arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K

关于aws-cloudformation - 如何自动将 secret 更改传播到 Fargate 任务定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61185771/

相关文章:

amazon-web-services - AWS Cloudformation [/Resources/PrivateGateway/Properties] 模板中不允许使用 'null' 值

amazon-web-services - 连接fargate的Cloudformation参数

amazon-web-services - Fargate 与 Docker 组合链接

amazon-web-services - 为 AWS EC2 用户数据脚本传递 API key 的最佳方法是什么

aws-cloudformation - SQSPolicy 在堆栈创建期间失败

amazon-web-services - AWS API Gateway - Lambda 代理未通过 CloudFormation 模板打开

aws-amplify - 如何将 AWS secret 管理器与 Amplify 结合使用

amazon-web-services - 使用 CloudFormation(和 Lambda 轮换模板)进行 Aurora Serverless 密码轮换设置

amazon-web-services - 使用 CloudFormation 启动带有附加 EBS 的 AWS 自动缩放组

amazon-web-services - AWS Fargate -CannotPullContainerError (500)?