首页 文章

使用Service Principal授予对Azure的访问权限

提问于
浏览
0

我试图了解有关使用Azure服务原则将授权委派给Azure BLOB的几点 .

我如何配置Azure:

在Active Directory中

  • Create and Configure Service Principal: 我创建了一个应用程序,创建了一个密钥(密码),并设置了访问Azure存储所需的权限;

  • Configure IAM of Azure Storage: 在存储帐户部分下,我选择了我的存储帐户,在IAM下我将我的帐户(我的登录帐户为XYZ@hotmail.com)分配给存储BLOB数据贡献者角色 .

我如何使用客户端App中的配置:

  • 使用上述配置;我的应用程序采用租户ID,客户端ID,客户端密钥等,并将授权请求发送到 /authorize endpoints .

  • 然后弹出一个窗口并要求我登录(使用例如XYZ@hotmail.com),然后弹出一个同意屏幕,并要求我允许服务主体读取我的Azure存储 .

  • 批准后,我的客户端应用程序收到OAuth2.0 code .

  • 然后我通过 /token endpoints 与 access_key 交换此 code .

Q1:这是 access_key 授予我的客户端应用程序与XYZ@hotmail.com或服务主体相同的权限吗?

使用获得的访问密钥,我可以读/写azure blob .

Q2:如果XYZ@hotmail.com没有读/写访问权限(即未分配存储BLOB数据贡献者角色),我的客户端应用程序将无法读取/写入blob, regardless of the Service Principal's role . 这是我感到困惑的地方,我的印象是我的客户端App正在承担服务主体,因此它将具有与服务主体相同的权限,而不是XYZ@hotmail.com . 例如,XYZ @ hotmail.com可以具有贡献者角色(即,读/写),而服务原则将被赋予读者角色 . 在这种情况下,我将拥有对BLOB存储的完全访问权限,而我的客户端应用程序将只具有对BLOB存储的读取权限 . 但是,似乎客户端应用程序获得与XYZ@hotmail.com相同的权限 . 我在这里错过了什么?

1 回答

  • 1

    Q1:这个access_key是否授予我的客户端应用程序与XYZ@hotmail.com或服务主体相同的权限?

    你得到的 access_tokendelegated permissions which onbehalf of XYZ@hotmail.com . 这是因为您使用了Authorization code grant flow .

    我在这里错过了什么?

    对于您的方案,我建议您使用client_credentials flow作为您的应用 .

    With client_credentials flow, you will get access token only with the application permissions configured in AAD. 此外,此访问令牌实际上是您的AAD应用程序本身的一部分 . 如果您为服务主体分配角色,您将获得具有该角色权限的访问令牌 .

    如果您使用授权代码授予流程,您将获得用户的访问令牌,而不是服务主体 . 因此,访问令牌将拥有该用户的权限 .

相关问题