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


Подключение Azure Spring Apps к Key Vault с помощью управляемых удостоверений

Note

Планы "Базовый", "Стандартный" и "Корпоративный" вступили в пенсионный период 17 марта 2025 года. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Эта статья относится к:✅ Java ❎ C#

В этой статье показано, как создать управляемое удостоверение, назначаемое системой или назначаемое пользователем, для приложения, развернутого в Azure Spring Apps, и использовать его для доступа к Azure Key Vault.

Azure Key Vault можно использовать для безопасного хранения и жесткого контроля доступа к маркерам, паролям, сертификатам, ключам API и другим секретам приложения. Вы можете создать управляемое удостоверение в идентификаторе Microsoft Entra и пройти проверку подлинности в любой службе, поддерживающей проверку подлинности Microsoft Entra, включая Key Vault, без необходимости отображать учетные данные в коде.

В следующем видео описывается управление секретами с помощью Azure Key Vault.


Prerequisites

Укажите имена для каждого ресурса

Создайте переменные для хранения имен ресурсов с помощью следующих команд. Обязательно замените шаблонные элементы вашими значениями.

export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>

Создайте группу ресурсов

Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими. Создайте группу ресурсов, чтобы содержать Key Vault и Spring Cloud с помощью команды az group create , как показано в следующем примере:

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

Настройте ваш Key Vault

Чтобы создать Key Vault, используйте команду az keyvault create , как показано в следующем примере:

Important

Каждый Key Vault должен иметь уникальное имя.

az keyvault create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT}

Используйте следующую команду, чтобы отобразить URL-адрес приложения, а затем запишите возвращенный URL-адрес, который находится в формате https://${KEY_VAULT}.vault.azure.net. Используйте это значение на следующем шаге.

az keyvault show \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT} \
    --query properties.vaultUri --output tsv

Теперь вы можете поместить секрет в Key Vault с помощью команды az keyvault secret set , как показано в следующем примере:

az keyvault secret set \
    --vault-name ${KEY_VAULT} \
    --name "connectionString" \
    --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"

Создание службы и приложения Azure Spring Apps

После установки всех соответствующих расширений используйте следующую команду, чтобы создать экземпляр Azure Spring Apps:

az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --sku Enterprise \
    --name ${SPRING_APPS}

В следующем примере создается приложение с назначенным системой управляемым удостоверением, как указано в параметре --system-assigned.

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${SPRING_APPS}

В следующем примере создается приложение springapp с системой назначаемым управляемым удостоверением, как указано в параметре --system-assigned.

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --runtime-version Java_17 \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)

Предоставление приложению доступа к Key Vault

Используйте следующую команду, чтобы предоставить надлежащий доступ в Key Vault для приложения:

az keyvault set-policy \
    --name ${KEY_VAULT} \
    --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
    --secret-permissions set get list

Note

Для управляемого удостоверения, назначаемого системой, используйте az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} для удаления доступа для приложения после отключения управляемого удостоверения, назначаемого системой.

Создание примера приложения Spring Boot с помощью начального средства Spring Boot

Это приложение имеет доступ к получению секретов из Azure Key Vault. Используйте начальный модуль Azure Key Vault Secrets Starter для Spring Boot. Azure Key Vault добавляется в качестве экземпляра Spring PropertySource. К секретам, хранящимся в Azure Key Vault, можно легко получить доступ и использовать как любое внешнее свойство конфигурации, например свойства в файлах.

  1. Используйте следующую команду, чтобы создать пример проекта с start.spring.io помощью Azure Key Vault Spring Starter.

    curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
    
  2. Укажите Key Vault в приложении.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Чтобы использовать управляемое удостоверение для приложения, развернутого в Azure Spring Apps, добавьте свойства со следующим содержимым в файл src/main/resources/application.properties .

    spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url>
    spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
    

    Note

    Необходимо добавить URL-адрес хранилища ключей в файл application.properties , как показано ранее. В противном случае URL-адрес хранилища ключей может не быть записан во время выполнения.

  4. Обновите src/main/java/com/example/demo/DemoApplication.java с помощью следующего примера кода. Этот код извлекает строку подключения из Key Vault.

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication implements CommandLineRunner {
    
        @Value("${connectionString}")
        private String connectionString;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @GetMapping("get")
        public String get() {
            return connectionString;
        }
    
        public void run(String... args) throws Exception {
            System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
        }
    }
    

    Если открыть файлpom.xml , можно увидеть spring-cloud-azure-starter-keyvault зависимость, как показано в следующем примере:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Используйте следующую команду для развертывания приложения в Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Используйте следующую команду для развертывания приложения в Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path \
        --build-env BP_JVM_VERSION=17
    
  1. Чтобы протестировать приложение, перейдите к общедоступной конечной точке или тестовой конечной точке с помощью следующей команды:

    curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
    

    Следующее сообщение возвращается в тексте ответа: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;

Очистите ресурсы

Используйте следующую команду, чтобы удалить всю группу ресурсов, включая только что созданный экземпляр службы:

az group delete --name ${RESOURCE_GROUP} --yes

Дальнейшие шаги