Spring Cloud Azure titkos kódok kezelése

A Spring Cloud Azure PropertySource konstrukció, amely az Azure Key Vault Secrets szolgáltatásban tárolt titkokat tartalmazza.

Függőségek beállítása

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

Tipp

Emellett spring-cloud-azure-starter-keyvault biztosítunk a Key Vault összes funkciójának támogatásához. Ha úgy dönt, hogy használja, spring.cloud.azure.keyvault.enable a konfigurálni kívánt tulajdonság, és az alapértelmezett érték true. Ezután a spring.cloud.azure.keyvault.<keyvault-service>.enable használatával letilthatja a szükségtelen szolgáltatásokat.

Alapszintű használat

Ha client-id és client-secret használatával szeretne hitelesíteni, a következő tulajdonságokra van szükség:

Konfigurációs tulajdonságok

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-kód

@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);
    }
}

Haladó használat

Speciális karakterek a tulajdonságnévben

A Key Vault titkos kulcsnevei csak a [0-9a-zA-Z-]karaktereit támogatják. További információért lásd az Az Azure Key Vault kulcsainak, titkos kulcsainak és tanúsítványainak áttekintése című cikk Tárolónév és objektumnév szakaszát. Ha a tulajdonságnév más karaktereket is tartalmaz, az alábbi szakaszokban ismertetett kerülőmegoldásokat használhatja.

Titkos nevekben - helyett . használata

A(z) . nem támogatott a titoknevekben. Ha az alkalmazás olyan tulajdonságnévvel rendelkezik, amely .tartalmaz (például spring.datasource.url), cserélje le .- a titkos kód Azure Key Vaultban való mentésekor. Mentse például spring-datasource-url az Azure Key Vaultban. Az alkalmazásban továbbra is használhatja a spring.datasource.url a tulajdonságérték lekéréséhez.

Jegyzet

Ez a módszer nem felel meg egy olyan követelménynek, mint a spring.datasource-url. Ha a(z) spring-datasource-url elemet a Key Vaultban menti, a tulajdonságérték lekéréséhez csak a(z) spring.datasource.url és a(z) spring-datasource-url támogatott, de a(z) spring.datasource-url nem támogatott. Az eset kezeléséhez tekintse meg a Tulajdonsághelyőrzők használata szakaszt.

Tulajdonsághelyőrzők használata

Tegyük fel például, hogy ezt a tulajdonságot az application.properties fájlban állítja be:

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

Az alkalmazás megkap egy propertyWithoutSpecialCharacter kulcsnevet, és az értékét a(z) property.with.special.character__-hez rendeli.

Kis- és nagybetűk megkülönböztetése

A kis- és nagybetűk megkülönböztetése mód engedélyezéséhez a következő tulajdonságot állíthatja be:

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

Nem kérdezi le az összes titkos kódot a Key Vaultból

Ha 1000 titkos kulcsot tárolt a Key Vaultban, és csak 3 titkos kulcsot szeretne használni. A 3 titkos nevet a(z) spring.cloud.azure.keyvault.secret.property-sources[].secret-keys segítségével felsorolhatja.

Frissítési időköz beállítása

Alapértelmezés szerint a KeyVaultPropertySource titkos kulcsai 30 percenként frissülnek. Az idő beállítható a spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval segítségével. Például: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m 60 percenkénti frissítést jelent. Állítsa 0 értékre az automatikus frissítés letiltásához.

A PropertySource prioritása

Ha a kulcs több PropertySource-ban is létezik, hogy melyik érvényesül, azt a prioritás dönti el.

  • Ha nincs SystemEnvironmentPropertySource a PropertySource listában, akkor KeyVaultPropertySource lesz a legmagasabb prioritás.
  • Ha SystemEnvironmentPropertySource szerepel a PropertySource listában, akkor SystemEnvironmentPropertySource magasabb prioritással rendelkezik, mint KeyVaultPropertySource, ami azt jelenti, hogy egy környezeti változóval felülbírálhatja a Key Vault titkos kulcsértékét az alkalmazásban.
  • Ha a PropertySource listában több key vault tulajdonságforrás is szerepel, akkor a definíció sorrendje a prioritási sorrend. A fenti mintát példaként véve key-vault-property-source-1 nagyobb prioritással rendelkezik, mint key-vault-property-source-2.

Token-hitelesítő adatok konfigurálása a Key Vault tulajdonságforráshoz

Ha a Key Vault PropertySource-hoz egy megadott tokenhitelesítő adatot kell használnia, regisztrálhatja a TokenCredential beant a ConfigurableBootstrapContext-ben a(z) KeyVaultEnvironmentPostProcessor számára; ez a funkció a Spring Cloud Azure 5.16.0-s verziójától támogatott. Íme egy példa a AzureCliCredentialhasználatára:

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);
}

Minden konfigurálható tulajdonság

Ingatlan Alapértelmezett érték Leírás
spring.cloud.azure.keyvault.secret.property-source-enabled igaz A Key Vault tulajdonságforrásának engedélyezése.
spring.cloud.azure.keyvault.secret.property-sources[].name A tulajdonságforrás neve.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Azure Key Vault-végpont.
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive hamis A titkos kulcsok megkülönböztetik-e a kis- és nagybetűket.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Az ehhez a tulajdonságforráshoz támogatott titkos kulcsok. Ha ez a tulajdonság hiányzik, az összes kulcs lekérdezhető.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30m Az összes Key Vault-titkos kulcs frissítéséhez szükséges időintervallum.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Az API-kérések során használt titkosszolgáltatás-verzió.
spring.cloud.azure.keyvault.secret.property-sources[].client Ügyfélhez kapcsolódó tulajdonságok.
spring.cloud.azure.keyvault.secret.property-sources[].credential Hitelesítő adatokkal kapcsolatos tulajdonságok.
spring.cloud.azure.keyvault.secret.property-sources[].profile Profilhoz kapcsolódó tulajdonságok.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Proxyval kapcsolatos tulajdonságok.
spring.cloud.azure.keyvault.secret.property-sources[].retry Próbálkozzon újra a kapcsolódó tulajdonságokkal.

Minták

Tekintse meg a spring-cloud-azure-starter-keyvault-secrets GitHubon található mintákat .