[英]Connect to Cosmos using key from Key Vault
我有一個需要使用 CosmosDB 的 Spring 引導應用程序。 我的目標是從 Key Vault 加載 CosmosDB 連接密鑰並使用它連接到 CosmosDB。 我已將密鑰作為機密放在 Key Vault 中,但似乎存在排序問題,因為 Cosmos bean 是在 Key Vault 之前創建的。 我能夠成功連接到 Key Vault 並且在此之前已經收到了幾個密鑰,如果我對連接密鑰進行硬編碼,我也能夠連接到 Cosmos。 是否可以從 Key Vault 加載密鑰並使用它來創建 Cosmos bean?
我嘗試過以下內容,但我收到 Cosmos 的連接錯誤(由於未設置密鑰) - 可能是因為它在 Key Vault 之前加載。 是否有連接到 Cosmos 的可靠方法或任何可用於 Spring 引導的適當示例?
我正在使用的依賴項:
azure-cosmosdb-spring-boot-starter (from com.microsoft.azure)
azure-identity (from com.azure)
azure-security-keyvault-secrets (from com.azure)
CosmosConfiguration.java class:
@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
我按照此文檔獲取密鑰保管庫機密。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.