经过一天的努力,终于可以寻求帮助了。我正在尝试使用Azure Key Vault在Typescript应用程序中存储一些配置。我已经在Azure Active Directory和Key Vault中创建了服务原理。在“密钥保管箱”中,我已转到“角色分配”,并为应用程序指定了角色“密钥保管箱秘密”用户(应提供列表和读取权限)。据我所知,我的应用程序正在成功进行身份验证,但是当它请求一个秘密时,它得到的是403。我可能遗漏了什么步骤?
表明身份验证成功的日志
azure:identity:info IdentityClient: [https://login.microsoftonline.com/38e3589f-a40f-4fe6-beee-f4028442450e/oauth2/v2.0/token] token acquired, expires on 1593536920022
记录失败
The user, group or application 'appid=355ca45f-a94f-43e6-9234-65c713965c9b;oid=524f25bb-ee3f-4216-8474-1f01fd79f1f8;iss=https://sts.windows.net/38e3589f-a40f-4fe6-beee-f4028442450e/' does not have secrets get permission on key vault '<MyVault>;location=westus2'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287
答案 0 :(得分:1)
我错过的步骤是添加访问策略。我不了解访问控制(IAM)和访问策略之间的区别,所以我不明白为什么两者都需要。希望这对其他人有帮助。
答案 1 :(得分:1)
我不了解访问控制(IAM)和访问策略之间的区别,所以我不明白为什么两者都需要。
实际上,要访问密钥库中的秘密,Access Policies
中的许可就足够了。
对密钥库的访问分为两个部分:管理平面(Access control (IAM)
)和数据平面(Access Policies
)。
管理平面中的权限使您可以管理密钥库,例如设置Key Vault标签后,数据平面中的权限使您可以对秘密,密钥,证书进行操作。
在您的情况下,即使您为应用程序(服务主体)在Access control (IAM)
中授予RBAC角色,它也没有访问秘密的权限,因此您需要将其添加到{{1 }}。
您应该注意的是,有些角色有权添加访问策略,例如access policies
,这意味着如果您将角色赋予您的应用程序,它将能够将其自身添加到访问策略中。但是,如果它没有将自身添加到访问策略中,则将没有数据平面权限。
有关更多详细信息,请参阅此文档-Secure access to a key vault。