Google Secret Manager:无法通过 Spring Boot 从 Secret Manager 获取值

Google Secret Manager: unable get value from secret manager with Spring Boot

我无法从 Secret Manager 获取值。

**Application.property:**
spring.secret.key=${sm://projects/154281748/secrets/serviceaccount/versions/1}

**bootstrap.property:**
spring.cloud.gcp.secretmanager.enabled=true
spring.cloud.gcp.secretmanager.secret-name-prefix=sm://

**pom.xml:**
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-secretmanager</artifactId>             
</dependency>

**Java Code**
@Value("${spring.secret.key}")
private String key;

我正在获取密钥的“//projects/154281748/secrets/serviceaccount/versions/1”值。

部署和运行时是两回事。在部署时,用户必须具有部署新服务的权限。您可以在 the documentation

中找到 3 个角色

在运行时,默认情况下使用 App Engine 默认服务帐户。而且,当你填写它时,这不是一个好的做法,因为:

  • 默认角色是 Editor,授予服务帐户太多权限
  • 如果您有 2 项不同的服务,则两者具有相同的权限,因为它们使用相同的身份(服务帐户)

这就是为什么,他们终于发布了一个很棒的功能:user managed service account

您只需在 app.yaml 文件中设置服务帐户电子邮件即可。您有一个用于 App Engine 服务的专用服务帐户。


现在您拥有了运行时所需的身份。在运行时,您想获得一个秘密。因此,您必须授予运行时身份才能访问机密。

但是,因为您已经为您的 App Engine 服务拥有一个特定的专用身份,从秘密管理器加载服务帐户密钥文件没有任何意义!直接使用运行时标识!