Azure Keyvault - "The operation "列表“在此 Key Vault 的访问策略中未启用。”以编程方式创建 KeyVault 时

标签 azure azure-keyvault

我正在使用 .net core 2.1 和 OpenIdConnect 以及以下 AccessPolicies 创建 azure keyvault

 AccessPolicies = new List<AccessPolicyEntry>()
                {
                    new AccessPolicyEntry
                    {
                        TenantId = Guid.Parse(tenantId),
                        ObjectId = objectId,
                        Permissions = new Permissions
                        {
                          Secrets = new List<string> { "all" },
                          Keys = new string[] { "all" },
                          Certificates = new string[]{"all" }
                        }
                    }
                }

使用它,现在我可以创建 keyvault,但是当转到新创建的 keyvault(在 Azure 门户中)设置 Blade {Key,Secret,Certificate} 时,它会显示警告 “此 key 保管库的访问策略中未启用“列表”操作。” enter image description here

注意:- 如上面的代码所示“已授予所有权限”。我可以在 azure 门户中看到它。

我尝试过的:- 我试图引用以下堆栈溢出问题的答案

根据上述 stackoverflow 答案“需要传递 Azure AD 应用程序的服务主体的对象 ID,而不是 Azure AD 应用程序的对象 ID”。

我尝试使用以下 powershell 脚本找出 azure AD 应用程序的服务主体的对象 ID

Get-AzADServicePrincipal -ServicePrincipalName "<app client ID>"

它给出了以下结果

enter image description here

我尝试在 AccessPolicyEntry 的 objectId 中使用“Id”(在上面的屏幕截图中),但没有解决问题。

问题:-

  1. 是否需要在 AccessPolicyEntry 中设置其他权限?
  2. AccessPolicyEntry 中的 objectID 应该是什么(目前,我提供的是 Azure AD 应用程序的 objectID)?
  3. 如果需要服务主体的objectId。如何以编程方式获取它?

最佳答案

好吧,我可以在我这边重现您的问题。

首先,操作传递服务主体的对象 ID 而不是 Azure AD 应用程序的对象 ID 是完全正确的。将访问策略中的所有权限授予服务主体后,服务主体将拥有该权限。

但是当您检查门户中的 keyvault 时,您使用的是登录 Azure 门户的用户帐户而不是服务主体,因此导致了警告。

因此,如果您想修复该警告,只需通过门户中的 + 添加访问策略 按钮在访问策略 中添加您的用户帐户,或者您也可以指定代码中用户帐户的对象 ID 以及创建 keyvault 时的权限。

然后关于你的问题:

Is any other permission need to set in AccessPolicyEntry?

不,权限足够了。

What should be the objectID in AccessPolicyEntry(currently, I am giving obectId of Azure AD application)?

您不应该使用 AD 应用程序的对象 ID,您的选择是使用服务主体/安全组/用户帐户的对象 ID,这取决于您的要求,详细信息 here

If needed objectId of service principal. how can get it programmatically?

您可以使用之前使用的 powershell 命令,或通过服务主体名称使用 Azure CLI az ad sp show

或者,如果您可以将 Microsoft Graph SDK for C#filter 一起使用,例如:

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var serviceprincipals = await graphClient.Serviceprincipals
    .Request().
    .Filter("some condition").
    .GetAsync();

关于Azure Keyvault - "The operation "列表“在此 Key Vault 的访问策略中未启用。”以编程方式创建 KeyVault 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63488864/

相关文章:

Azure 流分析和 PowerBI DAX

powershell - 用于在管道中跨数据集循环的 Azure PowerShell 代码

azure - 如何将 `docker login` 发送到 OpenShift Docker 注册表

azure - 使用 Azure Key Vault 中的 secret 替换 VSTS JSON 变量

UWP/WinUI 桌面应用访问 Azure Key Vault secret

django - 如何将 Django 与 Azure Cosmos DB 结合使用?

Azure kubernetes - java spring应用程序和托管身份来访问 key 保管库?

python - 在 Python 中访问 Azure Key Vault 时出现意外的关键字参数 'tenant_id'

c# - 通过 C# 访问 Azure 中的 keyvault 时引发异常

c# - Azure ACS 凭据困惑