Set-AzKeyVaultAccessPolicy 的服务主体所需的 Azure AD 权限

时间:2021-02-25 19:51:21

标签: azure-devops azure-active-directory azure-keyvault

在 Azure DevOps (ADO) 服务主体中使用的“应用注册”执行调用 Set-AzKeyVaultAccessPolicy 的 IaC 发布管道需要哪些 Azure AD 权限?

我正在尝试为 Microsoft.ManagedIdentity/userAssignedIdentities 添加对 Key Vault 的访问权限。

我看到的错误是: “警告:请确保您在 AD Graph 中有足够的权限来获取和列出图形对象以进行验证。否则跳过女巫 -BypassObjectIdValidation。”

我尝试了多种 AAD“读取”权限组合。我恢复的当前权限是: enter image description here

当我使用个人登录名进行本地测试时,脚本运行良好,添加了访问策略,并且“托管身份”能够访问 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);
}

来源:https://github.com/Azure/azure-powershell/blob/a31eaed8e1d4f52752222d138436ce975b05dd5f/src/KeyVault/KeyVault/Commands/SetAzureKeyVaultAccessPolicy.cs#L519

继续深入:

adObjects = GraphClient.Objects.GetObjectsByObjectIds(new GetObjectsParameters { ObjectIds = objectIdBatch, IncludeDirectoryObjectReferences = true });

来源:https://github.com/Azure/azure-powershell/blob/a31eaed8e1d4f52752222d138436ce975b05dd5f/src/Resources/Resources/ActiveDirectory/Models/ActiveDirectoryClient.cs#L280

2 个答案:

答案 0 :(得分:1)

显然问题是“已知产品限制”。 https://github.com/Azure/azure-powershell/issues/10029#issuecomment-664485033

在帮助文档的大约三分之一处: enter image description here

来源:https://docs.microsoft.com/en-us/powershell/module/az.keyvault/set-azkeyvaultaccesspolicy?view=azps-5.5.0#description

因此似乎没有可以设置使命令行开关在没有开关的情况下工作的权限组合。

答案 1 :(得分:0)

这是 RBAC 角色对 Key Vault 的访问控制权限。

我们的设置为订阅提供了 Azure DevOps 服务连接主体 Contributor,这就足够了。文档证实,事实上,您应该小心谁在您的 Vault 上拥有 Contributor,因为他们可以为自己提供访问策略(他们通常不能在 Azure 中)。

如果您想要更少的权限,我会尝试 User Access AdministratorKey Vault Administrator.