Conectar os Aplicativos Spring do Azure ao Key Vault usando as identidades gerenciadas
Observação
Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.
O plano consumo e dedicado Standard 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 mais informações, confira Migrar o plano dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.
Esse artigo se aplica a:✅ Java ❎ C#
Este artigo mostra como criar uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo implantado nos Aplicativos Spring do Azure e usá-la para acessar o Azure Key Vault.
O Azure Key Vault pode ser usado para armazenar com segurança e controlar firmemente o acesso a tokens, senhas, certificados, chaves de API e outros segredos para o aplicativo. Você pode criar uma identidade gerenciada no Microsoft Entra ID e autenticar-se em qualquer serviço que dê suporte à autenticação do Microsoft Entra, incluindo o Key Vault, sem precisar exibir as credenciais no seu código.
O vídeo a seguir descreve como gerenciar segredos usando Azure Key Vault.
Pré-requisitos
- Uma assinatura do Azure. Caso não tenha uma assinatura, crie uma conta gratuita antes de começar.
- Se você estiver implantando a instância do plano Enterprise do Aplicativos Spring do Azure pela primeira vez na assinatura de destino, confira a seção Requisitos do plano Enterprise no Azure Marketplace.
- CLI do Azure, versão 2.55.0 ou posterior.
- Uma assinatura do Azure. Caso não tenha uma assinatura, crie uma conta gratuita antes de começar.
- CLI do Azure, versão 2.55.0 ou posterior.
Fornecer nomes para cada recurso
Crie variáveis para manter os nomes dos recursos usando os comandos a seguir. Substitua os espaços reservados pelos seus 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 contêiner lógico no qual os recursos do Azure são implantados e gerenciados. 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 Key Vault
Para criar um Key Vault, use o comando az keyvault create, conforme mostrado no exemplo a seguir:
Importante
Cada Key Vault deve ter um nome exclusivo.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
Use o comando a seguir para mostrar o URL do aplicativo e, em seguida, anote o URL retornado, 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 Key Vault 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 aplicativo e serviço do Azure Spring Apps
Depois de instalar todas as extensões correspondentes, use o comando a seguir para criar uma instância dos Aplicativos Spring do Azure:
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 pelo sistema, conforme solicitado pelo parâmetro --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}
O exemplo a seguir cria um aplicativo nomeado springapp
com uma identidade gerenciada atribuída ao sistema, conforme solicitado pelo parâmetro --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)
Permitir ao aplicativo acesso ao Key Vault
Use o seguinte comando para permitir que o aplicativo tenha o acesso apropriado ao Key Vault:
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
Observação
Para a identidade gerenciada atribuída pelo sistema, use az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
para remover o acesso para seu aplicativo depois que a identidade gerenciada atribuída pelo sistema estiver desabilitada.
Criar um aplicativo Spring Boot de exemplo com o inicializador do Spring Boot
Este aplicativo tem acesso para obter segredos do Azure Key Vault. Use o inicializador do Spring Boot para segredos do Azure Key Vault. O Azure Key Vault é adicionado como uma instância do PropertySource do Spring. Os segredos armazenados no Azure Key Vault podem ser acessados e usados de maneira conveniente como qualquer propriedade de configuração externa, como propriedades em arquivos.
Use o comando a seguir para gerar um projeto de exemplo de
start.spring.io
com o inicializador do Spring do 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 -
Especifique o Key Vault no aplicativo.
cd springapp vim src/main/resources/application.properties
Para usar a identidade gerenciada para um aplicativo implantado aos Aplicativos Spring do Azure, adicione propriedades com o conteúdo a seguir 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
Observação
Você precisa adicionar a URL do cofre de chaves no arquivo application.properties, conforme mostrado anteriormente. Caso contrário, a URL do cofre de chaves pode não ser capturada durante o runtime.
Atualize src/main/java/com/example/demo/DemoApplication.java com o exemplo de código a seguir. Esse código recupera a cadeia de conexão do 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)); } }
Se você abrir o arquivo pom.xml, poderá ver a dependência
spring-cloud-azure-starter-keyvault
, 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 nos Aplicativos Spring do Azure:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
Use o seguinte comando para implantar seu aplicativo nos Aplicativos Spring do Azure:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
Para testar o aplicativo, acesse o ponto de extremidade público ou o teste de ponto de extremidade 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;
.
Limpar os 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óximas etapas
- Como acessar o blob de armazenamento com uma identidade gerenciada no Azure Spring Apps
- Habilitar a identidade gerenciada atribuída pelo sistema para aplicativos nos Aplicativos Spring do Azure
- O que são identidades gerenciadas para recursos do Azure?
- Autenticar o Azure Spring Apps com o Key Vault no GitHub Actions