所以这很奇怪。我创建了一个KeyVault。我已将服务主体添加到该KV的访问策略中,为其提供所有权限。
我从VSTS运行我的基础架构版本。它有一个步骤,它运行cmdlet Get-AzureKeyVaultSecret
以获取KV的秘密。此步骤已设置服务主体连接并且可以正常工作。
我昨天跑了这个,它工作得很好。我需要再次运行基础架构,因为我已经对ARM模板进行了更改。但当它到达Get-AzureKeyVaultSecret
部分时,它失败了,我收到了这个错误:
Microsoft.Azure.KeyVault.Models.KeyVaultErrorException:Operation 返回了无效的状态代码“未授权”
这没有任何意义。这个完全相同的服务主体之前已经这样做了。什么也没有变。该应用程序仍然在KV的访问策略中。 VSTS的连接仍然有效。
发生了什么事?
答案 0 :(得分:0)
您使用的是Azure AD吗?您可以使用以下内容获取应用程序:
$application = Get-AzureRmADApplication | ? { $_.DisplayName -match "xxx" }
Get-AzureRmADServicePrincipal | ? { $_.DisplayName -match "xxx" }
Get-AzureRmADAppCredential -ApplicationId $application.ApplicationId
这应该确定应用程序是否设置正确且主体的凭证是否未过期等。
那看起来不错,那么你需要检查密钥保管库的权限是否分配给主体(而不是应用程序)的ObjectId。
如果这也是正确的,那么代码可能会在您认为的凭据下运行时出现问题。您可以尝试打开密钥保管库的日志记录(在Azure门户中的诊断日志下),这应该可以为您提供有关正在进行的操作的信息。
答案 1 :(得分:0)
正如Dainel所说,您应该检查您的用户的对象ID是否正确。它与SO上的这个question类似。
您可以在Enterprise applications - All applications
而非App registrations
找到对象ID。
您还可以使用Power Shell获取对象ID。
Get-AzureADServicePrincipal