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 maSystemEnvironmentPropertySource
,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ładziekey-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. |
- Zobacz Autoryzuj dostęp za pomocą identyfikatora Entra firmy Microsoft, aby upewnić się, że podmiot zabezpieczeń otrzymał wystarczające uprawnienia dostępu do wpisów tajnych usługi Azure Key Vault.
- Jeśli typowe właściwości, takie jak
client
,credential
,profile
,proxy
,retry
nie są skonfigurowane wspring.cloud.azure.keyvault.secret.property-sources[].xxx
,spring.cloud.azure.xxx
zostaną użyte. Aby uzyskać więcej informacji na temat tych typowych właściwości, zobacz konfiguracji platformy Azure Spring Cloud. - Aby uzyskać więcej informacji na temat zagnieżdżonych właściwości, zobacz Właściwości konfiguracji platformy Azure platformy Spring Cloud.
Próbki
Zobacz przykłady spring-cloud-azure-starter-keyvault-secrets w witrynie GitHub.