Partilhar via


Conectar o Azure Spring Apps ao Key Vault usando identidades gerenciadas

Nota

Azure Spring Apps é o novo nome para o serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns lugares por um tempo enquanto trabalhamos para atualizar ativos, como capturas de tela, vídeos e diagramas.

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.
  • Uma subscrição 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 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.

  1. 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 -
    
  2. Especifique o Cofre da Chave no seu aplicativo.

    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
    

    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.

  4. 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 dependência, conforme mostrado no exemplo a spring-cloud-azure-starter-keyvault 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;.

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