Usare GitHub Actions per connettersi ad Azure

Informazioni su come usare un account di accesso di Azure con Azure PowerShell o l'interfaccia della riga di comando di Azure per interagire con le risorse di Azure.

Per usare Azure PowerShell o l'interfaccia della riga di comando di Azure in un flusso di lavoro di GitHub Actions, è necessario prima accedere con l'azione di accesso di Azure.

L'azione di accesso di Azure supporta due modi diversi per l'autenticazione con Azure:

Per impostazione predefinita, l'azione di accesso accede con l'interfaccia della riga di comando di Azure e configura l'ambiente di esecuzione di GitHub Actions per l'interfaccia della riga di comando di Azure. È possibile usare Azure PowerShell con la proprietà enable-AzPSSession dell'azione di accesso di Azure. In questo modo viene configurato l'ambiente di esecuzione di GitHub Actions con il modulo Azure PowerShell.

È possibile usare l'account di accesso di Azure per connettersi a cloud pubblici o sovrani, tra cui Azure per enti pubblici e l'hub di Azure Stack.

Usare l'azione di accesso di Azure con OpenID Connessione

Per configurare un account di accesso di Azure con OpenID Connessione e usarlo in un flusso di lavoro di GitHub Actions, è necessario:

  • Un'applicazione Microsoft Entra, con un'entità servizio assegnata con un ruolo appropriato alla sottoscrizione.
  • Un'applicazione Microsoft Entra configurata con credenziali federate per considerare attendibili i token rilasciati da GitHub Actions nel repository GitHub. È possibile configurare questa opzione nella portale di Azure o con le API REST di Microsoft Graph.
  • Flusso di lavoro di GitHub Actions che richiede token di rilascio di GitHub al flusso di lavoro e usa l'azione di accesso di Azure.

Creare un'applicazione e un'entità servizio Microsoft Entra

Sarà necessario creare un'applicazione Microsoft Entra e un'entità servizio e quindi assegnare un ruolo nella sottoscrizione all'applicazione in modo che il flusso di lavoro abbia accesso alla sottoscrizione.

  1. Se non si dispone di un'applicazione esistente, registrare una nuova applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse. Come parte di questo processo, assicurarsi di:

    • Registrare l'applicazione con Microsoft Entra ID e creare un'entità servizio
    • Assegnare un ruolo all'applicazione
  2. Aprire Registrazioni app in portale di Azure e trovare l'applicazione. Copiare i valori per ID applicazione (client) e ID directory (tenant) da usare nel flusso di lavoro di GitHub Actions.

  3. Aprire Sottoscrizioni in portale di Azure e trovare la sottoscrizione. Copiare l'ID sottoscrizione.

Aggiungere credenziali federate

È possibile aggiungere credenziali federate nella portale di Azure o con l'API REST di Microsoft Graph.

  1. Passare a Registrazioni app nel portale di Azure e aprire l'app da configurare.
  2. All'interno dell'app passare a Certificati e segreti.
    Select Certificates & secrets.
  3. Nella scheda Credenziali federate selezionare Aggiungi credenziali. Add the federated credential
  4. Selezionare lo scenario delle credenziali gitHub Actions che distribuisce le risorse di Azure. Generare le credenziali immettendo i dettagli delle credenziali.
Campo Description Esempio
Organization Il nome dell'organizzazione GitHub o il nome utente di GitHub. contoso
Repository Nome del repository GitHub. contoso-app
Tipo di entità Filtro usato per definire l'ambito delle richieste OIDC dai flussi di lavoro di GitHub. Questo campo viene usato per generare l'attestazione subject . Environment, Branch, Pull requestTag
Nome GitHub Nome dell'ambiente, del ramo o del tag. main
Nome Identificatore per le credenziali federate. contoso-deploy

Per una panoramica più dettagliata, vedere Configurare un'app per considerare attendibile un repository GitHub.

Creare segreti di GitHub

È necessario specificare l'ID client, l'ID tenant e l'ID sottoscrizione dell'applicazione all'azione di accesso. Questi valori possono essere forniti direttamente nel flusso di lavoro o possono essere archiviati nei segreti gitHub e a cui si fa riferimento nel flusso di lavoro. Il salvataggio dei valori come segreti GitHub è l'opzione più sicura.

  1. Aprire il repository GitHub e passare a Impostazioni.

    Select Settings in the navigation

  2. Selezionare Segreti di sicurezza > e variabili > Azioni.

    Choose to add a secret

  3. Creare segreti per AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Usare questi valori dell'applicazione Azure Active Directory per i segreti di GitHub:

    Segreto GitHub Applicazione di Azure Active Directory
    AZURE_CLIENT_ID ID applicazione (client)
    AZURE_TENANT_ID ID della directory (tenant)
    AZURE_SUBSCRIPTION_ID ID sottoscrizione
  4. Salvare ogni segreto selezionando Aggiungi segreto.

Configurare l'accesso di Azure con l'autenticazione Connessione OpenID

Il flusso di lavoro di GitHub Actions usa openID Connessione per l'autenticazione con Azure. Per altre informazioni su questa interazione, vedere la documentazione di GitHub Actions.

In questo esempio si userà OpenID Connessione'interfaccia della riga di comando di Azure per eseguire l'autenticazione con Azure con l'azione di accesso di Azure. Nell'esempio vengono usati segreti GitHub per i client-idvalori , tenant-ide subscription-id . È anche possibile passare questi valori direttamente nell'azione di accesso.

L'azione di accesso di Azure include un parametro di input facoltativo audience che per impostazione predefinita è api://AzureADTokenExchange. È possibile aggiornare questo parametro per i valori di gruppo di destinatari personalizzati.

Questo flusso di lavoro esegue l'autenticazione con OpenID Connessione e usa l'interfaccia della riga di comando di Azure per ottenere i dettagli della sottoscrizione connessa ed elencare il gruppo di risorse.

name: Run Azure Login with OpenID Connect
on: [push]

permissions:
      id-token: write
      contents: read
      
jobs: 
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Az CLI login'
      uses: azure/login@v1
      with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
  
    - name: 'Run Azure CLI commands'
      run: |
          az account show
          az group list
          pwd 

Verificare l'esito positivo dell'accesso di Azure con OpenID

Aprire l'azione Az CLI login e verificare che sia stata eseguita correttamente. Dovrebbe essere visualizzato il messaggio Login successful. Se l'account di accesso non riesce, verrà visualizzato il messaggio Az CLI Login failed..

GitHub Actions Azure Login successful.

Usare l'azione di accesso di Azure con un segreto dell'entità servizio

Per usare l'accesso di Azure con un'entità servizio, è prima necessario aggiungere l'entità servizio di Azure come segreto al repository GitHub.

Creare un'entità servizio

In questo esempio verrà creato un segreto denominato AZURE_CREDENTIALS che è possibile usare per l'autenticazione con Azure.

  1. Aprire Azure Cloud Shell nel portale di Azure o nell'interfaccia della riga di comando di Azure in locale.

    Nota

    Se si usa l'hub di Azure Stack, è necessario impostare l'endpoint di gestione SQL su not supported. az cloud update -n {environmentName} --endpoint-sql-management https://notsupported

  2. Creare una nuova entità servizio nel portale di Azure per l'app. L'entità servizio deve essere assegnata con un ruolo appropriato.

        az ad sp create-for-rbac --name "myApp" --role contributor \
                                    --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \
                                    --json-auth
    

    Il parametro --json-auth restituisce il dizionario dei risultati accettato dall'azione di accesso, accessibile nelle versioni >dell'interfaccia della riga di comando di Azure = 2.51.0. Versioni precedenti a questo utilizzo --sdk-auth con un avviso di deprecazione.

  3. Copiare l'oggetto JSON per l'entità servizio.

    {
        "clientId": "<GUID>",
        "clientSecret": "<GUID>",
        "subscriptionId": "<GUID>",
        "tenantId": "<GUID>",
        (...)
    }
    

Aggiungere l'entità servizio come segreto GitHub

  1. In GitHub passare al repository.

  2. Passare a Impostazioni nel menu di spostamento.

  3. Selezionare Segreti di sicurezza > e variabili > Azioni.

    Screenshot of select Actions menu item.

  4. Selezionare Nuovo segreto repository.

  5. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto il nome AZURE_CREDENTIALS.

  6. Selezionare Aggiungi segreto.

Usare l'azione di accesso di Azure

Usare il segreto dell'entità servizio con l'azione di accesso di Azure per eseguire l'autenticazione con Azure.

In questo flusso di lavoro l'autenticazione viene eseguita usando l'azione di accesso di Azure con i dettagli dell'entità servizio archiviati in secrets.AZURE_CREDENTIALS. Quindi, eseguire un'azione dell'interfaccia della riga di comando di Azure. Per altre informazioni su come fare riferimento ai segreti di GitHub in un file del flusso di lavoro, vedere Uso di segreti crittografati in un flusso di lavoro nella documentazione di GitHub.

Una volta configurato un passaggio di accesso di Azure funzionante, è possibile usare le azioni di Azure PowerShell o dell'interfaccia della riga di comando di Azure. È anche possibile usare altre azioni di Azure, ad esempio la distribuzione in app Web di Azure e Funzioni di Azure.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'

Usare l'azione di Azure PowerShell

In questo esempio si accede con l'azione di accesso di Azure e quindi si recupera un gruppo di risorse con l'azione di Azure PowerShell.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'
          enable-AzPSSession: true
      - name: Azure PowerShell Action
        uses: Azure/powershell@v1
        with:
          inlineScript: Get-AzResourceGroup -Name "< YOUR RESOURCE GROUP >"
          azPSVersion: "latest"

Usare l'azione dell'interfaccia della riga di comando di Azure

In questo esempio si accede con l'azione di accesso di Azure e quindi si recupera un gruppo di risorse con l'azione dell'interfaccia della riga di comando di Azure.

on: [push]

name: AzureLoginSample

jobs:
build-and-deploy:
  runs-on: ubuntu-latest
  steps:

    - name: Log in with Azure
      uses: azure/login@v1
      with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
          azcliversion: 2.0.72
          inlineScript: |
            az account show
            az storage -h

Connessione ai cloud Azure per enti pubblici e dell'hub di Azure Stack

Per accedere a uno dei cloud Azure per enti pubblici, impostare l'ambiente dei parametri facoltativo con nomi AzureUSGovernment cloud supportati o AzureChinaCloud. Se questo parametro non viene specificato, accetta il valore AzureCloud predefinito e si connette al cloud pubblico di Azure.

   - name: Login to Azure US Gov Cloud with CLI
     uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: false
   - name: Login to Azure US Gov Cloud with Az Powershell
      uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: true

Connettersi con altri servizi di Azure

Gli articoli seguenti forniscono informazioni dettagliate sulla connessione a GitHub da Azure e da altri servizi.

Microsoft Entra ID

Power BI

Connettori

Azure Databricks