Ссылка на безопасную строку хранилища параметров AWS в шаблоне CloudFormation - PullRequest
0 голосов
/ 04 июля 2019

Застрял с использованием SecureString из AWS Parameter Store. Я пытаюсь сослаться на пароль базы данных как:

DatabasePassword:
    Type: AWS::SSM::Parameter::Value<SecureString>
    NoEcho: 'true'
    Default: /environment/default/database_password
    Description: The database admin account password

Это выдает ошибку:

Произошла ошибка (ValidationError) при вызове операции CreateStack: Ошибка формата шаблона: Нераспознанный тип параметра: SecureString

Однако, если я ссылаюсь на этот параметр как String вместо SecureString, он выдаст другую ошибку:

Произошла ошибка (ValidationError) при вызове операции CreateStack: параметры [/ environment / default / database_password], на которые ссылается шаблон, имеют типы, не поддерживаемые CloudFormation.

Я попытался использовать '{{resolve:ssm-secure:parameter-name:version}}', и он работает для конфигурации базы данных:

MasterUsername: !Ref DatabaseUsername
MasterUserPassword: '{{resolve:ssm-secure:/environment/default/database_password:1}}'

Однако я использую контейнеры-докеры AWS Fargate, в которых я передаю эти значения в качестве переменных среды:

Environment:
  - Name: DATABASE_HOSTNAME
    Value: !Ref DatabaseHostname
  - Name: DATABASE_USERNAME
     Value: !Ref DatabaseUsername
  - Name: DATABASE_PASSWORD
    Value: '{{resolve:ssm-secure:/environment/default/database_password:1}}'

Выдает ошибку:

Произошла ошибка (ValidationError) при вызове операции CreateStack: ссылка SSM Secure не поддерживается в: [AWS :: ECS :: TaskDefinition / Properties / ContainerDefinitions / Environment]

Невозможно использовать безопасные строки в моей реализации. Есть ли решение этой проблемы? AWS объявила о поддержке SecureString в прошлом году, но не смогла найти документацию. Я нашел только resolve, который работает только в некоторых случаях.

Ссылка:

1

2

Ответы [ 2 ]

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

Диспетчер секретов AWS можно использовать для получения секретов для шаблонов CloudFormation, даже если они не являются такими, как пароли базы данных.

Вот ссылка на документацию: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

Секрет Секретного менеджера состоит из 3 частей:

  • Имя Секрета, например, PROD_DB_PASSWORD
  • Ключ Секрета, например, DB_PASSWORD
  • И фактическое Значение Секрета

Затем вы разрешите вышеуказанный секрет в своем шаблоне CloudFormation, используя:

'{{resolve:secretsmanager:PROD_DB_PASSWORD:SecretString:DB_PASSWORD}}'
0 голосов
/ 04 июля 2019

CloudFormation не поддерживает SecureString в качестве типа параметра шаблона. Вы можете подтвердить это в документации ниже, позвольте мне процитировать это.

Кроме того, AWS CloudFormation не поддерживает определение шаблона параметры как типы параметров SecureString Systems Manager . Тем не мение, Вы можете указать безопасные строки в качестве значений параметров для определенных ресурсы с использованием динамических шаблонов параметров.

Ссылка: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-ssm-parameter-types

Как вы упомянули, вы "можете" решить эту проблему, используя dynamic parameter patterns, но только ограниченное количество ресурсов поддерживает это. ECS и Fargate нет.

Ссылка: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html

Может быть, вы можете обратиться к нему с помощью Secrets Manager, вместо этого вы устанавливаете пароль в качестве переменной среды для вашего контейнера, ваше приложение получает пароль во время выполнения от Secrets Manager, это также повышает вашу безопасность, пароль не будет понятным текст внутри контейнера.

Ниже вы можете увидеть один пример этого решения, оно не для контейнера, но "способ работы" такой же, как для переменной среды и Secrets Manager.

Ссылка: https://aws.amazon.com/blogs/security/how-to-securely-provide-database-credentials-to-lambda-functions-by-using-aws-secrets-manager/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...