WSO2 APIM 2.1多租户环境下网关可见性租户隔离配置咨询
限制WSO2 APIM 2.1中租户的网关可见性
我之前在处理WSO2 APIM 2.1的多租户网关隔离需求时,刚好遇到过类似的问题,下面是经过验证的可行方案,能让A租户仅能使用AWS网关、B租户仅能使用Azure网关:
1. 为每个租户创建专属的网关环境配置
默认情况下,所有网关环境都存放在全局注册表的/_system/governance/apimgt/applicationdata/environments.xml中,所有租户都能访问这个资源。我们需要拆分出租户专属的配置:
- 登录超级租户的Carbon控制台(
https://<你的APIM地址>:9443/carbon),进入注册表 → 浏览。 - 导航到
/_system/governance/apimgt/applicationdata/,复制environments.xml到每个租户的专属路径下,比如:- 租户A:
/_system/governance/apimgt/applicationdata/your-tenant-a-domain/environments.xml - 租户B:
/_system/governance/apimgt/applicationdata/your-tenant-b-domain/environments.xml
- 租户A:
- 编辑每个租户的
environments.xml,只保留对应租户的网关配置——比如租户A的文件只留AWS网关的节点,租户B只留Azure网关的节点。
2. 配置注册表资源的权限隔离
接下来要确保每个租户只能访问自己的网关配置,看不到全局的和其他租户的:
- 回到全局注册表的
/_system/governance/apimgt/applicationdata/environments.xml,右键点击该资源 → 权限 → 编辑权限。 - 移除所有非超级租户的角色权限,只保留超级租户的
admin角色有读/写权限,这样普通租户就无法访问全局的网关列表了。 - 分别处理租户A和B的专属
environments.xml:- 给租户A的配置文件添加权限:只允许租户A的
admin、API Creator、Developer角色拥有读权限。 - 租户B的配置文件同理,只开放给租户B的对应角色。
- 给租户A的配置文件添加权限:只允许租户A的
3. 修改APIM配置,让Publisher加载租户专属网关
默认情况下,API Publisher会读取全局的网关配置,我们需要修改配置让它动态加载当前租户的专属文件:
- 打开APIM节点的
<APIM_HOME>/repository/conf/api-manager.xml文件。 - 找到
<Environments>配置段,修改<ConfigLocation>属性为带租户变量的路径:
这里的<Environments> <Location>${carbon.home}/repository/deployment/server/synapse-configs/default</Location> <ConfigLocation>/_system/governance/apimgt/applicationdata/${tenant.domain}/environments.xml</ConfigLocation> </Environments>${tenant.domain}会自动替换为当前登录租户的域名,这样每个租户登录Publisher时,只会加载自己专属的网关配置。
4. 验证效果
- 用租户A的账号登录API Publisher,尝试部署API,应该只能看到AWS网关选项。
- 用租户B的账号登录,应该只能看到Azure网关选项。
- 超级租户账号仍然可以看到所有网关,方便全局管理。
额外提醒
- WSO2 APIM 2.1是比较旧的版本,后续升级到3.2及以上版本后,会有更原生的租户级网关隔离功能,配置起来更简单。但针对2.1版本,上述方法是最可靠的实现方式。
- 如果后续新增租户或网关,重复上述步骤即可,确保每个租户的专属配置和权限都正确设置。
内容的提问来源于stack exchange,提问作者tom vesely
相关产品推荐
相关产品推荐

