Condividi tramite


Autenticare App Spring di Azure con Azure Key Vault in GitHub Actions

Nota

I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.

Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.

Questo articolo si applica a: ✔️ Java ✔️ C#

Questo articolo si applica a: ✔️ Basic/Standard ✔️ Enterprise

Questo articolo illustra come usare Key Vault con un flusso di lavoro CI/CD per Azure Spring Apps con GitHub Actions.

L'insieme di credenziali delle chiavi è un luogo sicuro per archiviare le chiavi. Gli utenti aziendali devono archiviare le credenziali per gli ambienti CI/CD nell'ambito che controllano. La chiave per ottenere le credenziali nell'insieme di credenziali delle chiavi deve essere limitata all'ambito delle risorse. Ha accesso solo all'ambito dell'insieme di credenziali delle chiavi, non all'intero ambito di Azure. È come una chiave che può aprire solo una casella forte non una chiave master che può aprire tutte le porte in un edificio. È un modo per ottenere una chiave con un'altra chiave, utile in un flusso di lavoro CICD.

Generare credenziali

Per generare una chiave per accedere all'insieme di credenziali delle chiavi, eseguire il comando seguente nel computer locale:

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

L'ambito specificato dal --scopes parametro limita l'accesso della chiave alla risorsa. Può accedere solo alla casella complessa.

Con i risultati:

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

Salvare quindi i risultati in segreti GitHub come descritto in Configurare il repository GitHub ed eseguire l'autenticazione con Azure.

Aggiungere criteri di accesso per le credenziali

Le credenziali create in precedenza possono ottenere solo informazioni generali sull'insieme di credenziali delle chiavi, non sul contenuto archiviato. Per ottenere i segreti archiviati nell'insieme di credenziali delle chiavi, è necessario impostare i criteri di accesso per le credenziali.

Passare al dashboard di Key Vault in portale di Azure, selezionare il menu Controllo di accesso, quindi aprire la scheda Assegnazioni di ruolo. Selezionare App per Tipo e This resource per ambito. Le credenziali create nel passaggio precedente dovrebbero essere visualizzate:

Screenshot della portale di Azure che mostra la pagina Controllo di accesso con la scheda Assegnazioni di ruolo evidenziata.

Copiare il nome delle credenziali, azure-cli-2020-01-19-04-39-02ad esempio . Aprire il menu Criteri di accesso , quindi selezionare il collegamento Aggiungi criteri di accesso. Selezionare Template (ModelloSecret Management) e quindi Principal (Entità). Incollare il nome della credenziale nella casella di input Principal/Select (Seleziona input):

Screenshot del portale di Azure che mostra la pagina Aggiungi criteri di accesso con il riquadro Entità aperto.

Selezionare il pulsante Aggiungi nella finestra di dialogo Aggiungi criteri di accesso e quindi selezionare Salva.

Generare credenziali di Azure con ambito completo

Questa è la chiave master per aprire tutte le porte dell'edificio. La procedura è simile al passaggio precedente, ma qui si modifica l'ambito per generare la chiave master:

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

Anche in questo caso, risultati:

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

Copiare l'intera stringa JSON. Tornare al dashboard di Key Vault . Aprire il menu Segreti , quindi selezionare il pulsante Genera/Importa . Immettere il nome del segreto, ad esempio AZURE-CREDENTIALS-FOR-SPRING. Incollare la stringa delle credenziali JSON nella casella Input Valore . È possibile notare che la casella di input del valore è un campo di testo a riga singola, anziché un'area di testo a più righe. È possibile incollare la stringa JSON completa.

Screenshot del portale di Azure che mostra la pagina Crea un segreto.

Combinare le credenziali in GitHub Actions

Impostare le credenziali usate quando viene eseguita la pipeline CICD:

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

Passaggi successivi