簡體   English   中英

使用 Key Vault 中的密鑰連接到 Cosmos

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM