Compartilhar via


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

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.

  1. 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 -
    
  2. Especifique o Key Vault no aplicativo.

    cd springapp
    vim src/main/resources/application.properties
    
  3. 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.

  4. 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>
    
  1. 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
    
  1. 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
    
  1. 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