Oracle Cloud中通过CLI和SDK实现跨租户访问
可以通过OCI CLI和Python SDK实现跨租户访问
在已配置好跨租户Endorse/Admit策略的前提下,完全可以通过OCI CLI或Python SDK实现从Tenancy1(登录租户)访问Tenancy2(目标租户)的资源,结合动态组的配置步骤如下:
一、OCI CLI 实现方式
1. 直接指定目标租户OCID
调用CLI命令时,通过--tenancy-id参数显式指定Tenancy2的OCID,即可绕过默认的登录租户(Tenancy1),直接访问目标租户资源。
示例命令(列出Tenancy2下某 compartment 的计算实例):
oci compute instance list \ --tenancy-id ocid1.tenancy.oc1..xxxxxx \ --compartment-id ocid1.compartment.oc1..xxxxxx
2. 结合动态组配置
如果使用Tenancy1中的动态组访问Tenancy2资源:
- 确保Tenancy1的Endorse策略已授权该动态组访问Tenancy2:
Endorse dynamic-group Tenancy1-Dynamic-Group to manage all-resources in tenancy Tenancy2-OCID - Tenancy2的Admit策略需接受该动态组:
Admit dynamic-group Tenancy1-Dynamic-Group from tenancy Tenancy1-OCID to manage all-resources in compartment Tenancy2-Target-Compartment - CLI使用与动态组关联的身份(比如实例主身份)时,只需在命令中指定Tenancy2的OCID即可,无需额外配置登录信息(实例主身份会自动使用Tenancy1的身份凭证)。
二、Python SDK 实现方式
1. 初始化客户端时指定目标租户OCID
加载默认配置(基于Tenancy1的身份凭证)后,在创建服务客户端时显式传入tenancy_id参数为Tenancy2的OCID。
示例代码(列出Tenancy2下的计算实例):
import oci # 加载Tenancy1的身份配置 config = oci.config.from_file() # 创建Compute客户端,指定Tenancy2的OCID compute_client = oci.core.ComputeClient(config) compute_client.base_client.set_tenancy_id("ocid1.tenancy.oc1..xxxxxx") # 调用API查询Tenancy2的资源 response = compute_client.list_instances(compartment_id="ocid1.compartment.oc1..xxxxxx") print(response.data)
2. 结合动态组配置
与CLI逻辑一致:
- 确保Tenancy1的动态组已被Endorse,Tenancy2的Admit策略允许该动态组操作目标资源;
- SDK使用的身份(如实例主身份)需属于Tenancy1的动态组,初始化客户端时指定Tenancy2的OCID即可完成跨租户访问。
关键注意事项
- 所有跨租户操作的权限边界由Tenancy1的Endorse策略和Tenancy2的Admit策略共同控制,需确保策略的权限范围、资源类型匹配实际需求;
- 如果使用用户身份而非实例主身份,需确保该用户在Tenancy1中拥有被Endorse的权限,且CLI/SDK的配置文件使用该用户的凭证。
内容的提问来源于stack exchange,提问作者Somesh Garje
相关产品推荐
相关产品推荐

