如何在运行时通过 AWS 注入密钥

Posted

技术标签:

【中文标题】如何在运行时通过 AWS 注入密钥【英文标题】:How to inject a secret key at runtime via AWS 【发布时间】:2020-07-10 02:22:18 【问题描述】:

使用 Spring boot,我们在属性文件中当前存在以下值。

secret.key=123456 # lets assume 12345 is a secret key

我们正在使用 AWS beanstalk,并希望停止在 code/git 中添加秘密数据,而是在运行时将其作为环境变量注入 aws,如下所示。

但是如何在代码中实现这一点,因为该值当前不存在,无法运行它并显示以下错误消息:

自动装配依赖注入失败;嵌套异常是 java.lang.IllegalArgumentException:无法解析值“$secret.key”中的占位符“secret.key”

尝试在属性文件中进行如下设置:

server.port=5000
#other settings
secret.data=$secret.key

例如尝试在代码中使用秘密值如下:

@RestController
public class HomeController 

    @Value("$secret.data")
    private String secretData;
    .....

请告知是否有解决此问题的方法或更好的方法来实现此目的,以停止在代码和 git 中添加敏感数据。谢谢。

【问题讨论】:

我通常使用 AWS Secrets Manager 来存储我可以在运行时访问的秘密。 如何获取 springboot 中密钥的真正秘密值? 【参考方案1】:

您正在传递一个系统属性。所以你想要的注释以systemProperties开头。喜欢,

@Value("#systemProperties.secret.key")
private String secretData;

【讨论】:

以上是关于如何在运行时通过 AWS 注入密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何将新的 SSL 证书和密钥注入正在运行的 Node http.Server?

发送电子邮件时如何向 Amazon SES 服务提供 AWS 密钥?

权限被拒绝(公钥) Amazon Linux aws

更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?

在使用 AWS Elastic Beanstalk 创建实例时运行命令

如何在 AWS CDK 中使用 CfnParameter 而无需在运行时填写值