对于服务主体授予使用命令 Get-AzNetworkServiceTag 的权限?

For a Service Principal which permission to give to use command Get-AzNetworkServiceTag?

我在 AzureAD 中成功创建了一个 ServicePrincipal (SP),并且能够做很多事情,例如{连接到 Azure、创建资源等...}

我需要我的 SP 使用命令 Get-AzNetworkServiceTag 但它总是 return 空值。 当我使用自己的帐户尝试命令命令 Get-AzNetworkServiceTag 时,我得到了预期的结果。我相信问题来自许可,非常欢迎您帮助设置最低权限。 我当前的权限如下所示:

你知道我应该用哪一个吗? 替代问题是根据 powershell 命令确定权限的最佳做法是什么?虽然权限可以名称来确定,但有太多的权限,很难选择正确的权限。谢谢。

您遇到此问题是因为 Powershell cmdlet 的工作方式与 MS Graph 不同。 Powershell 不需要权限,而是需要角色来执行此操作。请将全局管理员角色添加到您的服务原则中,然后尝试 Connect-AzAccount 以便问题得到解决。

详情请参考Assigning administrator roles in Azure Active Directory

命令 Get-AzNetworkServiceTag 本质上是将 Azure 管理 REST API - Service Tags - List, it is not related to Azure AD, to solve the issue, you need to assign the Azure RBAC role(不是 Azure AD 管理员角色)调用到您的服务主体。

要解决这个问题,最简单的方法是分配内置角色,例如ReaderContributorsubscription 范围内的服务主体。但是如果你想 最低权限,您的选择是create a custom role然后使用它,您可以按照以下步骤操作。

1.Navigate 到您在门户中的订阅 -> Access control (IAM) -> Add -> Add custom role,按照屏幕截图操作。

然后跳过Permissions,在JSON中,点击Edit,将Microsoft.Network/*/read添加到actions->下一步,创建

创建自定义角色后,稍等片刻,导航到 Access control (IAM) -> 将自定义角色添加到您的服务主体。

综上所述,Microsoft.Network/*/read动作权限是本例中最小的权限,赋予角色后即可正常工作。

Alternative question is what is best practice to determine permissions based on powershell command?

你只需要知道这个命令是做什么的,然后在Azure resource provider operations中找到操作,在这种情况下,没有像Microsoft.Network/serviceTags/read这样的操作,所以我们需要使用Microsoft.Network/*/read至少。