我正在研究 Azure,并希望在通过 Azure CLI 登录时使用服务主体,而不是通过 Web 登录方法进行身份验证。我创建了一个服务主体,其az ad sp create-for-rbac
范围为我的订阅的根目录和角色“所有者”。我可以使用服务主体成功登录,但当我尝试执行此操作时az ad sp list
,我收到错误消息,提示我没有足够的权限:
azure.graphrbac.models.graph_error.GraphErrorException: Insufficient privileges to complete the operation.
当我查看门户中订阅刀片中的访问控制(IAM)选项卡时,我可以看到服务主体是所有者,而我自己的帐户既是所有者又是服务管理员。
有没有办法赋予服务主体与我自己的帐户完全相同的权限?
答案1
显然,仅向 SP 授予“所有者”角色是不够的。您必须授予它“目录读取者”角色。不过,使用 Azure CLI 或门户无法做到这一点。您必须使用 Azure AD Graph API,最简单的方法是使用https://graphexplorer.azurewebsites.net/。
第二个警告是,您不能使用自己的 Azure 帐户使用 graphexplorer 网站(就我而言,我有一个简单的个人 Azure 设置,只有我自己作为管理员),但您必须在 Azure AD 中创建一个用户。我给了它全局管理员角色只是为了确保万无一失,我不确定能够使用 Graph API 的最低角色是什么。
现在,为 SP 添加目录读取器角色的步骤有点长,在这里无法解释,我在这里找到了它们:https://lnx.azurewebsites.net/directory-roles-for-azure-ad-service-principal/
不确定为什么这需要如此复杂以及为什么在文档中找不到这一点。
答案2
如果你的 sp 有Owner
角色,该命令az ad sp list
可以列出你的 sps。
我建议您关闭当前的shell并重新打开一个新shell,使用以下命令登录您的订阅。
az login --service-principal -u <client id> -p <client secret> --tenant <tenant id>