Чтение секрета с помощью CloudFormation - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь создать стек AWS в CloudFormation с секретом в JSON.

Я не хочу, чтобы значение секрета отображалось в параметрах, и я не хочу, чтобы мой экземпляр (fargate или ec2) обращался к диспетчеру секретов. Я хочу, чтобы CloudFormation извлекла значение из диспетчера секретов и вставила его в шаблон во время выполнения.

Вот что я сделал:

  1. Создать секрет

  2. Создание шаблона с помощью Designer

  3. Прочитайте секрет и создайте ресурс. В этом случае я создаю ведро, которое имеет в качестве тега секрет. Я знаю, что это небезопасно, но ведро используется просто как подтверждение концепции.

  4. Проверить, что в ведре есть тег с секретом

Это мой шаблон:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "create a single S3 bucket",
    "Resources": {
        "SampleBucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "BucketName": "asantostestbucket",
                "Tags" : [
                    {
                        "Key" : "keyname",
                        "Value" : "{{resolve:secretsmanager:dev/learning:SecretString:hello}}"
                    }
            ]
            }
        }
    }
}

Что дает мне ошибку One or more tags are not valid.

Как я могу указать CloudFormation, что я хочу, чтобы он прочитал секрет, а не пытался прочитать тег как текст? Другими словами, замените «{{resol: secrettsmanager: dev / learning: SecretString: hello}}» значением вместо чтения его в виде текста.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Чтобы воспроизвести эту ситуацию, я сделал следующее:

  • В Диспетчер секретов создал новый секрет
    • «Секреты другого типа»
    • Ключ: hello
    • Значение: surprise
    • Секретное имя: dev/learning
  • Проверка секрета с использованиемAWS CLI

Вот вывод:

aws secretsmanager get-secret-value --secret-id dev/learning
{
    "ARN": "arn:aws:secretsmanager:ap-southeast-2:123456789012:secret:dev/learning-kCxSK3",
    "Name": "dev/learning",
    "VersionId": "...",
    "SecretString": "{\"hello\":\"surprise\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1560925072.106
}
  • Запустил шаблон CloudFormation, который вы предоставили выше (но с другим именем корзины)

Результат: Я получил сообщение One or more tags are not valid

Итак, я получил тот же результат, что и вы.

Затем я попытался создать ресурс другого типа, используясекрет:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "SecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "{{resolve:secretsmanager:dev/learning:SecretString:hello}}"
            }
        }
    }
}

Это сработало успешно:

aws ec2 describe-security-groups --group-id sg-03cfd71f4539a4b7e
{
    "SecurityGroups": [
        {
            "Description": "surprise",
            ...

Итак, похоже, что {{resolve}} ведет себя правильно, но по какой-то причине тегу S3 это не нравится.

Итог: Возможно, но не рекомендуется.

0 голосов
/ 01 июля 2019

Кстати, вместо использования конструктора (с которым немного неудобно работать), вы можете попробовать cloudkast , который является онлайн-генератором шаблонов облачной информации.

...