问题描述
为了安全,需要为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