Set-AzKeyVaultAccessPolicy 的服务主体所需的 Azure AD 权限
Azure AD Permissions Needed for Service Principal for Set-AzKeyVaultAccessPolicy
Azure DevOps (ADO) 服务主体中使用的 'App registration' 执行调用 Set-AzKeyVaultAccessPolicy
的 IaC 发布管道所需的 Azure AD 权限是什么?
我正在尝试为 Microsoft.ManagedIdentity/userAssignedIdentities
添加对 Key Vault 的访问权限。
我看到的错误是:
“警告:请确保您在 AD Graph 中有足够的权限来获取和列出图形对象以进行验证。否则跳过 -BypassObjectIdValidation
。”
我尝试了多种 AAD 'read' 权限组合。我已恢复的当前权限是:
当我使用我的个人登录在本地进行测试时,脚本工作正常,添加了访问策略,并且 'Managed Identity' 能够访问 Key Vault 机密。我已经能够使用 -BypassObjectIdValidation
作为 ADO 中的解决方法,但这似乎是一种 hack。所有 Azure 资源都在同一个订阅中,所有对象都在同一个 Azure 租户中,所以对我来说,我应该需要使用旁路 s.
没有意义
附加信息:
深入了解 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 });
这是 RBAC 角色对 Key Vault 的访问控制权限。
我们的设置在订阅上提供了 Azure DevOps 服务连接主体 Contributor
,这就足够了。文档证实,事实上您应该小心谁在您的 Vault 上拥有 Contributor
,因为他们可以为自己提供访问策略(他们通常不能在 Azure 中这样做)。
如果你想要更少的权限,我会尝试 User Access Administrator
或 Key Vault Administrator.
显然问题是 'known product limitation'。
https://github.com/Azure/azure-powershell/issues/10029#issuecomment-664485033
帮助文档中大约三分之一的地方:
所以似乎没有可以设置的权限组合来启用 commandlet 在没有开关的情况下工作。
Azure DevOps (ADO) 服务主体中使用的 'App registration' 执行调用 Set-AzKeyVaultAccessPolicy
的 IaC 发布管道所需的 Azure AD 权限是什么?
我正在尝试为 Microsoft.ManagedIdentity/userAssignedIdentities
添加对 Key Vault 的访问权限。
我看到的错误是:
“警告:请确保您在 AD Graph 中有足够的权限来获取和列出图形对象以进行验证。否则跳过 -BypassObjectIdValidation
。”
我尝试了多种 AAD 'read' 权限组合。我已恢复的当前权限是:
当我使用我的个人登录在本地进行测试时,脚本工作正常,添加了访问策略,并且 'Managed Identity' 能够访问 Key Vault 机密。我已经能够使用 -BypassObjectIdValidation
作为 ADO 中的解决方法,但这似乎是一种 hack。所有 Azure 资源都在同一个订阅中,所有对象都在同一个 Azure 租户中,所以对我来说,我应该需要使用旁路 s.
附加信息:
深入了解 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 });
这是 RBAC 角色对 Key Vault 的访问控制权限。
我们的设置在订阅上提供了 Azure DevOps 服务连接主体 Contributor
,这就足够了。文档证实,事实上您应该小心谁在您的 Vault 上拥有 Contributor
,因为他们可以为自己提供访问策略(他们通常不能在 Azure 中这样做)。
如果你想要更少的权限,我会尝试 User Access Administrator
或 Key Vault Administrator.
显然问题是 'known product limitation'。 https://github.com/Azure/azure-powershell/issues/10029#issuecomment-664485033
帮助文档中大约三分之一的地方:
所以似乎没有可以设置的权限组合来启用 commandlet 在没有开关的情况下工作。