Schnellstart: Bereitstellen einer Bicep-Datei als Dienstprinzipal
In dieser Schnellstartanleitung stellen Sie eine Bicep-Datei bereit, die Microsoft Graph-Ressourcen mit App-Only-Authentifizierung bereitstellt, auch als nicht-interaktive Authentifizierung bezeichnet. Sie können mit diesem Mechanismus eine Zero-Touch-Bereitstellung in kontinuierliche Integrations- und CI/CD-Pipelines aufnehmen.
Informationen zum Bereitstellen mithilfe der delegierten oder interaktiven Authentifizierung finden Sie unter Erstellen einer Bicep-Datei mit Microsoft Graph-Ressourcen.
Wichtig
Microsoft Graph Bicep befindet sich derzeit in der Vorschau. Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Voraussetzungen
- Verwenden Sie für diese Schnellstartanleitung die Bicep-Datei, die in "Erstellen einer Bicep-Datei mit Microsoft Graph-Ressourcen" erstellt wurde.
- Sie sind Besitzer eines Azure-Abonnements.
- Sie sind ein Administrator für privilegierte Rollen, mit dem Sie einem Dienstprinzipal Microsoft Graph-App-Rollen zuweisen können.
Erstellen eines Dienstprinzipals und Zuweisen eine Azure-Rolle
Während Sie noch bei Azure CLI aus der vorherigen Sitzung angemeldet sind, erstellen Sie den Dienstprinzipal, den Sie später zum Bereitstellen der Bicep-Datei verwenden.
In dieser Schnellstartanleitung wird der Dienstprinzipal mit einem Anwendungskennwort erstellt, das auch als geheimer Clientschlüssel bezeichnet wird. Weisen Sie außerdem dem Dienstprinzipal die Rolle des Mitwirkenden für verwaltete Identitäten zu, die auf eine Ressourcengruppe beschränkt ist.
Achtung
Diese Schnellstartanleitung verwendet ein Anwendungskennwort nur für Einfachheits- und Testzwecke. Verwenden Sie nicht in Produktionsumgebungen.
# 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}"
Ausgabekonsole:
{
"appId": "myServicePrincipalId",
"displayName": "myServicePrincipalName",
"password": "myServicePrincipalPassword",
"tenant": "myOrganizationTenantId"
}
Die Ausgabe enthält den password
-Schlüssel. Denken Sie unbedingt daran, diesen Wert zu kopieren – er kann nicht abgerufen werden.
Microsoft Graph-Berechtigungen dem Service Principal zuweisen
Verwenden Sie Microsoft Graph PowerShell, um dem Dienstprinzipal die Berechtigung "Group.ReadWrite.All" nur für Anwendungen zu erteilen. Mit der Rolle "Privileged Role Administrator" können Sie sich selbst die Berechtigungen "AppRoleAssignment.ReadWrite.All " und "Application.Read.All " erteilen, um diesen Vorgang auszuführen.
Achtung
Apps, denen die AppRoleAssignment.ReadWrite.All-Berechtigung gewährt wurde, sollten nur von den entsprechenden Benutzern aufgerufen werden. Weitere Informationen finden Sie unter 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"
Anmelden als Dienstprinzipal zum Bereitstellen der Bicep-Datei
Melden Sie sich als der zuvor erstellte Dienstprinzipal an.
# 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
Wichtig
Wenn Sie die Anzeige Ihres Kennworts in der Konsole vermeiden möchten und az login
interaktiv verwenden, können Sie den Befehl read -s
in bash
nutzen.
read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u <app-id> -p $AZ_PASS --tenant <tenant>
Bereitstellen der Bicep-Datei
Stellen Sie nun die Bicep-Datei im Bereich Ihrer Ressourcengruppe bereit.
az deployment group create --resource-group exampleRG --template-file main.bicep
Hinweis
Aufgrund von Replikationsverzögerungen kann das Hinzufügen der verwalteten Dienstidentität (Managed Service Identity, MSI) als Besitzer der Microsoft Entra-Gruppe dazu führen, dass die Bereitstellung fehlschlägt. Warten Sie ein wenig, und stellen Sie dann die gleiche Bicep-Datei erneut bereit.
Bereinigen von Ressourcen
Wenn die Azure-Ressourcen nicht mehr benötigt werden, verwenden Sie das Azure CLI- oder Azure PowerShell-Modul, um die von Ihnen erstellte Ressourcengruppe zu löschen.
Hinweis
Ressourcengruppen sind ein Azure-Konzept und haben keine Auswirkungen auf Microsoft Graph-Ressourcen. Microsoft Graph-Ressourcen müssen mit einer zusätzlichen Anforderung an Microsoft Graph bereinigt werden. Hierfür können Sie Azure CLI oder Azure PowerShell, Microsoft Graph CLI oder Microsoft Graph PowerShell verwenden.
Die folgenden Beispiele zeigen Befehle zum Löschen der Azure-Ressource und dann der Microsoft Graph-Ressourcen mit Azure CLI und 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