Подключение Azure Spring Apps к Key Vault с помощью управляемых удостоверений
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья применима к: ✔️ Java ❌ C#
В этой статье показано, как создать управляемое удостоверение, назначаемое системой или назначаемое пользователем, для приложения, развернутого в Azure Spring Apps, и использовать его для доступа к Azure Key Vault.
В Azure Key Vault можно безопасно хранить токены, пароли, сертификаты, ключи API и другие секреты для приложения, а также контролировать доступ к этой информации. Вы можете создать управляемое удостоверение в идентификаторе Microsoft Entra и пройти проверку подлинности в любой службе, поддерживающей проверку подлинности Microsoft Entra, включая Key Vault, без необходимости отображать учетные данные в коде.
В следующем видео описано, как управлять секретами с помощью Azure Key Vault.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Если вы развертываете экземпляр плана Azure Spring Apps Enterprise впервые в целевой подписке, см. раздел "Требования" плана Enterprise в Azure Marketplace.
- Azure CLI версии 2.55.0 или более поздней.
- Подписка Azure. Если у вас еще нет подписки, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Azure CLI версии 2.55.0 или более поздней.
Укажите имена для каждого ресурса
Создайте переменные для хранения имен ресурсов с помощью следующих команд. Обязательно замените заполнители своими значениями.
- Управляемое удостоверение, назначаемое системой
- Управляемое удостоверение, назначаемое пользователем
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 , как показано в следующем примере:
Внимание
Каждый 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
Примечание.
Для управляемого удостоверения, назначаемого системой, используйте az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
для удаления доступа для приложения после отключения управляемого удостоверения, назначаемого системой.
Создание примера приложения Spring Boot с помощью стартера Spring Boot
Это приложение имеет доступ к получению секретов из Azure Key Vault. Используйте начальный пример Spring Boot для секретов Azure Key Vault. Azure Key Vault добавляется в качестве экземпляра PropertySource Spring. Секреты, хранимые в Azure Key Vault, можно легко получить и использовать как любое внешнее свойство конфигурации, например свойства в файлах.
Используйте следующую команду, чтобы создать пример проекта на основе
start.spring.io
с помощью начального примера Spring для Azure Key Vault.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 -
Определите Key Vault в приложении.
cd springapp vim src/main/resources/application.properties
Чтобы использовать управляемое удостоверение для приложения, развернутого в 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
Примечание.
Необходимо добавить URL-адрес хранилища ключей в файл application.properties , как показано ранее. В противном случае URL-адрес хранилища ключей не будет использоваться во время выполнения.
Обновите 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>
Используйте следующую команду для развертывания приложения в Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
Используйте следующую команду для развертывания приложения в Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
Чтобы протестировать приложение, получите доступ к общедоступной конечной точке или тестовой конечной точке, выполнив следующую команду:
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
Следующее сообщение возвращается в тексте ответа:
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;
Очистка ресурсов
Используйте следующую команду, чтобы удалить всю группу ресурсов, включая только что созданный экземпляр службы:
az group delete --name ${RESOURCE_GROUP} --yes
Следующие шаги
- Как получить доступ к BLOB-объекту службы хранилища с помощью управляемого удостоверения в Azure Spring Apps
- Включение управляемого удостоверения, назначаемого системой для приложений в Azure Spring Apps
- Что такое управляемые удостоверения для ресурсов Azure?
- Проверка подлинности Azure Spring Apps с использованием Key Vault в GitHub Actions