使用 Group.Create 权限创建 Azure AD 组

Posted

技术标签:

【中文标题】使用 Group.Create 权限创建 Azure AD 组【英文标题】:Create Azure AD group with Group.Create Permission 【发布时间】:2021-02-15 05:30:40 【问题描述】:

我正在尝试使用服务主体通过 Graph API 创建 Azure AD 组。目的是服务主体将在 Pipelines 运行中创建组。

我用来尝试创建组的调用是

az rest --method post \
  --uri 'https://graph.microsoft.com/v1.0/groups' \
  --body '"description": "A description", "displayName": "MyAppGroup", "mailEnabled": false, "mailNickname": "test", "securityEnabled": true, "owners@odata.bind": ["https://graph.microsoft.com/v1.0/users/oooooooo-oooo-oooo-oooo-oooooooooooo"]' \
  --headers "Content-Type=application/json"

为了绘制权限,我已将 API 权限 Group.Create 绑定到我的服务主体。要了解我需要授予的权限,我正在关注此页面:

https://docs.microsoft.com/en-us/graph/api/group-post-groups?view=graph-rest-1.0&tabs=http#permissions

使用Group.Create 权限,当我对上面的 Graph API 运行其余调用时,我收到以下权限错误

Forbidden(
  "error": 
    "code": "Authorization_RequestDenied",
    "message": "Insufficient privileges to complete the operation.",
    "innerError": 
      "date": "2020-11-02T13:31:35",
      "request-id": "...",
      "client-request-id": "..."
    
  
)

我完全明白,如果我要添加 Directory.ReadWrite.All,我可以创建组并拥有所有必需的权限。但是,此权限范围过大,将允许我的服务主体禁用 Active Directory 租户中的用户 - 我的组织现在将允许这样做。因此,我无法授予我的服务主体此权限。

我上面链接的文档向我暗示Group.Create 是允许服务主体创建组的足够权限。

我的问题是我做错了什么,或者我缺少什么权限才能创建群组? Directory.ReadWrite.All 显然超出了简单创建 AD 安全组的范围,因此使用它不是我的选择。

【问题讨论】:

【参考方案1】:

希望这对其他人有所帮助 - 我在发布此内容后立即意识到了答案。

我已经添加了属性

"owners@odata.bind": ["https://graph.microsoft.com/v1.0/users/oooooooo-oooo-oooo-oooo-oooooooooooo"]

json 发布数据。

删除此属性后,我可以仅使用 Group.Create 权限创建组。

添加权限User.Read.All 允许服务主体读取所有者的用户数据,因此足以创建具有任何必要所有者的组。

添加此 API 权限后,我的服务主体能够按预期创建组(与所有者)。

【讨论】:

以上是关于使用 Group.Create 权限创建 Azure AD 组的主要内容,如果未能解决你的问题,请参考以下文章

O365通过图形api以其他用户身份发送

使用 Azure AD 授予用户权限

[OC] 线程 dispatch_group_t

多线程CGD调度组原理

批量添加AD Group

队列组用于多个网络请求