我们有一个应用服务需要访问Azure上的密钥库。我们有两个订阅,其中一个运行良好。另一个是新的,我们得到这个错误(c#代码在app服务):
Microsoft.Azure.Management.ApiManagement.Models.ErrorResponseException:
Operation returned an invalid status code 'Forbidden'
at Microsoft.Azure.Management.ApiManagement.CertificateOperations.DeleteWithHttpMessagesAsync
(String resourceGroupName,
String serviceName,
String certificateId,
String ifMatch,
Dictionary`2 customHeaders,
CancellationToken cancellationToken)
at Microsoft.Azure.Management.ApiManagement.CertificateOperationsExtensions.DeleteAsync
(ICertificateOperations operations,
String resourceGroupName,
String serviceName,
String certificateId,
String ifMatch,
CancellationToken cancellationToken)
我们已经比较了几乎所有的资源,设置,密钥,权限,访问策略,管理身份,所有我们认为可能导致这个问题,但它仍然不工作。代码是相同的,所以它不是来自那里。一定是一些明显的错误,但这个错误信息绝对没有告诉我们根本原因是什么。
谁能指出我们错过的场景?如果这与运行应用程序服务的帐户有关,我们如何/在哪里可以知道Azure上的帐户是什么?
在我们的案例中,问题是:
- 客户端证书实际存储在APIM中,而不是KV中。
- 服务需要API管理服务贡献者权限而不是贡献者权限才能对存储在APIM中的证书执行操作。
文档:https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles
贡献者→授予管理所有资源的完全访问权限
API管理服务贡献者→可以管理服务和api