Развертывание Jenkins в AWS с помощью менеджера облачной информации и секретов - PullRequest
1 голос
/ 07 мая 2019

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

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

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

Мой вопрос:

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

Ответы [ 2 ]

1 голос
/ 07 мая 2019

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

0 голосов
/ 16 мая 2019

Шаблоны облачной информации могут восстанавливать секреты из 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}}'

...