Conectar o Azure Spring Apps ao Key Vault usando identidades gerenciadas
Nota
Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.
O plano de consumo padrão e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.
Este artigo aplica-se a:✅ Java ❎ C#
Este artigo mostra como criar uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo implantado no Azure Spring Apps e usá-la para acessar o Azure Key Vault.
O Azure Key Vault pode ser usado para armazenar com segurança e controlar rigorosamente o acesso a tokens, senhas, certificados, chaves de API e outros segredos para seu aplicativo. Pode criar uma identidade gerida no Microsoft Entra ID e autenticar-se em qualquer serviço que suporte a autenticação do Microsoft Entra, incluindo o Cofre da Chave, sem ter de apresentar credenciais no seu código.
O vídeo a seguir descreve como gerenciar segredos usando o Cofre da Chave do Azure.
Pré-requisitos
- Uma subscrição do Azure. Se você não tiver uma assinatura, crie uma conta gratuita antes de começar.
- Se você estiver implantando uma instância do plano do Azure Spring Apps Enterprise pela primeira vez na assinatura de destino, consulte a seção Requisitos do plano Enterprise no Azure Marketplace.
- CLI do Azure, versão 2.55.0 ou superior.
Fornecer nomes para cada recurso
Crie variáveis para manter os nomes dos recursos usando os comandos a seguir. Certifique-se de substituir os espaços reservados pelos seus próprios valores.
export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>
Criar um grupo de recursos
Um grupo de recursos é um contentor lógico no qual os recursos do Azure são implementados e geridos. Crie um grupo de recursos para conter o Key Vault e o Spring Cloud usando o comando az group create , conforme mostrado no exemplo a seguir:
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
Configurar o Cofre da Chave
Para criar um Cofre de Chaves, use o comando az keyvault create , conforme mostrado no exemplo a seguir:
Importante
Cada Cofre de Chaves deve ter um nome exclusivo.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
Use o comando a seguir para mostrar a URL do aplicativo e, em seguida, anote a URL retornada, que está no formato https://${KEY_VAULT}.vault.azure.net
. Use esse valor na etapa a seguir.
az keyvault show \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT} \
--query properties.vaultUri --output tsv
Agora você pode colocar um segredo em seu Cofre de Chaves usando o comando az keyvault secret set , conforme mostrado no exemplo a seguir:
az keyvault secret set \
--vault-name ${KEY_VAULT} \
--name "connectionString" \
--value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
Criar serviço e aplicativo do Azure Spring Apps
Depois de instalar todas as extensões correspondentes, use o seguinte comando para criar uma instância do Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--sku Enterprise \
--name ${SPRING_APPS}
O exemplo a seguir cria o aplicativo com uma identidade gerenciada atribuída ao --system-assigned
sistema, conforme solicitado pelo parâmetro:
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}
O exemplo a seguir cria um aplicativo nomeado springapp
com uma identidade gerenciada atribuída ao --system-assigned
sistema, conforme solicitado pelo parâmetro.
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)
Conceda ao seu aplicativo acesso ao Cofre da Chave
Use o seguinte comando para conceder acesso adequado no Cofre da Chave para seu aplicativo:
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
Nota
Para identidade gerenciada atribuída ao sistema, use az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
para remover o acesso ao seu aplicativo depois que a identidade gerenciada atribuída pelo sistema for desabilitada.
Crie um aplicativo Spring Boot de exemplo com o Spring Boot starter
Este aplicativo tem acesso para obter segredos do Azure Key Vault. Use o Azure Key Vault Secrets Spring boot starter. O Azure Key Vault é adicionado como uma instância do Spring PropertySource. Os segredos armazenados no Cofre da Chave do Azure podem ser convenientemente acessados e usados como qualquer propriedade de configuração externalizada, como propriedades em arquivos.
Use o comando a seguir para gerar um projeto de exemplo com
start.spring.io
o 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 -
Especifique o Cofre da Chave no seu aplicativo.
cd springapp vim src/main/resources/application.properties
Para usar a identidade gerenciada para um aplicativo implantado no Azure Spring Apps, adicione propriedades com o seguinte conteúdo ao arquivo 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
Nota
Você deve adicionar o URL do cofre da chave no arquivo application.properties, conforme mostrado anteriormente. Caso contrário, a URL do cofre de chaves pode não ser capturada durante o tempo de execução.
Atualize src/main/java/com/example/demo/DemoApplication.java com o exemplo de código a seguir. Este código recupera a cadeia de conexão do Cofre da Chave.
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)); } }
Se você abrir o arquivo pom.xml , poderá ver a
spring-cloud-azure-starter-keyvault
dependência, conforme mostrado no exemplo a seguir:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Use o seguinte comando para implantar seu aplicativo no Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
Use o seguinte comando para implantar seu aplicativo no Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
Para testar seu aplicativo, acesse o ponto de extremidade público ou o ponto de extremidade de teste usando o seguinte comando:
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
A seguinte mensagem é retornada no corpo da resposta:
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;
.
Clean up resources (Limpar recursos)
Use o seguinte comando para excluir todo o grupo de recursos, incluindo a instância de serviço recém-criada:
az group delete --name ${RESOURCE_GROUP} --yes
Próximos passos
- Como acessar o blob de armazenamento com identidade gerenciada no Azure Spring Apps
- Habilitar a identidade gerenciada atribuída pelo sistema para aplicativos no Azure Spring Apps
- O que são identidades geridas para recursos do Azure?
- Autenticar aplicativos do Azure Spring com o Key Vault em ações do GitHub