快速入门:将 Bicep 文件部署为服务主体
在本快速入门中,你将部署一个 Bicep 文件,该文件包含使用仅限应用的身份验证(也称为非交互式身份验证)的 Microsoft Graph 资源。 可以将此机制用于零接触部署集成到持续集成和持续交付(CI/CD)管道中。
若要使用委托身份验证或交互式身份验证进行部署,请参阅 使用 Microsoft Graph 资源创建 Bicep 文件。
重要
Microsoft Graph Bicep 目前以预览版提供。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
先决条件
- 对于本快速入门,请使用在 创建包含 Microsoft Graph 资源的 Bicep 文件中创建的 Bicep 文件。
- 你是 Azure 订阅的所有者。
- 你是 Entra Privileged Role 管理员,可用于将 Microsoft Graph 应用角色分配给服务主体。
创建服务主体并分配 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 CLI 或 Microsoft 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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈