在 Azure DevOps (ADO) 服务主体中使用的“应用注册”执行调用 Set-AzKeyVaultAccessPolicy
的 IaC 发布管道需要哪些 Azure AD 权限?
我正在尝试为 Microsoft.ManagedIdentity/userAssignedIdentities
添加对 Key Vault 的访问权限。
我看到的错误是:
“警告:请确保您在 AD Graph 中有足够的权限来获取和列出图形对象以进行验证。否则跳过女巫 -BypassObjectIdValidation
。”
当我使用个人登录名进行本地测试时,脚本运行良好,添加了访问策略,并且“托管身份”能够访问 Key Vault 机密。我已经能够在 ADO 中使用 -BypassObjectIdValidation
作为解决方法,但这似乎是一种黑客行为。所有 Azure 资源都在同一个订阅中,所有对象都在同一个 Azure 租户中,因此我认为我不需要使用旁路开关。
附加信息:
深入研究 Microsoft 的来源,我进一步确信问题出在服务主体的 AAD 权限内。例如,以下代码正在调用 Graph
。
if (!this.BypassObjectIdValidation.IsPresent && ActiveDirectoryClient != null)
{
objId = GetObjectId(this.ObjectId, this.UserPrincipalName, this.EmailAddress, this.ServicePrincipalName);
}
else if (ActiveDirectoryClient == null && objId == null)
{
throw new Exception(Resources.ActiveDirectoryClientNull);
}
继续深入:
adObjects = GraphClient.Objects.GetObjectsByObjectIds(new GetObjectsParameters { ObjectIds = objectIdBatch, IncludeDirectoryObjectReferences = true });
答案 0 :(得分:1)
显然问题是“已知产品限制”。 https://github.com/Azure/azure-powershell/issues/10029#issuecomment-664485033
因此似乎没有可以设置使命令行开关在没有开关的情况下工作的权限组合。
答案 1 :(得分:0)
这是 RBAC 角色对 Key Vault 的访问控制权限。
我们的设置为订阅提供了 Azure DevOps 服务连接主体 Contributor
,这就足够了。文档证实,事实上,您应该小心谁在您的 Vault 上拥有 Contributor
,因为他们可以为自己提供访问策略(他们通常不能在 Azure 中)。
如果您想要更少的权限,我会尝试 User Access Administrator
或 Key Vault Administrator.