Управление секретами Spring Cloud Azure
Эта статья относится к:✅ версии 4.19.0 ✅ версии 5.19.0
Конструкция Spring Cloud Azure PropertySource
, в которой хранятся секреты, хранящиеся в секретах Azure Key Vault.
Настройка зависимостей
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>
Кончик
Мы также предоставляем spring-cloud-azure-starter-keyvault
для поддержки всех функций Key Vault. Если вы решили использовать его, spring.cloud.azure.keyvault.enable
является свойством для настройки, а значение по умолчанию — true
. Затем можно использовать spring.cloud.azure.keyvault.<keyvault-service>.enable
для отключения ненужных служб.
Базовое использование
Если требуется пройти проверку подлинности по client-id
и client-secret
, требуются следующие свойства:
Свойства конфигурации
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
@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);
}
}
Расширенное использование
Специальные символы в имени свойства
Имена секретов Key Vault поддерживают только символы в [0-9a-zA-Z-]
. Дополнительные сведения см. в разделеVault-name и Object-name раздела ключей Azure Key Vault, секретов и сертификатов. Если имя свойства содержит другие символы, можно использовать обходные пути, описанные в следующих разделах.
Используйте -
вместо .
в именах секретов
.
не поддерживается в именах секретов. Если у приложения есть имя свойства, содержащее .
, например spring.datasource.url
, замените .
на -
при сохранении секрета в Azure Key Vault. Например, сохраните spring-datasource-url
в Azure Key Vault. В приложении можно по-прежнему использовать spring.datasource.url
для получения значения свойства.
Заметка
Этот метод не может удовлетворить требование, например spring.datasource-url
. При сохранении spring-datasource-url
в Key Vault поддерживается только spring.datasource.url
и spring-datasource-url
для получения значения свойства, но spring.datasource-url
не поддерживается. Сведения об этом случае см. в разделе Use Property Placeholders section.
Использование заполнителей свойств
Например, предположим, что вы задаете это свойство в файле application.properties:
property.with.special.character__=${propertyWithoutSpecialCharacter}
Приложение получит имя ключа propertyWithoutSpecialCharacter
и присвоит ему значение property.with.special.character__
.
Учет регистра
Чтобы включить режим с учетом регистра, можно задать следующее свойство:
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true
Не извлекает все секреты в Key Vault
Если вы храните 1000 секретов в Key Vault, и вы просто хотите использовать 3 из них. Вы можете указать 3 имена секретов, spring.cloud.azure.keyvault.secret.property-sources[].secret-keys
.
Настройка интервала обновления
По умолчанию секреты в KeyVaultPropertySource
будут обновляться каждые 30 минут. Время можно настроить spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval
. Например, spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m
означает обновление каждые 60 минут. Установите значение 0
, чтобы отключить автоматическое обновление.
Приоритет PropertySource
Если ключ существует в нескольких PropertySources, который вступит в силу приоритетом.
- Если в списке
SystemEnvironmentPropertySource
нетPropertySource
,KeyVaultPropertySource
будет иметь наивысший приоритет. - Если в списке
SystemEnvironmentPropertySource
естьPropertySource
,SystemEnvironmentPropertySource
имеет более высокий приоритет, чемKeyVaultPropertySource
. Это означает, что можно использовать переменную среды для переопределения значения секрета Key Vault в приложении. - Если в списке
PropertySource
есть несколько источников свойств хранилища ключей, то порядок определения является приоритетом. При принятии приведенного выше примераkey-vault-property-source-1
имеет более высокий приоритет, чемkey-vault-property-source-2
.
Настройка учетных данных маркера для источника свойств Key Vault
Если необходимо использовать указанные учетные данные маркера для Key Vault PropertySource
, можно зарегистрировать TokenCredential
bean в ConfigurableBootstrapContext
для KeyVaultEnvironmentPostProcessor
, эта функция поддерживается в Spring Cloud Azure 5.19.0. Ниже приведен пример использования 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);
}
Все настраиваемые свойства
Свойство | Значение по умолчанию | Описание |
---|---|---|
spring.cloud.azure.keyvault.secret.property-source-enabled | истинный | Следует ли включить источник свойств Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].name | Имя источника этого свойства. | |
spring.cloud.azure.keyvault.secret.property-sources[].endpoint | Конечная точка Azure Key Vault. | |
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive | ложный | Учитывает ли секретные ключи регистр. |
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys | Секретные ключи, поддерживаемые для этого источника свойств. Все ключи извлекаются, если это свойство отсутствует. | |
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval | 30 млн | Интервал времени для обновления всех секретов Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].service-version | Версия секретной службы, используемая при выполнении запросов API. | |
spring.cloud.azure.keyvault.secret.property-sources[].client | Свойства, связанные с клиентом. | |
spring.cloud.azure.keyvault.secret.property-sources[].credential | Свойства, связанные с учетными данными. | |
spring.cloud.azure.keyvault.secret.property-sources[].profile | Связанные свойства профиля. | |
spring.cloud.azure.keyvault.secret.property-sources[].proxy | Связанные с прокси-сервером свойства. | |
spring.cloud.azure.keyvault.secret.property-sources[].retry | Повторите связанные свойства. |
- Ознакомьтесь с авторизацией доступа с помощью идентификатора Microsoft Entra ID, чтобы убедиться, что субъект безопасности был предоставлен достаточный доступ к секретам Azure Key Vault.
- Если общие свойства, такие как
client
,credential
,profile
,proxy
,retry
не настроены вspring.cloud.azure.keyvault.secret.property-sources[].xxx
, будут использоватьсяspring.cloud.azure.xxx
. Дополнительные сведения об этих общих свойствах см. вконфигурации Azure Spring Cloud. - Дополнительные сведения о вложенных свойствах см. в разделе Свойства конфигурации Azure Spring Cloud.
Образцы
См. примеры spring-cloud-azure-starter-keyvault-secret на сайте GitHub.