我正在使用带有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;
然后出现列表错误,所以我必须使用
Set-AzureRmKeyVaultAccessPolicy -VaultName vaultname -ResourceGroupName location -ObjectId obid -PermissionsToKeys all -PermissionsToSecrets all
这将消除错误,但我更喜欢一个解决方案,所以我可以使用.NET SDK来解决。
答案 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)