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

时间:2017-03-20 11:13:16

标签: c# .net 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;

给了我 enter image description here

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

Set-AzureRmKeyVaultAccessPolicy -VaultName vaultname -ResourceGroupName location -ObjectId obid -PermissionsToKeys all -PermissionsToSecrets all 

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

2 个答案:

答案 0 :(得分:4)

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

这是一个告诉标志,如果你进入门户网站,然后是Keyvault上的“访问策略”,它会说下面的应用程序+用户。如果您尝试添加用户(已在列表中) - 它将添加第二个用户 - 因此您将拥有2个用户。

所以所需要的只是:

       var accessPolicy = new AccessPolicyEntry
    {

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

    };

    return accessPolicy;

Microsoft文档有时会模糊不清,我相信这是其中之一。

答案 1 :(得分:3)

enter image description here

得到错误:

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

您无权查看这些内容。

关键是要看You are unauthorized to view these contents.

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

enter image description here

您现在可以查看秘密:

enter image description here