【App Service】为应用服务添加Key Vault证书时遇见的RBAC问题之两个困扰人的坑

问题描述

为了安全,需要为App Service访问添加HTTPS证书。

为了更加安全,需要把证书放在Key Vault的证书中进行保存。

为了更加更加安全,App Service访问Key Vault中的证书时候,需要通过RBAC访问,替代了Key Vault中之前的Access Policy方式。

为了以上的三重安全,使用RBAC导入证书的时候,需要遇见两个困扰人的大坑。

**坑一:**在门户上操作App Service Add Certficates时,无法加载Key Vault中的证书列表以供选择。

报错:The operation is not allowed by RBAC. If role assignments were recently changed, please wait several minutes for role assignments to become effective.

**坑二:**当上一个坑解决后,当点击Add后,依旧出现无权限访问问题。

报错:The service does not have access to '/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/00-000-00/providers/microsoft.keyvault/vaults/0000000' Key Vault. Please make sure that you have granted necessary permissions to the service to perform the request operation.

问题解答

以上两个坑,都是RBAC之后的权限问题。

只是从直观的错误信息上,无法得出具体的错误信息。如果需要查看详细的错误消息,必须开启Key Vault的诊断日志。

如把Key Vault的诊断日志开启之后,以上两个坑的详细错误就可以从 【 AzureDiagnostics | where ResultSignature == "Forbidden" | distinct ResultDescription 】中得到具体是哪一个Application ID无法访问,是缺少什么权限的问题。

比如以上两个坑的Key Vault Audit日志显示:

当得到详细的错误信息后,就非常容易解决这个权限(Forbidden)问题。分别为当前登录的用户添加"Key Vault Certificate User "权限和为"Microsoft.Azure.WebSites " 添加 "Key Vault Secrets User" 权限。

最后总结

要想成功配置RBAC认证方式,从App Service加载Key Vault证书,需要如下三个赋权步骤(均在Azure Key Vault的Access Control页面完成):

1:为这个App Service的Identity添加"Key Vault Certificate User"权限。

2:为当前登录Azure页面的用户添加"Key Vault Certificate User"权限。

3:为"Microsoft.Azure.WebSites " 添加 "Key Vault Secrets User" 权限。注:第三个权限与前两个不一样。

参考资料

导入来自密钥保管库的证书: https://docs.azure.cn/zh-cn/app-service/configure-ssl-certificate#import-a-certificate-from-key-vault

通过密钥保管库使用Azure RBAC 机密、密钥和证书权限 : https://docs.azure.cn/zh-cn/key-vault/general/rbac-guide?tabs=azure-cli#using-azure-rbac-secret-key-and-certificate-permissions-with-key-vault
启用日志记录:https://docs.azure.cn/zh-cn/key-vault/general/howto-logging?tabs=azure-portal