How to inject secrets to ecs task definitions using aws-cdk

Viewed 883

I'm trying to add secrets to a task definition but can't find a way to specify which key to use from the key/value in the secret.

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 returns a SecretValue which isn't what I need. I've also tried using from_secret_manager with filed='DBUSER' but that gives me an error like this

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
1 Answers

If the secret is in the same account/region, you should be able to do:

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() expects an ISecret and a field.

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

Related