Spring Cloud Azure gizli anahtar yönetimi

Azure Key Vault Secrets’ta depolanan gizli bilgileri tutan Spring Cloud Azure yapısı PropertySource.

Bağımlılık kurulumu

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>

İpucu

Ayrıca Key Vault'un tüm özelliklerini desteklemek için spring-cloud-azure-starter-keyvault sağlıyoruz. Kullanmayı seçerseniz, spring.cloud.azure.keyvault.enable yapılandırılan özelliktir ve varsayılan değer true. Daha sonra gereksiz hizmetleri devre dışı bırakmak için spring.cloud.azure.keyvault.<keyvault-service>.enable kullanabilirsiniz.

Temel kullanım

client-id ve client-secretkimlik doğrulaması yapmak istiyorsanız, aşağıdaki özellikler gereklidir:

Yapılandırma Özellikleri

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources:
            - name: key-vault-property-source-1
              endpoint: ${ENDPOINT_1}
            - name: key-vault-property-source-2
              endpoint: ${ENDPOINT_2}

Java kodu

@SpringBootApplication
public class SampleApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;
    @Value("${sampleProperty2}")
    private String sampleProperty2;
    @Value("${samplePropertyInMultipleKeyVault}")
    private String samplePropertyInMultipleKeyVault;

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
        System.out.println("sampleProperty2: " + sampleProperty2);
        System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
    }
}

Gelişmiş kullanım

Özellik adındaki özel karakterler

Key Vault gizli anahtar adları yalnızca [0-9a-zA-Z-] içindeki karakterleri destekler. Daha fazla bilgi için Azure Key Vault anahtarları, gizli dizileri ve sertifikalarına genel bakış belgesinin Vault-name ve Object-name bölümüne bakın. Özellik adınız başka karakterler içeriyorsa, aşağıdaki bölümlerde açıklanan geçici çözümleri kullanabilirsiniz.

Gizli adlarında . yerine - kullanın

., gizli adlarında desteklenmez. Uygulamanızın .içeren spring.datasource.urlgibi bir özellik adı varsa, gizli diziyi Azure Key Vault'a kaydederken . yerine - yazın. Örneğin, spring-datasource-url Azure Key Vault'a kaydedin. Uygulamanızda, özellik değerini almak için spring.datasource.url kullanmaya devam edebilirsiniz.

Not

Bu yöntem spring.datasource-urlgibi bir gereksinimi karşılayamaz. Key Vault'ta spring-datasource-url kaydettiğinizde özellik değerini almak için yalnızca spring.datasource.url ve spring-datasource-url desteklenir, ancak spring.datasource-url desteklenmez. Bu durumu ele almak için Özellik yer tutucularını kullanma bölümüne bakın.

Özellik yer tutucularını kullanın

Örneğin, application.properties dosyanızda bu özelliği ayarladığınızı varsayalım:

property.with.special.character__=${propertyWithoutSpecialCharacter}

Uygulama bir propertyWithoutSpecialCharacter anahtar adı alır ve değerini property.with.special.character__atar.

Büyük/küçük harfe duyarlı

Büyük/küçük harfe duyarlı modu etkinleştirmek için aşağıdaki özelliği ayarlayabilirsiniz:

spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true

Key Vault'taki tüm gizli anahtarları almama

Key Vault'ta 1.000 gizli anahtar depoladıysanız ve bunlardan yalnızca 3 tanesini kullanmak istiyorsanız. spring.cloud.azure.keyvault.secret.property-sources[].secret-keys kullanarak 3 gizli adı listeleyebilirsiniz.

Yenileme aralığını ayarlama

Varsayılan olarak, KeyVaultPropertySource içindeki gizli anahtarlar her 30 dakikada bir yenilenir. Saati spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval kullanarak yapılandırabilirsiniz. Örneğin: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m 60 dakikada bir yenileme anlamına gelir. Otomatik yenilemeyi devre dışı bırakmak için 0 olarak ayarlayın.

PropertySource önceliği

Anahtar birden fazla PropertySources'ta yer alıyorsa, hangisinin geçerli olacağı önceliğe göre belirlenir.

  • SystemEnvironmentPropertySource listesinde PropertySource yoksa KeyVaultPropertySource en yüksek önceliği alır.
  • SystemEnvironmentPropertySource listesinde PropertySource varsa, SystemEnvironmentPropertySourceKeyVaultPropertySource'den daha yüksek önceliğe sahiptir. Bu, uygulamanızdaki Key Vault gizli dizi değerini geçersiz kılmak için bir ortam değişkeni kullanabileceğiniz anlamına gelir.
  • PropertySource listesinde birden çok anahtar kasası özellik kaynağı varsa, tanım sırası öncelik sırasıdır. Yukarıdaki örneği örnek olarak ele alarak, key-vault-property-source-1key-vault-property-source-2'den daha yüksek önceliğe sahiptir.

Key Vault özellik kaynağı için belirteç kimlik bilgilerini yapılandırma

Key Vault PropertySource için belirli bir belirteç kimlik bilgisini kullanmanız gerekiyorsa, KeyVaultEnvironmentPostProcessor için ConfigurableBootstrapContext içinde TokenCredential bean'ini kaydedebilirsiniz; bu özellik Spring Cloud Azure 5.16.0 sürümünden itibaren desteklenmektedir. AzureCliCredentialkullanmak için bir örnek aşağıda verilmiştir:

public static void main(String[] args) {
    SpringApplication application = new SpringApplication(PropertySourceApplication.class);
    application.addBootstrapRegistryInitializer(registry -> 
            registry.register(TokenCredential.class, context -> new AzureCliCredentialBuilder().build()));

    application.run(args);
}

Tüm yapılandırılabilir özellikler

Mülk Varsayılan değer Açıklama
spring.cloud.azure.keyvault.secret.property-source-enabled doğru Key Vault özellik kaynağının etkinleştirilip etkinleştirilmeyileceği.
spring.cloud.azure.keyvault.secret.property-sources[].name Bu özellik kaynağının adı.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Azure Key Vault uç noktası.
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive yanlış Gizli anahtarların büyük/küçük harfe duyarlı olup olmadığı.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Bu özellik kaynağı için desteklenen gizli anahtarlar. Bu özellik eksikse tüm anahtarlar alınacaktır.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30 dk Tüm Key Vault gizli anahtarlarını yenileme zaman aralığı.
spring.cloud.azure.keyvault.secret.property-sources[].service-version API istekleri yapılırken kullanılan gizli hizmet sürümü.
spring.cloud.azure.keyvault.secret.property-sources[].client İstemciyle ilgili özellikler.
spring.cloud.azure.keyvault.secret.property-sources[].credential Kimlik bilgileriyle ilgili özellikler.
spring.cloud.azure.keyvault.secret.property-sources[].profile Profille ilgili özellikler.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Ara sunucuyla ilgili özellikler.
spring.cloud.azure.keyvault.secret.property-sources[].retry İlgili özellikleri yeniden deneyin.
  • security principal öğesine Azure Key Vault gizli bilgilerine erişmek için yeterli izin verildiğinden emin olmak üzere bkz. Microsoft Entra ID ile erişimi yetkilendirme.
  • client, credential, profile, proxy, retry gibi ortak özellikler spring.cloud.azure.keyvault.secret.property-sources[].xxx içinde yapılandırılmamışsa spring.cloud.azure.xxx kullanılacaktır. Bu yaygın özellikler hakkında daha fazla bilgi edinmek için bkz. Spring Cloud Azure yapılandırma .
  • İç içe özellikler hakkında daha fazla bilgi edinmek için bkz. Spring Cloud Azure yapılandırma özellikleri .

Örnekler

GitHub'da spring-cloud-azure-starter-keyvault-secrets örneklere bakın.