快速入门:将 Bicep 文件部署为服务主体

在本快速入门中,你将部署一个 Bicep 文件,该文件包含使用仅限应用的身份验证(也称为非交互式身份验证)的 Microsoft Graph 资源。 可以将此机制用于零接触部署集成到持续集成和持续交付(CI/CD)管道中。

若要使用委托身份验证或交互式身份验证进行部署,请参阅 使用 Microsoft Graph 资源创建 Bicep 文件。

重要

Microsoft Graph Bicep 目前以预览版提供。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

先决条件

创建服务主体并分配 Azure 角色

创建稍后用于部署 Bicep 文件的服务主体。 在本快速入门中,服务主体是使用应用程序密码(也称为客户端密码)创建的。 此外,为服务主体 分配托管标识参与者角色,范围限定为资源组:

注意

本快速入门仅使用应用程序密码进行简单和测试。 请勿在生产环境中使用。

az group create --name exampleRG --location eastus

az ad sp create-for-rbac --name myServicePrincipalName --role "Managed Identity Contributor" --scopes "/subscriptions/mySubscriptionId/resourceGroups/myResourceGroupName"

输出控制台:

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

输出包括 password 密钥。 请确保复制此值 - 它不可检索。

将 Microsoft Graph 权限分配给服务主体

使用 Microsoft Graph PowerShell 授予对服务主体的 Group.ReadWrite.All 仅限应用程序的权限。

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" 

提示

使用 Microsoft Graph 权限引用按权限名称查找权限 ID(例如 User.Read.All)。

以服务主体身份登录以部署 Bicep 文件

使用 Azure CLI 或 Azure PowerShell 作为之前创建的服务主体登录。


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

重要

如果想要避免在控制台中显示自己的密码并以交互方式使用 az login,请在 bash 中使用 read -s 命令。

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

部署 Bicep 文件

现在,使用资源组的范围部署 Bicep 文件。

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

注意

由于副本 (replica)延迟,将托管服务标识(MSI)添加为 Microsoft Entra 组的所有者可能会导致部署失败。 稍候一下,然后再次部署相同的 Bicep 文件。

清理资源

如果不再需要本文中创建的 Azure 资源,请使用 Azure CLI 或 Azure PowerShell 模块删除快速入门资源组。

注意

资源组是 Azure 概念,对 Microsoft Graph 资源没有影响。 需要使用对 Microsoft Graph 的其他请求清理 Microsoft Graph 资源。 为此,可以使用 Azure CLI 或 Azure PowerShell、 Microsoft Graph CLIMicrosoft Graph PowerShell

以下示例演示了先删除 Azure 资源的命令,然后使用 Azure CLI 和 Azure PowerShell 删除 Microsoft Graph 资源。

az group delete --name exampleRG

az rest --method delete --url https://graph.microsoft.com/v1.0/groups(uniqueName=%27myExampleGroup%27)

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