Autenticar o Azure Spring Apps com o Azure Key Vault no GitHub Actions

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 Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano Standard de consumo 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 Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo aplica-se a: ✔️ Java ✔️ C#

Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo mostra como usar o Key Vault com um fluxo de trabalho de CI/CD para Azure Spring Apps com GitHub Actions.

O Key Vault é um local seguro para armazenar chaves. Os usuários corporativos precisam armazenar credenciais para ambientes de CI/CD no escopo que controlam. A chave para obter credenciais no cofre de chaves deve ser limitada ao escopo do recurso. Ela tem acesso apenas ao escopo do cofre de chaves, não ao escopo do Azure inteiro. É como uma chave que só pode abrir uma caixa forte, e não uma chave mestra, que pode abrir todas as portas em um edifício. É uma maneira de obter uma chave com outra chave, o que é útil em um fluxo de trabalho de CI/CD.

Gerar credencial

Para gerar uma chave para acessar o cofre de chaves, execute o comando abaixo no computador local:

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT> --json-auth

O escopo especificado pelo parâmetro --scopes limita o acesso à chave para o recurso. Ele só pode acessar a caixa forte.

Com resultados:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

Em seguida, salve os resultados em segredos do GitHub conforme descrito em Configurar seu repositório do GitHub e autenticar com o Azure.

Adicionar políticas de acesso para a credencial

A credencial que você criou acima pode obter apenas informações gerais sobre o Key Vault, não sobre o conteúdo que ele armazena. Para obter os segredos armazenados no Key Vault, você precisa definir políticas de acesso para a credencial.

Vá para o painel do Key Vault no portal do Azure, selecione no menu Controle de acesso e abra a guia Atribuições de função. Escolha Aplicativos para o Tipo e This resource para o Escopo. Você deve ver a credencial criada na etapa anterior:

Captura de tela do portal do Azure que mostra a página Controle de acesso com a guia Atribuições de função realçada.

Copie o nome da credencial, por exemplo, azure-cli-2020-01-19-04-39-02. Abra o menu Políticas de acesso e depois selecione o link Adicionar política de acesso. Escolha Secret Management para Modeloe, em seguida, escolha Entidade de segurança. Cole o nome da credencial na caixa de entrada Principal/ Selecionar:

Captura de tela do portal do Azure que mostra a página Adicionar política de acesso com o painel Entidade de segurança aberto.

Selecione o botão Adicionar na caixa de diálogo Adicionar política de acesso e depois Salvar.

Gerar credencial do Azure de escopo completo

Essa é a chave mestra para abrir todas as portas na compilação. O procedimento é semelhante à etapa anterior, mas aqui alteramos o escopo para gerar a chave mestra:

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID> --json-auth

Novamente, os resultados:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

Copie toda a cadeia de caracteres JSON. Volte para o painel Key Vault. Abra o menu Segredos e selecione o botão Gerar/Importar. Insira o nome do segredo, como AZURE-CREDENTIALS-FOR-SPRING. Cole a cadeia de caracteres da credencial JSON na caixa de entrada Valor. Você pode notar que a caixa de entrada "Valor" é um campo de texto de uma linha, em vez de uma área de texto de várias linhas. Você pode colar a cadeia de caracteres JSON completa lá.

Captura de tela do portal do Azure que mostra a página Criar um segredo.

Combinar credenciais no GitHub Actions

Defina as credenciais usadas quando o pipeline de CI/CD for executado:

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}           # Strong box key you generated in the first step
    - uses: Azure/get-keyvault-secrets@v1.0
      with:
        keyvault: "<Your Key Vault Name>"
        secrets: "AZURE-CREDENTIALS-FOR-SPRING"           # Master key to open all doors in the building
      id: keyvaultaction
    - uses: azure/login@v1
      with:
        creds: ${{ steps.keyvaultaction.outputs.AZURE-CREDENTIALS-FOR-SPRING }}
    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
        azcliversion: 2.0.75
        inlineScript: |
          az extension add --name spring             # Spring CLI commands from here
          az spring list

Próximas etapas