Condividi tramite


Guida introduttiva: Distribuire un file Bicep come entità servizio

In questa guida introduttiva si distribuisce un file Bicep che contiene risorse di Microsoft Graph usando l'autenticazione solo app, nota anche come autenticazione non interattiva. È possibile usare questo meccanismo per l'integrazione della distribuzione zero-touch in pipeline di integrazione continua e recapito continuo (CI/CD).

Per eseguire la distribuzione usando l'autenticazione delegata o interattiva, vedere Creare un file Bicep con le risorse di Microsoft Graph.

Importante

Microsoft Graph Bicep è attualmente in anteprima. Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

Prerequisiti

  • Per questa guida introduttiva, usare il file Bicep creato in Creare un file Bicep con le risorse di Microsoft Graph.
  • Si è proprietari di una sottoscrizione di Azure.
  • Si è un amministratore del ruolo con privilegi, che consente di assegnare i ruoli dell'app Microsoft Graph a un'entità servizio.

Creare un'entità servizio e assegnare un ruolo di Azure

Durante l'accesso all'interfaccia della riga di comando di Azure dalla sessione precedente, creare l'entità servizio usata in un secondo momento per distribuire il file Bicep.

In questa guida introduttiva l'entità servizio viene creata con una password dell'applicazione, nota anche come segreto client. Assegnare inoltre all'entità servizio il ruolo Collaboratore identità gestita, con ambito a un gruppo di risorse:

Attenzione

Questa guida introduttiva usa una password dell'applicazione solo a scopo di semplicità e test. Non usare negli ambienti di produzione.

# Create a resource group
az group create --name exampleRG --location eastus

# Create a service principal with the Managed Identity Contributor role. Replace {myServicePrincipalName}, {mySubscriptionId}, and {myResourceGroupName} with your values.
az ad sp create-for-rbac --name {myServicePrincipalName} --role "Managed Identity Contributor" --scopes "/subscriptions/{mySubscriptionId}/resourceGroups/{myResourceGroupName}"

Console di output:

{
  "appId": "myServicePrincipalId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myOrganizationTenantId"
}

L'output include la password chiave. Assicurarsi di copiare questo valore perché non può essere recuperato.

Assegnare le autorizzazioni di Microsoft Graph all'entità servizio

Usare Microsoft Graph PowerShell per concedere all'applicazione l'autorizzazione Group.ReadWrite.All solo applicazione per l'entità servizio. Il ruolo Amministratore ruolo con privilegi consente di concedere a se stessi le autorizzazioni AppRoleAssignment.ReadWrite.All e Application.Read.All per eseguire questa operazione.

Attenzione

Le app a cui è stata concessa l'autorizzazione AppRoleAssignment.ReadWrite.All devono essere accessibili solo dagli utenti appropriati. Per altre informazioni, vedere AppRoleAssignment.ReadWrite.All.

# Authenticate to Microsoft Graph
Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All","Application.Read.All"

# Find the service principal created to run the deployment
$mySP = Get-MgServicePrincipalByAppId -AppId "myServicePrincipalId"

# Find the service principal for Microsoft Graph
$graphSP = Get-MgServicePrincipalByAppId -AppId "00000003-0000-0000-c000-000000000000"

# Assign Group.ReadWrite.All app-only permission (id = 62a82d76-70ea-41e2-9197-370581804d09)
New-MgServicePrincipalAppRoleAssignedTo -ResourceId $graphSP.Id -ServicePrincipalId $graphSP.Id -PrincipalId $mySP.Id -AppRoleId "62a82d76-70ea-41e2-9197-370581804d09" 

Accedere come entità servizio per distribuire il file Bicep

Accedere come entità servizio creata in precedenza.

# Sign in with the service principal created earlier. This sample uses the Bash console.
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenantID:appOwnerOrganizationId}" --output tsv)
echo "Using appId $spID in tenant $tenantID"

az login --service-principal --username $spID --password {paste your SP password here} --tenant $tenantID

Importante

Se si vuole evitare di visualizzare la password nella console e si usa az login in modo interattivo, usare il read -s comando in bash.

read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u <app-id> -p $AZ_PASS --tenant <tenant>

Distribuire il file Bicep

Distribuire ora il file Bicep usando l'ambito del gruppo di risorse.

az deployment group create --resource-group exampleRG --template-file main.bicep

Nota

A causa di ritardi di replica, l'aggiunta dell'identità del servizio gestito come proprietario del gruppo Microsoft Entra potrebbe causare l'esito negativo della distribuzione. Attendere un po' e quindi distribuire di nuovo lo stesso file Bicep.

Pulire le risorse

Quando le risorse di Azure non sono più necessarie, usare l'interfaccia della riga di comando di Azure o il modulo Azure PowerShell per eliminare il gruppo di risorse creato.

Nota

I gruppi di risorse sono un concetto di Azure e non hanno alcun impatto sulle risorse di Microsoft Graph. Le risorse di Microsoft Graph devono essere pulite con una richiesta aggiuntiva a Microsoft Graph. Per questo è possibile usare l'interfaccia della riga di comando di Azure o Azure PowerShell, l'interfaccia della riga di comando di Microsoft Graph o Microsoft Graph PowerShell.

Gli esempi seguenti illustrano i comandi per eliminare prima la risorsa di Azure e quindi le risorse di Microsoft Graph usando l'interfaccia della riga di comando di Azure e Azure PowerShell.

# Delete the resource group
az group delete --name exampleRG

# Delete the Microsoft Graph group
az rest --method delete --url 'https://graph.microsoft.com/v1.0/groups%28uniqueName=%27myExampleGroup%27%29'

# Delete the client service principal
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:id}" --output tsv)
az ad sp delete --id $spID