Udostępnij za pośrednictwem


Zarządzanie wpisami tajnymi platformy Azure w usłudze Spring Cloud

Ten artykuł dotyczy:✅ w wersji 4.19.0 ✅ w wersji 5.19.0

Konstrukcja platformy Azure spring Cloud PropertySource, która przechowuje wpisy tajne przechowywane w wpisach tajnych usługi Azure Key Vault.

Konfiguracja zależności

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

Napiwek

Udostępniamy również spring-cloud-azure-starter-keyvault do obsługi wszystkich funkcji usługi Key Vault. Jeśli zdecydujesz się go użyć, spring.cloud.azure.keyvault.enable jest właściwością do skonfigurowania, a wartość domyślna to true. Następnie możesz użyć spring.cloud.azure.keyvault.<keyvault-service>.enable, aby wyłączyć niepotrzebne usługi.

Podstawowe użycie

Jeśli chcesz uwierzytelnić się za pomocą client-id i client-secret, wymagane są następujące właściwości:

Właściwości konfiguracji

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}

Kod Java

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

Zaawansowane użycie

Znaki specjalne w nazwie właściwości

Nazwy wpisów tajnych usługi Key Vault obsługują tylko znaki w [0-9a-zA-Z-]. Aby uzyskać więcej informacji, zobacz sekcjęVault-name and Object-name (Nazwa obiektu i nazwa obiektu) Azure Key Vault keys, secrets and certificates overview (Omówienie kluczy, wpisów tajnych i certyfikatów). Jeśli nazwa właściwości zawiera inne znaki, możesz użyć obejść opisanych w poniższych sekcjach.

Użyj - zamiast . w nazwach wpisów tajnych

. nie jest obsługiwana w nazwach wpisów tajnych. Jeśli aplikacja ma nazwę właściwości zawierającą ., taką jak spring.datasource.url, zastąp .- podczas zapisywania wpisu tajnego w usłudze Azure Key Vault. Na przykład zapisz spring-datasource-url w usłudze Azure Key Vault. W aplikacji nadal można użyć spring.datasource.url, aby pobrać wartość właściwości.

Nuta

Ta metoda nie może spełnić wymagań, takich jak spring.datasource-url. Podczas zapisywania spring-datasource-url w usłudze Key Vault obsługiwana jest tylko spring.datasource.url i spring-datasource-url w celu pobrania wartości właściwości, ale spring.datasource-url nie jest obsługiwana. Aby obsłużyć ten przypadek, zobacz sekcję Użyj symboli zastępczych właściwości.

Używanie symboli zastępczych właściwości

Załóżmy na przykład, że ustawiasz tę właściwość w pliku application.properties:

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

Aplikacja pobierze nazwę klucza propertyWithoutSpecialCharacter i przypisze jej wartość do property.with.special.character__.

Uwzględniana wielkość liter

Aby włączyć tryb uwzględniający wielkość liter, można ustawić następującą właściwość:

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

Nie pobieraj wszystkich wpisów tajnych w usłudze Key Vault

Jeśli zapisano 1000 wpisów tajnych w usłudze Key Vault i chcesz użyć tylko 3 z nich. Listę 3 nazw wpisów tajnych można wyświetlić, spring.cloud.azure.keyvault.secret.property-sources[].secret-keys.

Ustawianie interwału odświeżania

Domyślnie wpisy tajne w KeyVaultPropertySource będą odświeżane co 30 minut. Czas można skonfigurować przez spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval. Na przykład: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m oznacza odświeżanie co 60 minut. Ustaw wartość 0, aby wyłączyć automatyczne odświeżanie.

Priorytet właściwościSource

Jeśli klucz istnieje w wielu obiektach PropertySources, co zacznie obowiązywać, jest ustalane przez priorytet.

  • Jeśli na liście PropertySource nie ma SystemEnvironmentPropertySource, KeyVaultPropertySource będzie mieć najwyższy priorytet.
  • Jeśli na liście PropertySource znajduje się SystemEnvironmentPropertySource, SystemEnvironmentPropertySource mają wyższy priorytet niż KeyVaultPropertySource, co oznacza, że możesz użyć zmiennej środowiskowej, aby zastąpić wartość wpisu tajnego usługi Key Vault w aplikacji.
  • Jeśli na liście PropertySource znajduje się wiele źródeł właściwości magazynu kluczy, kolejność definicji jest kolejnością priorytetu. W powyższym przykładzie key-vault-property-source-1 ma wyższy priorytet niż key-vault-property-source-2.

Konfigurowanie poświadczeń tokenu dla źródła właściwości usługi Key Vault

Jeśli musisz użyć określonego poświadczenia tokenu dla usługi Key Vault PropertySource, możesz zarejestrować fasolę TokenCredential w ConfigurableBootstrapContext dla KeyVaultEnvironmentPostProcessor, ta funkcja jest obsługiwana w usłudze Spring Cloud Azure 5.19.0. Oto przykład użycia AzureCliCredential:

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

Wszystkie konfigurowalne właściwości

Własność Wartość domyślna Opis
spring.cloud.azure.keyvault.secret.property-source-enabled prawdziwy Czy włączyć źródło właściwości usługi Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].name Nazwa tego źródła właściwości.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Punkt końcowy usługi Azure Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].wielkość liter fałszywy Określa, czy klucze tajne są uwzględniane w wielkości liter.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Klucze tajne obsługiwane dla tego źródła właściwości. Wszystkie klucze są pobierane, jeśli brakuje tej właściwości.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30 m Interwał czasu odświeżania wszystkich wpisów tajnych usługi Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Wersja usługi tajnej używana podczas tworzenia żądań interfejsu API.
spring.cloud.azure.keyvault.secret.property-sources[].client Właściwości powiązane z klientem.
spring.cloud.azure.keyvault.secret.property-sources[].credential Właściwości powiązane z poświadczeniami.
spring.cloud.azure.keyvault.secret.property-sources[].profile Właściwości powiązane z profilem.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Właściwości powiązane z serwerem proxy.
spring.cloud.azure.keyvault.secret.property-sources[].ponów próbę Ponów próbę powiązanych właściwości.

Próbki

Zobacz przykłady spring-cloud-azure-starter-keyvault-secrets w witrynie GitHub.