是否可以使用图形API将Azure Active Directory角色添加到托管身份?

时间:2019-08-23 04:49:15

标签: azure microsoft-graph

我正在使用terraform部署功能应用程序,并且该功能应用程序具有系统管理的身份。我的功能应用程序需要能够使用目录,添加用户,创建组,添加组成员等。在门户中,我可以为该托管身份分配活动目录角色,并且可以正常工作。我希望能够以编程方式执行此操作。我已经看过cli和powershell命令,并且有向角色添加用户角色的命令,但是这些只是rbac角色,而不是目录角色。我的想法是我可以使用graph API来做到这一点,但是我还没有找到一种方法来做到这一点。

我能够连接到图api,下面的代码允许我向用户添加目录角色,但不能向服务原理添加目录角色。 (我的托管身份)

import requests

client_id = <client_id>
client_secret = <client_secret>

tokenPayload = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'resource': 'https://graph.microsoft.com',
}
r = requests.post('https://login.microsoftonline.com/<my_tenant>/oauth2/token', data=tokenPayload)

headers = {
    'User-Agent': 'python_tutorial/1.0',
    'Authorization': 'Bearer {0}'.format(r.json()['access_token']),
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}
rolePayload = {
    '@odata.id': 'https://graph.microsoft.com/v1.0/directoryObjects/<id_of_my_managed_identity>'
}
servicePrinciples = requests.post(
    'https://graph.microsoft.com/v1.0/directoryRoles/<role_i_want_to_add_my_managed_identity_to>/members/$ref',
    json=rolePayload, headers=headers)
print(servicePrinciples.text)

我期望它将角色添加到托管标识中,而我收到此消息。

{
  "error": {
    "code": "Request_BadRequest",
    "message": "Unsupported directory object class 'ServicePrincipal' specified by resource identifier.",
    "innerError": {
      "request-id": "87ce7a2f-ebf7-402d-a987-c3823eee92f4",
      "date": "2019-08-23T04:21:24"
    }
  }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

v1.0不支持。

请使用测试版:

Post https://graph.microsoft.com/beta/directoryRoles/<role_i_want_to_add_my_managed_identity_to>/members/$ref

body:
{
    '@odata.id': 'https://graph.microsoft.com/v1.0/directoryObjects/<id_of_my_managed_identity>'
}