如何使用AWS ECS从参数存储获取数据库机密

时间:2019-10-10 20:01:02

标签: amazon-web-services spring-boot docker amazon-ecs aws-secrets-manager

我正在努力使用ECS在AWS上运行Spring Boot微服务。我们希望该服务从Secrets Manager或Parameter Store中检索数据库用户名和密码值。我们正在使用所有AWS服务(CodeCommit,CodeBuild,CodeDeploy等)

从Parameter Store读取这些值并将其放入我们的微服务的application.properties的最佳方法是什么?

我尝试关注this guide on retrieving secrets。我能够读取机密,但只能作为系统属性来读取,我无法确定如何将其放入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 个答案:

答案 0 :(得分:3)

最后一个陈述不清楚。 rdsmasterusername是否同时包含用户名或密码或仅包含用户名?我猜想它会在JSON字符串中同时包含用户名和密码-根据您的上次记录。

如果您不想处理解析JSON字符串或创建稍后将被继承的新环境变量,则可以将用户名和密码存储在两个不同的秘密中,将它们注入到taskdef文件中,然后在{ https://stackoverflow.com/a/35535138中所述的{1}}个文件。