AWS Secrets Manager 和 Spring Boot

Posted

技术标签:

【中文标题】AWS Secrets Manager 和 Spring Boot【英文标题】:AWS Secrets Manager and springboot 【发布时间】:2020-08-23 02:33:37 【问题描述】:

我正在尝试使用 AWS Secrets Manager 来存储 springboot 微服务的秘密。我能够配置所有内容,并且可以看到在启动时应用程序正在加载在我的情况下是 json 文档的秘密。特别是我正在使用

'org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config:2.2.1.RELEASE'

由于我注意到 AwsSecretsManagerPropertySource 能够将响应 json 解析为对象映射,因此我尝试对我的秘密使用嵌套结构,但是如果我尝试使用 @Value 注释注入 json 的任何字段,则会失败并显示转换异常。 所以,如果我的秘密是一个只有字符串作为字段的 json,我可以注入它们。例如:


"a.b":"value"
...

使用

@Value("$a.b")
String field;

它工作正常,但如果我有类似的秘密


"a": 
  "b":"value"

我看到json解析成功但是使用注解

@Value("$a.b")
String field;

我无法检索字段,如果我尝试类似的方法

@Value("$a")
Map<String, String> field;

由于转换问题(无法从 LinkedHashMap 转换为字符串)而失败。 有没有办法将嵌套结构处理成秘密,或者我应该只使用没有嵌套对象的 json? 非常感谢!

【问题讨论】:

【参考方案1】:

经过几次尝试,我能够访问从 AWS Secret Manager 检索的地图/列表,将 Environment 对象注入配置并调用:

@Configuration
public class MyConfigurationClass 

  @Autowired
  Environment environment;

  @Bean 
  public MyBean myBean() 
     List sites = environment.getProperty("sites", List.class);
     ...
  

【讨论】:

以上是关于AWS Secrets Manager 和 Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

如何规范存储在 AWS Secrets Manager 上的私钥

如何通过python更新AWS Secrets Manager?

无法使用 Secrets Manager 密钥注册 AWS Batch 作业定义

在 Spring Boot 中存储 AWS Secrets Manager 的 accessKey 和 secretKey 的位置

AWS Secrets Manager 异常访问被拒绝

AWS Secrets Manager 使用 AWS-SDK Java 更新密钥请求