Udostępnij za pośrednictwem


Szybki start: wdrażanie pliku Bicep jako jednostki usługi

W tym przewodniku Szybki start wdrożysz plik Bicep zawierający zasoby programu Microsoft Graph przy użyciu uwierzytelniania tylko dla aplikacji, znanego również jako uwierzytelnianie nieinterakcyjne. Ten mechanizm umożliwia integrację wdrożenia bezobsługowego z potokami ciągłej integracji i ciągłego dostarczania (CI/CD).

Aby wdrożyć przy użyciu uwierzytelniania delegowanego lub interakcyjnego, zobacz Tworzenie pliku Bicep z zasobami programu Microsoft Graph.

Ważne

Program Microsoft Graph Bicep jest obecnie w wersji zapoznawczej. Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

Wymagania wstępne

  • W tym przewodniku Szybki start użyj pliku Bicep utworzonego w sekcji Tworzenie pliku Bicep z zasobami programu Microsoft Graph.
  • Jesteś właścicielem subskrypcji platformy Azure.
  • Jesteś administratorem ról uprzywilejowanych, który umożliwia przypisywanie ról aplikacji programu Microsoft Graph do jednostki usługi.

Tworzenie jednostki usługi i przypisywanie roli platformy Azure

Mimo że nadal zalogowaliśmy się do interfejsu wiersza polecenia platformy Azure z poprzedniej sesji, utwórz jednostkę usługi, która będzie używana później do wdrożenia pliku Bicep.

W tym przewodniku Szybki start jednostka usługi jest tworzona przy użyciu hasła aplikacji, nazywanego również wpisem tajnym klienta. Ponadto przypisz jednostkę usługi rolę Współautor tożsamości zarządzanej w zakresie do grupy zasobów:

Uwaga

Ten przewodnik Szybki start używa hasła aplikacji tylko do celów prostych i testowych. Nie należy używać w środowiskach produkcyjnych.

# 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}"

Konsola wyjściowa:

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

Dane wyjściowe zawierają password klucz. Upewnij się, że skopiujesz tę wartość — nie można jej pobrać.

Przypisywanie uprawnień programu Microsoft Graph do jednostki usługi

Użyj programu Microsoft Graph PowerShell , aby przyznać uprawnienie Group.ReadWrite.All tylko do jednostki usługi. Rola Administrator ról uprzywilejowanych umożliwia przyznanie sobie uprawnień AppRoleAssignment.ReadWrite.All i Application.Read.All w celu wykonania tej operacji.

Uwaga

Aplikacje, którym przyznano uprawnienie AppRoleAssignment.ReadWrite.All , powinny być dostępne tylko dla odpowiednich użytkowników. Aby uzyskać więcej informacji, zobacz 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" 

Zaloguj się jako jednostka usługi, aby wdrożyć plik Bicep

Zaloguj się jako utworzona wcześniej jednostka usługi.

# 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

Ważne

Jeśli chcesz uniknąć wyświetlania hasła w konsoli programu i używać az login go interaktywnie, użyj read -s polecenia w programie bash.

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

Wdrażanie pliku Bicep

Teraz wdróż plik Bicep przy użyciu zakresu grupy zasobów.

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

Uwaga

Ze względu na opóźnienia replikacji dodanie tożsamości usługi zarządzanej (MSI) jako właściciela grupy Firmy Microsoft Entra może spowodować niepowodzenie wdrożenia. Zaczekaj trochę, a następnie ponownie wdróż ten sam plik Bicep.

Czyszczenie zasobów

Gdy zasoby platformy Azure nie są już potrzebne, użyj interfejsu wiersza polecenia platformy Azure lub modułu Azure PowerShell, aby usunąć utworzoną grupę zasobów.

Uwaga

Grupy zasobów są koncepcją platformy Azure i nie mają wpływu na zasoby programu Microsoft Graph. Zasoby programu Microsoft Graph należy wyczyścić przy użyciu dodatkowego żądania do programu Microsoft Graph. W tym celu możesz użyć interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell, interfejsu wiersza polecenia programu Microsoft Graph lub programu Microsoft Graph PowerShell.

W poniższych przykładach pokazano polecenia umożliwiające najpierw usunięcie zasobu platformy Azure, a następnie zasobów programu Microsoft Graph przy użyciu interfejsu wiersza polecenia platformy Azure i programu 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