Развертывание Jenkins в AWS с помощью диспетчера облачной информации и секретов

Моя цель - создать Jenkins как образ докера и развернуть его в AWS Elastic Beanstalk.

Для создания образа докера я использую плагин Configuration as Code и вводю все секреты через переменные среды в Dockerfile.

Сейчас я пытаюсь понять, как автоматизировать это развертывание с помощью CloudFormation или CodePipeline.

У меня вопрос:

  • Могу ли я получить секреты из AWS Secrets Manager с помощью CloudFormation или CodePipeline и внедрить их в качестве переменных среды при развертывании в Elastic Beanstalk?

person Pablo    schedule 06.05.2019    source источник


Ответы (2)


Шаблоны Cloudformation могут восстанавливать секреты из Secrets Manager. Это несколько некрасиво, но работает неплохо. В общем, я использую вложенный стек security.yaml, чтобы генерировать секреты для меня в SM, а затем восстанавливать их в других стеках.

Я не могу слишком много говорить с EB, но если вы развертываете это через CF, это должно помочь.

Генерация секрета в SM (CF security.yaml):

Parameters:
  DeploymentEnvironment:
    Type: String
    Description: Deployment environment, e.g. prod, stage, qa, dev, or userdev
    Default: "dev"
...
Resources:
...  
  RegistryDbAdminCreds:
    Type: 'AWS::SecretsManager::Secret'
    Properties:
      Name: !Sub "RegistryDbAdminCreds-${DeploymentEnvironment}"
      Description: "RDS master uid/password for artifact registry database."
      GenerateSecretString:
        SecretStringTemplate: '{"username": "artifactadmin"}'
        GenerateStringKey: "password"
        PasswordLength: 30
        ExcludeCharacters: '"@/\+//:*`"'
      Tags:
      -
        Key: AppName
        Value: RegistryDbAdminCreds

Использование секрета в другом yaml:

Parameters:
  DeploymentEnvironment:
    Type: String
    Description: Deployment environment, e.g. prod, stage, qa, dev, or userdev
    Default: "dev"
...
Resources:
  DB:
    Type: 'AWS::RDS::DBInstance'
    DependsOn: security
    Properties:
      Engine: postgres
      DBInstanceClass: db.t2.small
      DBName: quilt
      MasterUsername: !Sub '{{resolve:secretsmanager:RegistryDbAdminCreds-${DeploymentEnvironment}:SecretString:username}}'
      MasterUserPassword: !Sub '{{resolve:secretsmanager:RegistryDbAdminCreds-${DeploymentEnvironment}:SecretString:password}}'
      StorageType: gp2
      AllocatedStorage: "100"
      PubliclyAccessible: true
      DBSubnetGroupName: !Ref SubnetGroup
      MultiAZ: true
      VPCSecurityGroups:
      - !GetAtt "network.Outputs.VPCSecurityGroup"
      Tags:
      - Key: Name
        Value: !Join [ '-', [ !Ref StackName, "dbinstance", !Ref DeploymentEnvironment ] ]

Уловка в !Sub '{{resolve:secretsmanager:RegistryDbAdminCreds-${DeploymentEnvironment}:SecretString:username}}' и !Sub '{{resolve:secretsmanager:RegistryDbAdminCreds-${DeploymentEnvironment}:SecretString:password}}'

person Greg Desmarais    schedule 16.05.2019

Не знаете, почему вы хотите делать что-то таким образом в целом, но не могли бы вы просто использовать AWS CLI для получения секретов из Secrets Manager непосредственно из вашего экземпляра ELB?

person Slushysnowman    schedule 07.05.2019