如何列出Oracle Cloud Infrastructure所有Identity Domains中的用户?
OCI跨身份域用户列表查询方案
可以获取其他Identity Domains的用户,你之前调用的接口属于OCI旧版IAM兼容接口,本身仅支持Default域,需要使用身份域专属的接口集完成跨域用户查询。
旧接口无法查询非Default域用户的原因
- 你之前使用的
oci iam user list命令、旧版Core IAM REST API(路径前缀为/20160918/的用户接口)、Go SDK里老版IdentityClient的ListUsers方法,是OCI上线多身份域能力之前的遗留接口,设计上就硬绑定Default身份域,没有预留身份域入参位置,无论你使用哪个域的账号完成认证,调用这类接口都只会返回Default域下的用户,和认证身份所属域没有关系。
跨域查询用户的正确实现方式
OCI CLI场景
不要使用旧版iam user子命令组,改用身份域专属的用户查询命令:
- 先查询租户下所有身份域的OCID和基础信息:
oci iam domain list --compartment-id <你的租户根 compartment OCID> - 传入目标域的OCID,查询对应域下的用户列表:
全量拉取时可以加oci iam domain user list --domain-id <目标身份域OCID> --compartment-id <租户根 compartment OCID>--all参数,CLI会自动遍历所有分页返回完整结果。
REST API场景
弃用旧版/20160918/Users接口,使用Identity Domains服务的SCIM标准接口:
- 先调用ListDomains接口获取目标域的专属API服务端点,返回结果里的
url字段即为对应域的端点地址 - 向对应端点发起GET请求拉取用户列表:
请求携带标准的OCI请求签名头即可,接口支持通过GET https://<目标域服务端点>/admin/v1/Userscount参数调整单页返回条数,通过返回结果里的分页标记遍历拉取全量数据。
Go SDK场景
不要使用旧版IdentityClient的用户查询方法,初始化IdentityDomainsClient客户端:
- 初始化客户端时填入目标身份域的专属服务端点
- 调用客户端的
ListUsers方法,传入请求参数时指定目标域的OCID、所在compartment OCID - 循环处理分页返回结果直到没有下一页标记,即可拿到该域下全量用户
全租户全量用户拉取流程
如果需要获取整个Oracle Cloud环境下的全部用户,按以下步骤执行即可:
- 调用ListDomains接口拉取租户下所有身份域的列表,拿到每个域的OCID、服务端点
- 遍历所有身份域,分别调用对应域的用户查询接口拉取单域全量用户
- 合并所有域的用户结果,即为全环境完整用户列表
权限提示:执行查询操作的账号,需要被授予目标身份域的
identity domains:user read权限,旧版IAM的inspect users权限仅对Default域的旧版接口生效,无法用于其他身份域的用户查询。
内容的提问来源于stack exchange,提问作者MWCD
相关产品推荐
相关产品推荐

