我正在使用 .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 保管库的访问策略中未启用“列表”操作。”
注意:- 如上面的代码所示“已授予所有权限”。我可以在 azure 门户中看到它。
我尝试过的:- 我试图引用以下堆栈溢出问题的答案
- Azure Keyvault - "Operation "list" is not allowed by vault policy" but all permissions are checked
- How do I fix an "Operation 'set' not allowed" error when creating an Azure KeyVault secret programmatically?
根据上述 stackoverflow 答案“需要传递 Azure AD 应用程序的服务主体的对象 ID,而不是 Azure AD 应用程序的对象 ID”。
我尝试使用以下 powershell 脚本找出 azure AD 应用程序的服务主体的对象 ID
Get-AzADServicePrincipal -ServicePrincipalName "<app client ID>"
它给出了以下结果
我尝试在 AccessPolicyEntry 的 objectId 中使用“Id”(在上面的屏幕截图中),但没有解决问题。
问题:-
- 是否需要在 AccessPolicyEntry 中设置其他权限?
- AccessPolicyEntry 中的 objectID 应该是什么(目前,我提供的是 Azure AD 应用程序的 objectID)?
- 如果需要服务主体的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/