Использование секрета менеджера AWS Secrets в облачной информации - PullRequest
0 голосов
/ 17 января 2019

Я хочу экспортировать пароль read_only_user в экземпляр EC2. Как я могу получить доступ к созданному паролю внутри UserData?

Resources:
  ReadOnlyUserCredentials:
      Type: AWS::SecretsManager::Secret
      Properties:
        Name: !Sub "${AWS::StackName}/readonly-user-credentials"
        GenerateSecretString:
          SecretStringTemplate: '{"username": "read_only_user"}'
          GenerateStringKey: 'password'
          PasswordLength: 16
          ExcludeCharacters: '"@/\'
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          echo "${!Join ['', ['{{resolve:secretsmanager:', !Ref ReadOnlyUserCredentials, ':SecretString:password}}' ]]}" > password

Я пытался использовать! Join, но, конечно, это не работает. Я буду очень признателен за любую помощь здесь.

Обновление:

      UserData:
        Fn::Base64:
         Fn::Sub:
          - |
            echo ${PasswordStr} > password
          - PasswordStr: !Join ['', ['{{resolve:secretsmanager:', !Ref ReadOnlyUserCredentials, ':SecretString:password}}' ]]

Изменив код, как показано выше, я получил строку разрешения, но она не дала мне действительный пароль. Как мне разрешить Арн, чтобы получить простой пароль?

1 Ответ

0 голосов
/ 19 января 2019

Возможно, вы не хотите, чтобы CFN раскрывал ваш секрет в пользовательских данных, поскольку пароль был бы встроен в скрипт пользовательских данных в кодировке base64, который отображается в консоли EC2.

Вместо этого вам следует воспользоваться тем, что у вас есть скрипт, который выполняется на хосте и диспетчер секретов вызовов во время выполнения скрипта (предупреждение, не проверено):

Resources:
  ReadOnlyUserCredentials:
      Type: AWS::SecretsManager::Secret
      Properties:
        Name: !Sub "${AWS::StackName}/readonly-user-credentials"
        GenerateSecretString:
          SecretStringTemplate: '{"username": "read_only_user"}'
          GenerateStringKey: 'password'
          PasswordLength: 16
          ExcludeCharacters: '"@/\'
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          yum install -y jq
          aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id !Ref ReadOnlyUserCredentials --query SecretString --output text | jq -r .password > password
...