gpt4 book ai didi

java - 使用 Key Vault 中的 key 连接到 Cosmos

转载 作者:行者123 更新时间:2023-12-03 02:27:42 25 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,需要使用 CosmosDB。我的目标是从 Key Vault 加载 CosmosDB 连接 key 并使用它连接到 CosmosDB。我已将 key 作为 secret 放置在 Key Vault 中,但似乎存在排序问题,因为 Cosmos bean 是在 Key Vault 之前创建的。我能够成功连接到 Key Vault,并在此之前收到多个 key ,如果我对连接 key 进行硬编码,我也能够连接到 Cosmos。是否可以从 Key Vault 加载 key 并使用它来创建 Cosmos bean?

我尝试过以下内容,但我收到与 Cosmos 的连接错误(由于未设置 key ) - 可能是因为它在 Key Vault 之前加载。是否有一种可靠的方法来连接到 Cosmos 或任何适用于 Spring boot 的正确示例?

我正在使用的依赖项:

azure-cosmosdb-spring-boot-starter (from com.microsoft.azure)
azure-identity (from com.azure)
azure-security-keyvault-secrets (from com.azure)

CosmosConfiguration.java 类:

@Slf4j
@Configuration
@Profile("!local")
public class CosmosConfiguration extends AbstractCosmosConfiguration {
@Value("${cosmosPrimaryKey}")
private String key;

@Override
public CosmosClient cosmosClient(CosmosDBConfig config) {
return CosmosClient
.builder()
.endpoint(config.getUri())
.cosmosKeyCredential(new CosmosKeyCredential(key))
.consistencyLevel(consistencyLevel.STRONG)
.build()
}
}

application.properties(仅相关部分):

azure.keyvault.enabled=true
azure.keyvault.uri=https://mykeyvault.azure.net
azure.keyvault.secrets-keys=cosmosPrimaryKey

cosmosdb.keyname=cosmosPrimaryKey

azure.cosmosdb.uri=https://mycosmos.documents.azure.com:443
azure.cosmodb.repositories.enabled=true

spring.main.allow-bean-definition-overriding=true

最佳答案

我对您的案例的想法是在创建“CosmosClient”时添加判断。这是我的代码。

@Autowired
private CosmosProperties properties;

public CosmosClientBuilder cosmosClientBuilder() {
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();
String uri = properties.getUri();
if(true) {
String temp = getConnectUriFromKeyvault();
properties.setUri(temp);
}
return new CosmosClientBuilder()
.endpoint(properties.getUri())
.key(properties.getKey())
.directMode(directConnectionConfig);
}

public String getConnectUriFromKeyvault() {
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl("https://vauxxxxen.vault.azure.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
KeyVaultSecret secret = secretClient.getSecret("cosmosdbScanWithwrongkey");
return secret.getValue();
}

CosmosProperties 实体:

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "cosmos")
public class CosmosProperties {

private String uri;

private String key;

private String secondaryKey;

private boolean queryMetricsEnabled;
//get set function
//...
}

应用程序属性:

cosmos.uri=https://txxxb.documents.azure.com:443/
cosmos.key=gdvBggxxxxxWA==
cosmos.secondaryKey=wDcxxxfinXg==
dynamic.collection.name=spel-property-collection
# Populate query metrics
cosmos.queryMetricsEnabled=true

我关注了这个doc获取 keystore secret 。

关于java - 使用 Key Vault 中的 key 连接到 Cosmos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66320535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com