在 Apigee 空间中移动 API 资源

查看 Apigee Edge 文档。

本主题介绍了如何在 Apigee 组织中的 Apigee 空间之间移动 API 资源(API 代理、共享流和 API 产品)。用户可以在组织和空间级别之间或在空间之间移动资源。如需移动、管理或查看组织或空间中的 API 资源,用户必须拥有相关组织或空间的适当权限。

将 API 资源从组织迁移到空间

在 Apigee 组织中创建的 API 资源可以从组织级别移到空间,反之亦然。移动到某个空间的 API 资源会继承该空间的 IAM 政策。如需将 API 资源从组织级层移至空间,用户必须拥有以下权限:

  • 针对源范围(资源当前所在的组织或空间)的 apigee.RESOURCE_TYPE.move

    RESOURCE_TYPE 的有效值包括 proxiessharedflowsapiproducts,具体取决于移动的 API 资源的类型。

  • 针对目标范围(要移动资源所在的组织或空间)的 apigee.RESOURCE_TYPE.create

    RESOURCE_TYPE 的有效值包括 proxiessharedflowsapiproducts,具体取决于移动的 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 是要列出的资源的类型。有效值包括:
    • apis
    • sharedflows
    • apiproducts
  • 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"

响应应类似如下所示:

{
  "basepaths": ["/demo"],
  "revision": 1,
  "apiProxyId": "demo",
  "space_id": "red", 
  "createTime": ...,
  "updateTime": ...
}

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 是要列出的资源的类型。有效值包括:
    • apis
    • sharedflows
    • apiproducts
  • RESOURCE_ID 是要移动的 API 代理、共享流或 API 产品的名称。

在多个空间之间移动 API 资源

API 资源可以在 Apigee 组织中的各个空间之间移动。移动到某个空间的 API 资源会继承该空间的 IAM 政策。如需在 Apigee 组织中的各个空间之间移动 API 资源,用户必须拥有以下权限:

  • 当前 API 资源所在的空间的 apigee.RESOURCE_TYPE.move

    RESOURCE_TYPE 的有效值包括 proxiessharedflowsapiproducts,具体取决于要移动的 API 资源的类型。

  • 要将 API 资源移至的空间的 apigee.RESOURCE_TYPE.create

    RESOURCE_TYPE 的有效值包括 proxiessharedflowsapiproducts,具体取决于要移动的 API 资源的类型。

为这两个空间分配了 apigee.apiAdminV2 角色的用户将拥有所需的权限。

如需在 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 是要列出的资源的类型。有效值包括:
    • apis
    • sharedflows
    • apiproducts
  • 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"
    }
  }