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:
- Entità servizio con segreti
- OpenID Connessione (OIDC) con un'entità servizio di Azure usando una credenziale di identità federata
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.
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
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.
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.
- Passare a Registrazioni app nel portale di Azure e aprire l'app da configurare.
- All'interno dell'app passare a Certificati e segreti.
- Nella scheda Credenziali federate selezionare Aggiungi credenziali.
- 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 request Tag |
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.
Aprire il repository GitHub e passare a Impostazioni.
Selezionare Segreti di sicurezza > e variabili > Azioni.
Creare segreti per
AZURE_CLIENT_ID
,AZURE_TENANT_ID
eAZURE_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 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-id
valori , tenant-id
e 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.
.
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.
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
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.Copiare l'oggetto JSON per l'entità servizio.
{ "clientId": "<GUID>", "clientSecret": "<GUID>", "subscriptionId": "<GUID>", "tenantId": "<GUID>", (...) }
Aggiungere l'entità servizio come segreto GitHub
In GitHub passare al repository.
Passare a Impostazioni nel menu di spostamento.
Selezionare Segreti di sicurezza > e variabili > Azioni.
Selezionare Nuovo segreto repository.
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
.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.