【问题标题】:How to inject secrets to ecs task definitions using aws-cdk如何使用 aws-cdk 向 ecs 任务定义注入秘密
【发布时间】:2021-06-29 16:41:51
【问题描述】:

我正在尝试将机密添加到任务定义中,但找不到从机密中的键/值中指定要使用哪个键的方法。

secrets = {
    "DBUSER": ecs.Secret.from_secrets_manager(
        sm.Secret.from_secret_complete_arn(
            self, 'secret-dbuser',
            'arn:aws:secretsmanager:eu-west-1:accountid:secret:secret-name').secret_value_from_json('DBUSER')
        )
}

container: ecs.ContainerDefinition = task_definition.add_container(
    "reports",
    image=ecs.RepositoryImage.from_ecr_repository(
        ecr.Repository.from_repository_name(self, "container", "container"), tag=image_tag,
    ),
    memory_limit_mib=2048, logging=ecs.LogDriver.aws_logs(stream_prefix="container-"),
    secrets=secrets
)

secret_value_from_json 返回一个 SecretValue,这不是我需要的。 我也尝试过使用 from_secret_manager 和 filed='DBUSER' 但这给了我这样的错误

Invalid request provided: Create TaskDefinition: The Systems Manager parameter name specifie
d for secret DBUSER is invalid. The parameter name can be up to 2048 characters and include the following letters and symbols: a
-zA-Z0-9_.-, (Service: AmazonECS; Status Code: 400; Error Code: ClientException; Request ID

【问题讨论】:

  • 问:这里有什么帮助吗? Specifying sensitive data using Secrets Manager
  • @paulsm4 也许可以,但这是在 cloudformation 中的方法 - 我正在寻找使用 cdk 的方法,如果我使用它抱怨的 secret:secret-name:key 格式secretCompleteArn 似乎并不完整;缺少 6 个字符的后缀
  • 那么为什么不提供完整的arn呢?您为什么跳过 Secrets Manager ARN 中的这 6 个随机字符?

标签: amazon-cloudformation aws-cdk


【解决方案1】:

如果密钥在同一个帐户/区域中,您应该可以这样做:

secrets = {
    "DBUSER": ecs.Secret.from_secrets_manager(
        # import the secret by its name
        sm.Secret.from_secret_name_v2(self, 'secret-dbuser', '<secret-name-here>'),
        # specify the specific field
        'DBUSER'
    )
}

container: ecs.ContainerDefinition = task_definition.add_container(
    "reports",
    image=ecs.RepositoryImage.from_ecr_repository(
        ecr.Repository.from_repository_name(self, "container", "container"), tag=image_tag,
    ),
    memory_limit_mib=2048, logging=ecs.LogDriver.aws_logs(stream_prefix="container-"),
    secrets=secrets
)

ecs.Secret.from_secrets_manager() 需要 ISecret 和 field。

另见https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_ecs/Secret.html#aws_cdk.aws_ecs.Secret.from_secrets_manager

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 2016-05-04
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多