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

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

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

重要

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

先决条件

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

在仍从上一个会话登录到 Azure CLI 时,创建稍后用于部署 Bicep 文件的服务主体。

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

注意

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

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

输出控制台:

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

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

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

使用 Microsoft Graph PowerShell 向 Service 主体授予 Group.ReadWrite.All 仅限应用程序的权限。 特权角色管理员角色允许您授予自己AppRoleAssignment.ReadWrite.AllApplication.Read.All 权限,以执行此操作。

注意

已授予 AppRoleAssignment.ReadWrite.All 权限的应用只能由相应的用户访问。 有关详细信息,请参阅 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" 

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

以之前创建的服务主体身份登录。

# 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

重要

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

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

注意

由于复制延迟,将托管服务标识 (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 资源。

# 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