CDK — настройка контейнера ECS Fargate с секретом из хранилища параметров без создания параметра Cloudformation

Я пытаюсь перенести существующий кластер ECS на CDK, и у меня возникли проблемы с секретами.

В моем исходном определении JSON оно настроено с помощью valueFrom, как показано ниже:

"secrets": [
    {
        "name": "SECRET_ENV_VARIABLE",
        "valueFrom": "arn:aws:ssm:us-east-2:XXXXXXXX:parameter/path/to/parameter"
    }
]

где /path/to/parameter — параметр SecureString, но когда я пытаюсь воспроизвести это в CDK (C#) следующим образом:

var definition = new FargateTaskDefinition(this, "TaskDefinition", new FargateTaskDefinitionProps
{
    Cpu = 256,
    MemoryLimitMiB = 512,
    Family = "definition-family",
});

definition.AddContainer("ServiceTask", new ContainerDefinitionOptions
{
    ...
    Secrets = new Dictionary<string, Secret>
    {
        { "SECRET_ENV_VARIABLE", Secret.FromSsmParameter(StringParameter.FromStringParameterName(this, "SecretEnvVariable", "/path/to/parameter")) }
    }
});

я понимаю Parameters [/path/to/parameter] referenced by template have types not supported by CloudFormation.

Глядя на сгенерированный шаблон, я вижу запись valueFrom, как в исходном JSON, но также вижу сгенерированный параметр Cloudformation:

"SecretEnvVariable2A88BA98": {
   "Type": "AWS::SSM::Parameter::Value<String>",
   "Default": "/path/to/parameter"
}

Этот параметр Cloudformation нигде в шаблоне не упоминается, так есть ли способ добиться того же результата valueFrom без проблемного параметра Cloudformation?


198
1

Ответ:

Решено

Вы используете параметры защищенной строки, а не обычный строковый параметр, поэтому вам следует использовать StringParameter.fromSecureStringParameterAttributes() вместо StringParameter.fromStringParameterName()