Как использовать AWS ECS для получения секретов базы данных из хранилища параметров - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над созданием микросервиса Spring Boot, работающего в AWS с использованием ECS. Мы хотим, чтобы служба получала значения имени пользователя и пароля для базы данных из Secrets Manager или Parameter Store. Мы используем все сервисы AWS (CodeCommit, CodeBuild, CodeDeploy и т. Д.)

Как лучше всего прочитать эти значения из хранилища параметров и передать их в application.properties нашего микросервиса?

Я пытался следовать этому руководству по извлечению секретов . Я могу читать секреты, но только как Свойства системы, и я не могу определить, как получить их в файл application.properties.

Вот та задача taskdef.json

{
    "executionRoleArn": "arn:aws:iam::ACCOUNT_ID:role/profile-service",
    "containerDefinitions": [
        {
            "name": "profile-service",
            "image": "<IMAGE1_NAME>",
            "essential": true,
            "environment": [ 
                { 
                    "name": "SPRING_PROFILES_ACTIVE", 
                    "value": "dev" 
                }
            ], 
            "portMappings": [
                {
                    "protocol": "tcp",
                    "containerPort": 8080
                }
            ],
            "secrets": [
                {
                    "valueFrom": "arn:aws:secretsmanager:us-east-1:ACCOUNT_ID:secret:PROJECT/dev/rds-Y3B26E",
                    "name": "rdsmasterusername"
                }
            ],
   ....
}

Вотосновной файл Spring я использовал для тестирования. Он правильно печатает секреты. Я просто не уверен, что это лучший способ получить их в свойствах.

public static void main(String[] args) {
    String test1 = System.getenv("rdsmasterusername");
    System.out.println(test1);     // Correctly prints the RDS username

    SpringApplication.run(Startup.class, args);
  }

Примечание. В настоящее время, когда я пытаюсь получить секрет, он дает мне какой-то объект, который имеет имя пользователяи пароль. Я не уверен, как разобрать тех, кто в Java.

Спасибо за любую помощь!

1 Ответ

3 голосов
/ 11 октября 2019

Последнее утверждение не ясно. rdsmasterusername содержит имя пользователя или пароль или только имя пользователя? Я предполагаю, что он содержит имя пользователя и пароль в строке JSON - на основе вашей последней заметки.

Если вы не хотите разбирать строку JSON или создавать новые переменные среды, которые будут унаследованы позжеВы можете сохранить имя пользователя и пароль в двух разных секретах, вставить их в файл taskdef, а затем установить их в свои application.properties файлы, как описано в https://stackoverflow.com/a/35535138.

...