Управление секретами Spring Cloud Azure

Эта статья относится к: ✔️ версия 4.14.0 ✔️ версии 5.8.0

Конструкция PropertySource Spring Cloud Azure, содержащая секреты, хранящиеся в секретах 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-]. Дополнительные сведения см. вразделе "Имя хранилища" и "Имя объекта" в разделе "Ключи 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-urlspring.datasource.url получение значения свойства, но spring.datasource-url не поддерживается. Сведения об этом случае см. в разделе "Использование заполнителей свойств".

Использование заполнителей свойств

Например, предположим, что вы задаете это свойство в файле 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, который вступит в силу приоритетом.

  • Если в списке PropertySource нет SystemEnvironmentPropertySource , KeyVaultPropertySource то будет иметь наивысший приоритет.
  • Если в списке PropertySource имеется SystemEnvironmentPropertySource более высокий приоритет, SystemEnvironmentPropertySource чем KeyVaultPropertySource. Это означает, что можно использовать переменную среды для переопределения значения секрета Key Vault в приложении.
  • Если в списке PropertySource имеется несколько keyVaultPropertySource, то порядок определения является приоритетом. Рассмотрим приведенный выше пример, как пример, key-vault-property-souece-1 имеет более высокий приоритет, чем key-vault-property-souece-2.

Все настраиваемые свойства

Свойство Значение по умолчанию Description
spring.cloud.azure.keyvault.secret.property-source-enabled true Следует ли включить источник свойств 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 false Учитывает ли секретные ключи регистр.
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 Повторите связанные свойства.
  • Чтобы убедиться, что субъекту безопасности предоставлено достаточное разрешение на доступ к секретам Azure Key Vault, см. в разделе "Авторизация доступа с помощью идентификатора Microsoft Entra ID".
  • Если будут использоваться общие свойства, credentialнапример client, profile, retryproxyне настроеныspring.cloud.azure.keyvault.secret.property-sources[].xxxspring.cloud.azure.xxx. Дополнительные сведения об этих общих свойствах см . в конфигурации Spring Cloud Azure.
  • Дополнительные сведения о вложенных свойствах см. в свойствах конфигурации Azure Spring Cloud.

Примеры

См. примеры spring-cloud-azure-starter-keyvault-secret на сайте GitHub.