快速入门:将 Bicep 文件部署为服务主体
在本快速入门中,你将部署一个 Bicep 文件,该文件包含使用仅限应用的身份验证(也称为非交互式身份验证)Microsoft Graph 资源。 可以将此机制用于零接触部署集成到持续集成和持续交付(CI/CD)管道中。
若要使用委托身份验证或交互式身份验证进行部署,请参阅 使用 Microsoft Graph 资源创建 Bicep 文件。
重要
Microsoft Graph Bicep 目前为预览版。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
先决条件
- 对于本快速入门,请使用在 创建包含 Microsoft Graph 资源的 Bicep 文件中创建的 Bicep 文件。
- 你是 Azure 订阅的所有者。
- 你是 特权角色管理员,可用于将 Microsoft Graph 应用角色分配给服务主体。
创建服务主体并分配 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.All 和 Application.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
,请在 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
注意
由于复制延迟,将托管服务标识(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 资源。
# 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