目前正在将我的应用程序迁移到Micronaut 3,我遇到了Micronaut gcp的一个问题。尤其是谷歌秘密经理。我正在使用gradle和Kotlin DSL。
实际配置:(不工作,使用插件io.micronaut.library
version2.0.4
)
以前的配置:(不使用插件,使用micronaut bom)
我知道问题所在
我的目标是将一些秘密作为键/值对加载到属性源中。我按照说使用bootstrap.yml
的留档如下:
micronaut:
config-client:
enabled: true
gcp:
secret-manager:
keys:
- MY_SECRET
然后在我的课堂上,我应该能够使用@value
注释注入这个秘密值。事实上,我是在测试中这样做的。我使用的是jUnit5中的@MicronautTest
注释,所以我有如下内容:
@MicronautTest
public class MyClass {
@Value("${my.secret}")
private String mySecret;
}
然后出现了问题,当运行任何测试时,它在初始化时失败,原因是:
Error instantiating bean of type [io.micronaut.gcp.secretmanager.client.DefaultSecretManagerClient]
Message: getTransportChannel() called when needsExecutor() is true
Path Taken: new DistributedPropertySourceLocator(ConfigurationClient configurationClient,Duration readTimeout) --> new DistributedPropertySourceLocator([ConfigurationClient configurationClient],Duration readTimeout) --> new DefaultCompositeConfigurationClient([ConfigurationClient[] configurationClients]) --> new SecretManagerConfigurationClient([SecretManagerClient secretManagerClient],SecretManagerConfigurationProperties configurationProperties) --> new DefaultSecretManagerClient([SecretManagerServiceClient client],Environment environment,GoogleCloudConfiguration googleCloudConfiguration,ExecutorService executorService)
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [io.micronaut.gcp.secretmanager.client.DefaultSecretManagerClient]
我试过什么?
当我看到这一点时,我在想可能是引导。yaml
事情不起作用了,我试图通过注入SecretManagerServiceClient
使用较低级别的权限访问secret manager,如下所示:
@MicronautTest
public class MyClass {
@Inject
private SecretManagerServiceClient client;
private void someTest() {
String mySecret = client.getSecret("MY_SECRET");
}
}
但得到了相同的错误消息:当needsExecutor()为true时调用getTransportChannel(),路径相同。
我还试图升级到micronaut 3.0.1,但没有做任何改变。
我的解决方案
因为我的问题是在我的ci/cd过程的测试阶段检索一个秘密,因为我正在使用Google Cloud Build。我可以使用我的cloudbuild中的AvailableCrets功能传递秘密。yaml
:
steps:
...
- name: 'gradle'
entrypoint: 'bash'
args: ['./gradlew', 'test']
secretEnv: ['MY_SECRET']
...
availableSecrets:
secretManager:
- versionName: projects/PROJECT_ID/secrets/MY_SECRET/versions/latest
env: 'MY_SECRET'
然后将其传递到我的应用程序中。yml
:
my:
secret: ${MY_SECRET}
然后在我的代码中:
@MicronautTest
public class MyClass {
@Value("${my.secret}")
private String mySecret;
}
但是我觉得这个解决方案不是很令人满意,因为我发现引导。yaml
。
如果有人给我一个解决方案或一个想法/建议,我很乐意接受。
祝您有个美好的一天!
我去过那个兔子洞。长话短说,通过将google cloud secretmanager
依赖项从1.6.4升级到2.0.2,我克服了这个问题
像这样:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-secretmanager</artifactId>
<version>2.0.2</version>
</dependency>
将来自Google secret Manager的秘密注入Kubernetes部署的最佳实践是什么?我已将Grafana实例的管理员密码存储到Google Secret Manager中。Grafana实例是使用Google Kubernetes引擎上的helm图表部署的。我确实尝试过使用kube secrets init,这是一个Kubernetes变异的网络钩子,它变异了任何引用秘密Googl
我按照在Spring Boot上使用GCP设置秘密管理器的说明,在Google Cloud中创建了一个秘密,并在application.properties中添加了以下内容 但是,它不起作用,如果我使用,我可以通过
我的应用程序需要一堆秘密来运行:数据库凭据、API凭据等。它在Google App Engine StandardJava11中运行。我需要这些秘密作为环境变量或应用程序的参数,以便我的框架可以拾取它们并相应地建立连接。我的特定框架是Spring Boot,但我相信Django、Rails和许多其他框架使用相同的方法。 最好的方法是什么? 我对这个问题的一个答案是使用谷歌云密钥管理,这看起来很有希
在过去的几个小时里,我一直在谷歌上搜索,看看是否可以从AWS Lambda或我的本地PC等外部服务中使用Google Secret Manager。我找不到任何有用的东西,也找不到一些正确描述执行步骤的东西。 我不想玩API,最终通过OAuth进行身份验证,我希望使用客户端库。我该怎么做呢? 到目前为止,我已经提到了以下链接: https://cloud.google.com/secret-man
我正在构建一个需要访问mysql的数据工作室连接器(应用程序脚本)。 我的所有凭据都存储在GCP Secret Manager中,希望我的应用程序脚本从Secret Manager获取凭据。 我查过了https://developers.google.com/apps-script文档,但找不到访问Secret Manager的相关类。 应用脚本获取存储在秘密管理器中的凭据的最佳方式是什么?
小红书博主@Feng 整理的谷歌产品经理面经 #谷歌# #产品经理# #产品经理面经#