本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本主题介绍了如何在 Apigee 组织中的 Apigee 空间之间移动 API 资源(API 代理、共享流和 API 产品)。用户可以在组织和空间级别之间或在空间之间移动资源。如需移动、管理或查看组织或空间中的 API 资源,用户必须拥有相关组织或空间的适当权限。
将 API 资源从组织迁移到空间
在 Apigee 组织中创建的 API 资源可以从组织级别移到空间,反之亦然。移动到某个空间的 API 资源会继承该空间的 IAM 政策。如需将 API 资源从组织级层移至空间,用户必须拥有以下权限:
- 针对源范围(资源当前所在的组织或空间)的
apigee.RESOURCE_TYPE.move。RESOURCE_TYPE 的有效值包括
apis、sharedflows或apiproducts,具体取决于移动的 API 资源的类型。 - 针对目标范围(要移动资源所在的组织或空间)的
apigee.RESOURCE_TYPE.create。RESOURCE_TYPE 的有效值包括
apis、sharedflows或apiproducts,具体取决于移动的 API 资源的类型。
如需将组织级 API 资源移至某个空间,请使用以下命令:
curl "https://apigee.googleapis.com/v1/organizations/ORG_NAME/RESOURCE_TYPE/RESOURCE_ID:move?space=SPACE_NAME" \ -X POST -H "Authorization: Bearer $TOKEN"
其中:
- ORG_NAME 是您的 Apigee 组织的名称。
- RESOURCE_TYPE 是要列出的资源的类型。有效值包括:
apissharedflowsapiproducts
- RESOURCE_ID 是要移动的 API 代理、共享流或 API 产品的名称。
- SPACE_NAME 是您要移动资源的空间的名称。
例如,通过以下命令,拥有 acme 组织的 Apigee Organization Admin 角色的用户会将名为 demo 的 API 代理从组织级别移至 red 空间:
curl "https://apigee.googleapis.com/v1/organizations/acme/apis/demo:move?space=red" \ -X POST -H "Authorization: Bearer $TOKEN"
响应应类似如下所示:
{
"metaData": {
"createdAt": "1739489725993",
"lastModifiedAt": "1741724822852",
"subType": "Proxy"
},
"name": "demo",
"revision": [
"1",
"2"
],
"apiProxyType": "PROGRAMMABLE",
"space": "red"
}将 demo API 代理移至 red 空间后,red 空间的成员可以访问该代理,即使他们没有访问组织级资源的权限也是如此。其他空间的成员(不是 red 空间的成员)无法查看或访问 demo 代理。
如果您没有正确的组织级或空间级权限,尝试访问 demo 代理会导致以下错误:
{
"error": {
"code": 403,
"message": "Permission denied on resource \"organizations\/acme\/apis\/demo\" (or it may not exist).",
"status": "PERMISSION_DENIED"
}
}如需将 API 资源从某个空间移至组织级别,请使用以下命令(其中省略了 space 查询参数):
curl "https://apigee.googleapis.com/v1/organizations/ORG_NAME/RESOURCE_TYPE/RESOURCE_ID:move" \ -X POST -H "Authorization: Bearer $TOKEN"
其中:
- ORG_NAME 是您的 Apigee 组织的名称。
- RESOURCE_TYPE 是要列出的资源的类型。有效值包括:
apissharedflowsapiproducts
- RESOURCE_ID 是要移动的 API 代理、共享流或 API 产品的名称。
在多个空间之间移动 API 资源
API 资源可以在 Apigee 组织中的各个空间之间移动。移动到某个空间的 API 资源会继承该空间的 IAM 政策。如需在 Apigee 组织中的各个空间之间移动 API 资源,用户必须拥有以下权限:
- 当前 API 资源所在的空间的
apigee.RESOURCE_TYPE.move。RESOURCE_TYPE 的有效值包括
apis、sharedflows或apiproducts,具体取决于要移动的 API 资源的类型。 - 要将 API 资源移至的空间的
apigee.RESOURCE_TYPE.create。RESOURCE_TYPE 的有效值包括
apis、sharedflows或apiproducts,具体取决于要移动的 API 资源的类型。
为这两个空间分配了 apigee.spaceContentEditor 角色的用户将拥有所需的权限。
如需在 Apigee 组织中的各个空间之间移动 API 资源,请使用以下命令:
curl "https://apigee.googleapis.com/v1/organizations/ORG_NAME/RESOURCE_TYPE/RESOURCE_ID:move?space=SPACE_NAME" \ -X POST -H "Authorization: Bearer $TOKEN"
其中:
- ORG_NAME 是您的 Apigee 组织的名称。
- RESOURCE_TYPE 是要列出的资源的类型。有效值包括:
apissharedflowsapiproducts
- RESOURCE_ID 是要移动的 API 代理、共享流或 API 产品的名称。
- SPACE_NAME 是新空间的名称。
例如,如果用户对 red 空间拥有 apigee.proxies.move 权限,对 blue 空间拥有 apigee.proxies.create 权限,则可以使用以下命令将 demo API 代理从 red 空间移至 blue 空间:
curl "https://apigee.googleapis.com/v1/organizations/acme/apis/demo:move?space=blue" \ -X POST -H "Authorization: Bearer $TOKEN"
响应应类似如下所示:
{
"basepaths": ["/demo"],
"revision": 1,
"apiProxyId": "demo",
"space_id": "blue",
"createTime": ...,
"updateTime": ...
}在此示例中,用户无需拥有组织级权限,只需拥有每个空间的 setIamPolicy 绑定设置的必需权限即可。
如果尝试在未获得两个空间的正确权限的情况下移动 demo API 代理,则会导致以下错误:
{
"error": {
"code": 403,
"message": "Permission denied on resource \"organizations\/acme\/apis\/demo\" (or it may not exist).",
"status": "PERMISSION_DENIED"
}
}