如何将 AWS Secret Manager 与 Spring 启动应用程序集成
How to integrate AWS Secret Manager with Spring Boot Application
我有一个从 AWS Secret Manager 检索凭证的要求,我发现我需要为以下启动程序添加 gradle 依赖项
spring-cloud-starter-aws-secrets-manager-config
此外,我发现我需要在 Bootstrap.yml
中添加以下设置
我不清楚如何在我的 Spring 启动应用程序中访问密钥,如果有人可以插话,非常感谢。
我想分享我对 SecretManager 与 Spring 启动应用程序集成的发现。
Step 1. 在Spring Boot Application中添加spring-cloud-starter-aws-secrets-manager-config
依赖(Gradle和Maven添加依赖的方式不同)。
第二步,在bootstrap.yml文件中添加如下配置。
aws:
secretsmanager:
prefix: /secret
defaultContext: application
profileSeparator: _
failFast: true
name: <service_name>
enabled: true
第 3 步。在 AWS 管理控制台中为所需区域创建密钥。
有两个秘密上下文
- 应用程序上下文 - 所有服务的共享机密。
- 服务上下文 - 特定于服务的秘密。
关于创建秘密的最后说明,可以为每个环境创建秘密。
例如,
/secret/service_name_dev/username
/secret/service_name_prod/username
可以根据以下格式创建应用程序上下文机密。
/secret/application/username
一旦 Spring 使用上述设置启动启动应用程序,应用程序将根据活动配置文件从 AWS Secret Manager 加载机密。
例如,
对于开发配置文件,它将加载秘密 /secret/service_name_dev/username,并且可以在配置中以及使用 ${username} 映射在 类 中访问该值。
上面的答案可能是错误的。
Secret Manager 中的配置存储应该是:
key: /secret/application
value: {"username":"test"}
启用 aws secrets manager spring 不需要启动应用程序配置我们只需要添加以下依赖项
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
<!--<version> As per your spring-cloud-dependencies And starter parent version
</version>-->
</dependency>
如果您没有 spring-cloud-context 依赖项,也请在您的 pom 中添加相同的内容。
它使 spring 应用程序能够连接到您的云,之后您可以像从属性文件中读取它们一样读取机密。
如果需要,您可以自定义属性配置,请阅读 spring 文档。
https://cloud.spring.io/spring-cloud-aws/2.1.x/multi/multi__cloud_environment.html
将上述更改添加到您的代码后,让我们转到 aws 控制台并打开 secrets manger 为我们的应用程序添加新的 secret 并按照以下步骤操作
假设我们有一个 spring.application.name=secretmanagerboot
参数名称为 "com.secretmanagerboot.secret.param1",其值为 "secretvalue"
- 点击存储新密文
- Select 其他类型的秘密
- 将参数名称添加为 "com.secretmanagerboot.secret.param1" 并将参数值添加为 "secretvalue"
- 点击下一步
- 将机密名称添加为 secretmanagerboot<_PROFILE>
如果需要,您可以添加描述。
- 单击“下一步”并select您的轮换政策
您可以在应用程序中访问您的参数
@Value("${com.secretmanagerboot.secret.param1}")
如果您使用的是 springboot 2.4+,则 bootstrap 方法已被弃用。集成aws secret manager的新方式是这样的:
将以下依赖项添加到您的应用程序:
<dependency>
<groupId>io.awspring.cloud</groupId>
<artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
<version>${version}</version>
</dependency>
添加如下配置:
spring.config.import: aws-secretsmanager:<your secret name in aws>
就是这样!
如果您使用的是 Spring Boot V 2.6.2
那么我们的 POM:
对于Spring引导:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
我们有这个让所有相关的依赖项具有相同版本 aws java sdk 2
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.17.136</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后在我们的例子中我们只使用 SecretManager
所以我们有:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>secretsmanager</artifactId>
<version>2.17.121</version>
</dependency>
我在依赖方面遇到了很多困难,因为我们需要 sdk 2
而不是一个。 aws 依赖项的一个通用规则是,如果您看到 com.amazonaws
,那么它就是 sdk v1
。如果需要 sdk v2
,请不要使用它们
我有一个从 AWS Secret Manager 检索凭证的要求,我发现我需要为以下启动程序添加 gradle 依赖项
spring-cloud-starter-aws-secrets-manager-config
此外,我发现我需要在 Bootstrap.yml
中添加以下设置我不清楚如何在我的 Spring 启动应用程序中访问密钥,如果有人可以插话,非常感谢。
我想分享我对 SecretManager 与 Spring 启动应用程序集成的发现。
Step 1. 在Spring Boot Application中添加spring-cloud-starter-aws-secrets-manager-config
依赖(Gradle和Maven添加依赖的方式不同)。
第二步,在bootstrap.yml文件中添加如下配置。
aws:
secretsmanager:
prefix: /secret
defaultContext: application
profileSeparator: _
failFast: true
name: <service_name>
enabled: true
第 3 步。在 AWS 管理控制台中为所需区域创建密钥。
有两个秘密上下文
- 应用程序上下文 - 所有服务的共享机密。
- 服务上下文 - 特定于服务的秘密。
关于创建秘密的最后说明,可以为每个环境创建秘密。
例如,
/secret/service_name_dev/username
/secret/service_name_prod/username
可以根据以下格式创建应用程序上下文机密。
/secret/application/username
一旦 Spring 使用上述设置启动启动应用程序,应用程序将根据活动配置文件从 AWS Secret Manager 加载机密。
例如, 对于开发配置文件,它将加载秘密 /secret/service_name_dev/username,并且可以在配置中以及使用 ${username} 映射在 类 中访问该值。
上面的答案可能是错误的。
Secret Manager 中的配置存储应该是:
key: /secret/application
value: {"username":"test"}
启用 aws secrets manager spring 不需要启动应用程序配置我们只需要添加以下依赖项
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
<!--<version> As per your spring-cloud-dependencies And starter parent version
</version>-->
</dependency>
如果您没有 spring-cloud-context 依赖项,也请在您的 pom 中添加相同的内容。
它使 spring 应用程序能够连接到您的云,之后您可以像从属性文件中读取它们一样读取机密。 如果需要,您可以自定义属性配置,请阅读 spring 文档。 https://cloud.spring.io/spring-cloud-aws/2.1.x/multi/multi__cloud_environment.html
将上述更改添加到您的代码后,让我们转到 aws 控制台并打开 secrets manger 为我们的应用程序添加新的 secret 并按照以下步骤操作 假设我们有一个 spring.application.name=secretmanagerboot 参数名称为 "com.secretmanagerboot.secret.param1",其值为 "secretvalue"
- 点击存储新密文
- Select 其他类型的秘密
- 将参数名称添加为 "com.secretmanagerboot.secret.param1" 并将参数值添加为 "secretvalue"
- 点击下一步
- 将机密名称添加为 secretmanagerboot<_PROFILE> 如果需要,您可以添加描述。
- 单击“下一步”并select您的轮换政策
您可以在应用程序中访问您的参数 @Value("${com.secretmanagerboot.secret.param1}")
如果您使用的是 springboot 2.4+,则 bootstrap 方法已被弃用。集成aws secret manager的新方式是这样的:
将以下依赖项添加到您的应用程序:
<dependency> <groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId> <version>${version}</version> </dependency>
添加如下配置:
spring.config.import: aws-secretsmanager:<your secret name in aws>
就是这样!
如果您使用的是 Spring Boot V 2.6.2
那么我们的 POM:
对于Spring引导:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
我们有这个让所有相关的依赖项具有相同版本 aws java sdk 2
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.17.136</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后在我们的例子中我们只使用 SecretManager
所以我们有:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>secretsmanager</artifactId>
<version>2.17.121</version>
</dependency>
我在依赖方面遇到了很多困难,因为我们需要 sdk 2
而不是一个。 aws 依赖项的一个通用规则是,如果您看到 com.amazonaws
,那么它就是 sdk v1
。如果需要 sdk v2