Partilhar via


Conectar o Azure Spring Apps ao Key Vault usando identidades gerenciadas

Note

Os planos Basic, Standarde Enterprise entraram em um período de aposentadoria em 17 de março de 2025. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

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.


Prerequisites

  • Uma assinatura do Azure. Se você não tiver uma assinatura, crie uma conta gratuita antes de começar.
  • CLI do Azure, versão 2.55.0 ou superior.
  • Uma assinatura do Azure. Se você não tiver uma assinatura, crie uma conta gratuita antes de começar.
  • 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 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 Cofre da Chave

Para criar um Cofre de Chaves, use o comando az keyvault create , conforme mostrado no exemplo a seguir:

Important

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

Note

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. Utilize 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.

  1. Use o seguinte comando para gerar um projeto de exemplo a partir de start.spring.io com 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 -
    
  2. Especifique o Cofre de Chaves na sua aplicação.

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

    Note

    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.

  4. Atualize src/main/java/com/example/demo/DemoApplication.java com o exemplo de código a seguir. Este código recupera a string 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 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>
    
  1. 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
    
  1. 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
    
  1. 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;.

Limpeza de 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