Autenticación de Azure Spring Apps con Azure Key Vault en Acciones de GitHub

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

Este artículo se aplica a: ✔️ Java ✔️ C#

La información de este artículo puede ponerse en práctica en: ✔️ Básico o Estándar ✔️ Enterprise

En este artículo se muestra cómo se usa Key Vault con un flujo de trabajo de CI/CD para Azure Spring Apps con Acciones de GitHub.

Key Vault es un lugar seguro para almacenar claves. Los usuarios empresariales deben almacenar las credenciales de los entornos de CI/CD en un ámbito que controlen. La clave para obtener las credenciales en Key Vault se debe limitar al ámbito de los recursos. Solo tiene acceso al ámbito de Key Vault, no a todo el ámbito de Azure. Es como una llave que solo puede abrir una caja fuerte, no una llave maestra que puede abrir todas las puertas de un edificio. Es una forma de obtener una clave con otra clave, lo que es útil en un flujo de trabajo de CI/CD.

Generación de una credencial

Para generar una clave para acceder a Key Vault, ejecute el comando siguiente en el equipo local:

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

El ámbito especificado por el parámetro --scopes limita el acceso de la clave al recurso. Solo puede acceder a la caja fuerte.

Con 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/"
}

Luego, guarde los resultados en secrets de GitHub, como se describe en Autenticación y configuración de un repositorio de GitHub con Azure.

Incorporación de directivas de acceso a la credencial

La credencial que ha creado anteriormente solo puede obtener información general sobre Key Vault, no sobre el contenido que almacena. Para obtener los secretos almacenados en Key Vault, es preciso establecer directivas de acceso para la credencial.

Vaya al panel Key Vault en Azure Portal, seleccione el menú Control de acceso y abra la pestaña Asignaciones de roles. Seleccione Aplicaciones en Tipo y This resource en ámbito. Debería ver la credencial que ha creado en el paso anterior:

Captura de pantalla de Azure Portal que muestra la página Control de acceso con la pestaña Asignaciones de roles resaltada.

Copie el nombre de la credencial, por ejemplo, azure-cli-2020-01-19-04-39-02. Abra el menú Directivas de acceso y, a continuación, seleccione el vínculo Agregar directiva de acceso. Seleccione Secret Management en Plantilla y, después, seleccione Entidad de seguridad. Pegue el nombre de la credencial en el cuadro de entrada Entidad de seguridad/Seleccionar:

Captura de pantalla de Azure Portal que muestra la página Agregar directiva de acceso con el panel Entidad de seguridad abierto.

Seleccione el botón Agregar en el cuadro de diálogo Agregar directiva de acceso y, después, seleccione Guardar.

Generación de una credencial de Azure de ámbito completo

Esta es la llave maestra que abre todas las puertas del edificio. El procedimiento es similar al paso anterior, pero aquí cambiamos el ámbito para generar la llave maestra:

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

Una vez más, 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 la cadena JSON. Vuelva al panel de Key Vault. Abra el menú Secretos y, después, seleccione el botón Generate/Import (Generar o importar). Escriba el nombre del secreto, como AZURE-CREDENTIALS-FOR-SPRING. Pegue la cadena de la credencial JSON en el cuadro de entrada Valor. Es posible que observe que el cuadro de entrada Valor es un campo de texto de una línea, no un área de texto de varias líneas. Puede pegar la cadena JSON completa ahí.

Captura de pantalla de Azure Portal que muestra la página Crear un secreto.

Combinación de credenciales en Acciones de GitHub

Establezca las credenciales que se usan cuando se ejecuta la canalización CI/CD:

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

Pasos siguientes