Поделиться через


Управление секретами 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.