以编程方式创建 Azure KeyVault 机密时,如何修复 "Operation 'set' not allowed" 错误?

How do I fix an "Operation 'set' not allowed" error when creating an Azure KeyVault secret programmatically?

我正在尝试使用 Microsoft 以编程方式创建 Azure KeyVault 机密。 Azure.KeyVault.KeyVaultClient。出于我的目的,我将我的身份验证令牌作为 Azure AD 应用程序使用证书进行身份验证。 Azure AD 应用程序的清单中已有证书信息。

我的代码创建了 Azure KeyVault,为 Azure AD 应用程序的对象 ID 提供了对机密和密钥的 "all" 权限。我使用 Powershell 检索 KeyVault 并查看访问策略来验证这是否发生。

当我尝试使用 KeyVaultClient.SetSecretAsync() 在此 KeyVault 上创建机密时,我收到一个异常消息 "Operation 'set' is not allowed.",状态代码为 "Forbidden"。

在 KeyVault 上设置的权限之外,我是否需要确保对任何其他内容(如 Azure AD 应用程序)的任何其他权限?

问题是访问策略不需要您的 Azure AD 应用程序的对象 ID。它实际上需要 Azure AD 应用程序的服务主体的对象 ID。

由于最近在portal.azure.com处添加了"App Registrations",我们可以轻而易举地获取应用程序的对象ID。但是,无法通过 UI(据我所知)获取 Azure AD 应用程序服务主体的对象 ID。您可以通过 Powershell 获取它:

Get-AzureRmADServicePrincipal -ServicePrincipalName <app client ID>

您现在可以在 Key Vault 设置的访问策略 边栏中找到所有有权访问 Key Vault 的已注册应用程序。

我已经为需要帮助的任何人记录了使用 Azure 门户 here 创建和使用服务主体的过程。