10

我需要从 AWS Secret Manager 检索凭证,我发现我需要为以下 starter 添加 gradle 依赖项

spring-cloud-starter-aws-secrets-manager-config

另外,我发现我需要在 Bootstrap.yml 中添加以下设置

属性配置

如果有人可以非常感谢的话,我不清楚如何在我的 Spring Boot 应用程序中访问密钥。

4

5 回答 5

7

我想分享我对 SecretManager 与 Spring Boot 应用程序集成的发现。

步骤 1.spring-cloud-starter-aws-secrets-manager-config在 Spring Boot Application 中添加依赖(Gradle 和 Maven 添加依赖的方式不同)。

步骤 2. 在 bootstrap.yml 文件中添加以下配置。

aws:
  secretsmanager:
    prefix: /secret
    defaultContext: application
    profileSeparator: _
    failFast: true
    name: <service_name>
    enabled: true

步骤 3. 在 AWS 管理控制台中为所需区域创建密钥。

有两个秘密上下文

  1. 应用程序上下文 - 跨所有服务共享机密。
  2. 服务上下文 - 特定于服务的秘密。

关于创建秘密的最后说明,可以为每个环境创建秘密。

例如,

/secret/service_name_dev/username

/secret/service_name_prod/username

可以根据以下格式创建应用程序上下文机密。

/secret/application/username

一旦 Spring Boot 应用程序使用上述设置启动,应用程序将根据活动配置文件从 AWS Secret Manager 加载密钥。

例如,对于开发配置文件,它将加载秘密 /secret/service_name_dev/username,并且可以在配置和使用 ${username} 映射的类中访问该值。

于 2019-06-05T01:42:16.367 回答
4

如果您使用的是 springboot 2.4+,则不推荐使用 bootstrap 方法。集成 aws secret manager 的新方法是这样的:

  1. 将以下依赖项添加到您的应用程序:

     <dependency>
         <groupId>io.awspring.cloud</groupId>
         <artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
         <version>${version}</version>
     </dependency>
    
  2. 添加以下配置:

    spring.config.import: aws-secretsmanager:<your secret name in aws>

而已!

于 2021-09-07T06:29:02.240 回答
2

无需使用 Spring Boot 应用程序配置启用 aws Secrets Manager 我们只需要添加以下依赖项

<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 控制台并打开机密管理器为我们的应用程序添加新机密并按照以下步骤进行假设我们有一个 spring.application.name=secretmanagerboot 和参数名称为“com.secretmanagerboot.secret .param1”,其值为“secretvalue”

  1. 点击存储新的秘密
  2. 选择其他类型的机密
  3. 添加参数名称为“com.secretmanagerboot.secret.param1”,参数值为“secretvalue”
  4. 点击下一步
  5. 添加密钥名称为 secretmanagerboot<_PROFILE> 您可以根据需要添加描述。
  6. 单击下一步并选择您的轮换策略

您可以在应用程序中以 @Value("${com.secretmanagerboot.secret.param1}") 的形式访问您的参数

于 2020-01-23T18:17:46.367 回答
2

上面的答案可能是错误的。秘密管理器中的配置存储应该是: key: /secret/application value: {"username":"test"}

于 2019-09-18T02:57:44.557 回答
0

如果您使用的是 Spring Boot V 2.6.2,那么这是我们的 POM:

对于 Spring Boot:

<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

于 2022-02-24T04:57:14.337 回答