在 Bicep 模板中引用现有Microsoft图形资源
Bicep 允许使用 现有关键字读取现有 资源。 对于 Microsoft Graph 资源,资源必须首先 由客户端提供的密钥属性唯一标识。
本文介绍如何使用 existing
关键字和客户端提供的密钥读取现有 Microsoft Graph 资源的属性。
重要
Microsoft Graph Bicep 目前为预览版。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
先决条件
- 一个 Azure 订阅。 如果没有帐户,可以创建一个免费帐户。
- 具有读取或更新现有资源或成为资源所有者的最低特权权限或角色。 按任务和默认用户权限查阅最低特权角色,以查看需要分配的角色。
- 安装用于创作和部署的 Bicep 工具。 本快速入门将 VS Code 与用于创作的 Bicep 扩展配合使用,将 Azure CLI 用于部署。 还针对 Azure PowerShell 提供了示例。
- 可以通过交互方式或通过零接触(仅限应用)部署来部署 Bicep 文件。
读取现有 Microsoft Graph 资源的属性
以下步骤演示如何通过 Bicep 文件中的唯一名称引用现有组和应用程序。
启动 VS Code 并创建两个新文件 main.bicep 和 bicepconfig.json,确保它们位于同一文件夹中。
通过配置 bicepconfig.json启用某些预览功能:
{ "experimentalFeaturesEnabled": { "extensibility": true } }
在 main.bicep 中,添加以下 Bicep 代码,该代码使用
existing
关键字按其唯一名称和TestGroup-20240816
应用程序引用TestApp-20240816
组。 此步骤假定具有指定唯一名称的组和应用程序已存在。extension microsoftGraph @description('Group to use') param groupName string = 'TestGroup-20240816' @description('App to use') param appName string = 'TestApp-20240816' resource group 'Microsoft.Graph/groups@v1.0' existing = { uniqueName: groupName } resource application 'Microsoft.Graph/applications@v1.0' existing = { uniqueName: appName } output groupId string = group.id output applicationId string = application.id
使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。
## Create a resource group az group create --name exampleRG --location eastus ## Deploy the Bicep file az deployment group create --resource-group exampleRG --template-file main.bicep
DeploymentName : main
ResourceGroupName : exampleRG
ProvisioningState : Succeeded
Timestamp : 18/04/2024 16:16:42
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
groupName String "TestGroup-20240816"
appName String "TestApp-20240816"
Outputs :
Name Type Value
=============== ========================= ==========
group-id String "91ded94c-0144-4422-b33c-c4171447a738"
app-id String "cd0bc6bc-fd22-4eb6-9bd3-2f8c5efd6dc9"
在下一部分中使用组的 ID。
使用现有资源的设置更新或创建 Microsoft Graph 资源
你可能还想要部署 Microsoft Graph 资源,并使用现有资源的设置配置其某些属性。 例如,你想要使用现有组 #2 和服务主体 #2 作为其成员部署安全组 #1(新部署或重新部署)。 在这种情况下,使用 existing
关键字引用组 #2 和服务主体 #2 并获取其 ID,然后将其添加到 组 #1 的成员 集合。
若要引用 Bicep 文件中的现有组 #2,它必须设置其 uniqueName 属性。 若要引用现有服务主体 #2(如果不知道其 appId),其父应用程序必须设置其 uniqueName 属性。
本部分的操作:
- 使用 Azure CLI 或 Azure PowerShell 更新现有组和应用程序的 uniqueName 属性。
existing
使用 Bicep 文件中的关键字获取现有组和服务主体的 ID。- 在 Bicep 文件中,将设置配置为将具有现有组和服务主体的安全组部署为其成员,并将服务主体配置为其所有者。
- 部署 Bicep 文件。
步骤 1:设置组和应用程序的唯一名称属性
以下请求 分别将现有组和应用程序的唯一名称 设置为 TestGroup-20240817
现有组和 TestApp-20240817
应用程序。 假设组和应用程序是前面方案中的服务主体 #2 的组 #2 和父应用。
# Sign in to Azure
az login
## Create a resource group
az group create --name exampleRG --location eastus
## Update the uniqueName property of the group and application
## Note: Replace cec00de2-08b9-4081-aaf5-55d78ac9b4c4 and 25ae6414-05a1-4cce-9899-ad11d9eedde2 with IDs for your group and application.
az rest --method patch --url 'https://graph.microsoft.com/v1.0/groups/cec00de2-08b9-4081-aaf5-55d78ac9b4c4' --body '{\"uniqueName\": \"TestGroup-20240817\"}' --headers "content-type=application/json"
az rest --method patch --url 'https://graph.microsoft.com/v1.0/applications/25ae6414-05a1-4cce-9899-ad11d9eedde2' --body '{\"uniqueName\": \"TestApp-20240817\"}' --headers "content-type=application/json"
步骤 2:将现有组和服务主体添加到另一个组的成员和服务主体
现在 existing
,可以使用关键字引用现有组 #2 和服务主体 #2、获取其 ID,并将其添加到 另一个组的所有者 和 成员 集合。
启动 VS Code 并创建两个新文件 main.bicep 和 bicepconfig.json,确保它们位于同一文件夹中。
通过配置 bicepconfig.json启用某些预览功能:
{ "experimentalFeaturesEnabled": { "extensibility": true } }
在 main.bicep 中,添加以下 Bicep 代码。
extension microsoftGraph // TEMPLATE OVERVIEW: Uses existing group and existing SP and sets them // as members of another group // existing group #2 to be added as a member resource groupMember 'Microsoft.Graph/groups@v1.0' existing = { uniqueName: 'TestGroup-20240817' } // existing SP #2 to be added as a member resource application 'Microsoft.Graph/applications@v1.0' existing = { uniqueName: 'TestApp-20240817' } resource servicePrincipalMember 'Microsoft.Graph/servicePrincipals@v1.0' existing = { appId: application.appId } // Add preceding service principal and group as members of another group // Add preceding service principal as owner of the group. // If Group-1 uniqueName doesn't exist, this is a new deployment. // If Group-1 uniqueName exists, this is a redeployment/update. For redeployments, existing members and owners are retained. resource group 'Microsoft.Graph/groups@v1.0' = { displayName: 'Group-1' mailEnabled: false mailNickname: 'Group-1' securityEnabled: true uniqueName: 'Group-1' members: [groupMember.id, servicePrincipalMember.id] owners: [servicePrincipalMember.id] }
使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。
## Create a resource group az group create --name exampleRG --location eastus ## Deploy the Bicep file az deployment group create --resource-group exampleRG --template-file main.bicep
部署完成后,应会看到一条指出部署成功的消息。