Azure Keyvault - "保管策略不允许""操作"列表"但是会检查所有权限

Pik*_*ops 6 .net c# powershell azure azure-keyvault

我正在使用带有AAD应用程序的.NET客户端访问KeyVault.虽然为这个AAD应用程序启用了秘密下的所有权限(下面的屏幕截图),但是如果我导航到"秘密"面板,我将在"此密钥库的访问策略中未启用"操作"列表".

我希望能够通过AAD应用程序设置权限,因此使用Powershell不是一个选项.

如果我通过Powershell设置权限 - 它确实有效.

我如何创建访问策略:

        var accessPolicy = new AccessPolicyEntry
        {

            ApplicationId = app,
            ObjectId = Obid,
            PermissionsRawJsonString = "{ \"keys\": [ \"all\" ], \"secrets\": [ \"all\"  ], \"certificates\": [ \"all\" ] }",
            TenantId = ten,

        };

        return accessPolicy;
Run Code Online (Sandbox Code Playgroud)

这给了我 在此输入图像描述

然后出现列表错误,所以我必须使用

Set-AzureRmKeyVaultAccessPolicy -VaultName vaultname -ResourceGroupName location -ObjectId obid -PermissionsToKeys all -PermissionsToSecrets all 
Run Code Online (Sandbox Code Playgroud)

这将摆脱错误,但我更喜欢一个解决方案,所以我可以使用.NET SDK来解决.

Ogg*_*las 15

在此处输入图片说明

得到错误:

此密钥保管库的访问策略中未启用“列表”操作。

您无权查看这些内容。

这里的关键是看 You are unauthorized to view these contents.

导航到Access policies您当前登录的用户并将其添加为具有至少List特权的主体:

在此处输入图片说明

您现在可以查看机密(如果有):

在此处输入图片说明


Hor*_*oma 11

我有同样的问题和解决办法是让我的保管库的Access Policies刀片,然后点击我的应用程序,并激活ListKey permissions/Secret permissions


Pik*_*ops 6

经过多年尝试解决此问题-问题出在访问策略代码中。当用户在代码中注册时-它会将自己与应用ID关联。应用程序ID是一个问题,因为它认为用户是应用程序和用户。

明显的迹象是,如果您进入门户网站,则进入Keyvault上的“访问策略”,并在下面说“应用程序+用户”。如果您尝试添加一个用户(已经在列表中),它将添加第二个用户,因此您将拥有两个相同的用户。

因此,所有需要做的是:

       var accessPolicy = new AccessPolicyEntry
    {

        ApplicationId = app, // Delete this line
        ObjectId = Obid,
        PermissionsRawJsonString = "{ \"keys\": [ \"all\" ], \"secrets\": [ \"all\"  ], \"certificates\": [ \"all\" ] }",
        TenantId = ten,

    };

    return accessPolicy;
Run Code Online (Sandbox Code Playgroud)

Microsoft文档有时可能含糊不清,我相信这就是其中之一。