使用 Apigee 空间管理 API 资源

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

本主题介绍了如何在空间中创建和管理 API 资源。您可以在一个空间中创建 API 代理、共享流和 API 产品。在空间中创建的资源会继承与空间相同的权限。

在空间中创建资源与在 Apigee 组织下创建资源相同,只是您可以在创建资源时选择空间。您可以使用 Apigee API 从命令行创建 API 资源,也可以在 Cloud 控制台中使用 Apigee 创建 API 资源。

本指南概述了执行以下操作所需的步骤:

如需大致了解 Apigee 空间,请参阅 Apigee 空间

如需详细了解 Apigee API 资源类型,请参阅:

准备工作

开始在 Apigee 空间中创建 API 资源之前,请确保您已完成以下任务:

所需的角色和权限

随着 Apigee 空间的推出,IAM 检查对 API 资源执行某些操作所需的权限的方式发生了变化。如果 API 资源存在于空间中,IAM 会在空间级别检查执行操作的空间成员是否具有相应的权限。如需了解详情,请参阅 Apigee Spaces 角色和权限以及 Apigee Spaces 的 IAM 权限层次结构

为空间成员分配角色和权限

空间成员可使用以下三种自定义角色:

  • apigee.spaceContentEditor:提供对可与空间关联的资源的完整访问权限。此角色应在空间级授予。
  • apigee.spaceContentViewer:提供对可与空间关联的资源的只读权限。此角色应在空间级授予。
  • apigee.spaceConsoleUser:提供使用 Google Cloud 控制台管理空间资源所需的最低权限。 应在 Google Cloud 项目级层向有权访问相应空间中资源的用户授予此角色。

本部分中介绍的自定义角色不会授予空间成员部署或取消部署 API 代理或共享流的权限。如果您想允许空间成员管理部署,请在 Apigee 环境或 Google Cloud 项目级层设置 IAM 政策,向空间成员授予 apigee.environment.admin 角色。

您可以使用以下任一方法为空间成员分配一个或多个角色:

  • 使用 APIapigee.spaceContentEditor 角色添加到空间,并使用 APIapigee.environmentAdmin 角色添加到目标环境。
  • 使用 IAM 界面将角色添加到项目中。

如需在 Google Cloud 项目级层检查角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM
  2. 选择项目。
  3. 主账号列中,找到标识您或您所属群组的所有行。如需了解您属于哪些群组,请与您的管理员联系。

  4. 对于指定或包含您的所有行,请检查角色列以查看角色列表是否包含所需的角色。

授予角色

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    前往 IAM
  2. 选择项目。
  3. 点击 授予访问权限
  4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

  5. 选择角色列表中,选择一个角色。
  6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
  7. 点击保存

如需查看在空间级应用的 IAM 政策,请参阅管理空间中的成员和角色

在空间中管理 API 代理

分配给空间的 Apigee 组织成员可以将 API 代理创建为空间资源。仅分配给其他空间的成员将无法访问或管理这些代理。

使用 Cloud 控制台的 Apigee 或者使用 API 将 API 代理创建为空间资源,如以下部分所述。

Cloud 控制台中的 Apigee

如需使用 Cloud 控制台的 Apigee 将 API 代理创建为空间资源,请执行以下操作:

  1. 按照创建 API 代理中所述的步骤操作。
  2. 第 5 步中,您会在代理详细信息下看到一个额外的字段,您可以在其中为 API 代理选择一个空间。从列表框中选择空间。如果您不想将 API 代理分配给空间,可以跳过此字段。
  3. 点击下一步以继续执行代理创建的可选部署步骤,或点击创建以创建代理而不进行部署。

Apigee API

如需使用 Apigee API 将 API 代理创建为空间资源,请使用以下命令:

curl "https://apigee.googleapis.com/v1/organizations/ORG_NAME/apis?name=PROXY_NAME&space=SPACE_NAME&action=import" \
    -X POST -H "Authorization: Bearer $TOKEN" \
    -H "Content-type: multipart/form-data" \
    -F "file=@PROXY_BUNDLE"

其中:

  • ORG_NAME 是您的 Apigee 组织的名称。
  • PROXY_NAME 是要创建的 API 代理的名称。该名称必须具有全局唯一性,而不仅仅在空间内唯一。
  • SPACE_NAME 是要在其中创建 API 代理的空间的名称。
  • PROXY_BUNDLE 是 API 代理软件包文件的名称。

例如,通过以下命令,red 团队成员会使用 proxy-bundle.zip 文件,在 acme 组织中将 API 代理 proxy-1 创建为 red 空间资源:

curl "https://apigee.googleapis.com/v1/organizations/acme/apis?name=proxy-1&space=red&action=import" \
    -X POST -H "Authorization: Bearer $TOKEN" \
    -H "Content-type: multipart/form-data \
    -F "file=@proxy-bundle.zip"

以下示例展示了该命令的响应:

{
  "basepaths": ["/proxy-1"],
  "revision": 1,
  "apiProxyId": "proxy-1",
  "resourceName": "organizations/acme/apis/proxy-1/revisions/1",
  "space": "red",
  "createTime": ...,
  "updateTime": ...
}

以空间资源的形式管理共享流

分配给空间的成员还可以将共享流创建为空间资源。其他空间的成员将无法访问或管理这些共享工作流。

使用 Cloud 控制台的 Apigee 或使用 API 将共享流创建为空间资源,如以下部分所述。

Cloud 控制台的 Apigee

如需使用 Cloud 控制台的 Apigee 将共享流创建为空间资源,请执行以下操作:
  1. 按照在 Apigee 界面中创建共享流中的步骤从头开始创建新的共享流或上传现有的流软件包。
  2. 第 4 步中,您会在创建共享流对话框中看到一个额外的字段,您可以在其中为 API 代理选择一个空间。从列表框中选择空间。如果您不想将 API 代理分配给空间,可以跳过此字段。
  3. 点击创建以创建共享流。

Apigee API

如需使用 Apigee API 将共享流创建为空间资源,请使用以下命令:

curl "https://apigee.googleapis.com/v1/organizations/ORG_NAME/sharedflows?name=FLOW_NAME&space=SPACE_NAME&action=import" \
    -X POST -H "Authorization: Bearer $TOKEN" \
    -H "Content-type: multipart/form-data" \
    -F "file=@SHARED_FLOW_BUNDLE"

其中:

  • ORG_NAME 是您的 Apigee 组织的名称。
  • FLOW_NAME 是要创建的共享流的名称。该名称必须具有全局唯一性,而不仅仅在空间内唯一。
  • SPACE_NAME 是要在其中创建共享流的空间的名称。
  • SHARED_FLOW_BUNDLE 是共享流软件包文件的名称。

例如,通过以下命令,red 团队成员会在 acme 组织中创建与 red 空间相关联的共享流 flow-1

curl "https://apigee.googleapis.com/v1/organizations/acme/sharedflows?name=flow-1&space=red&action=import" \
    -X POST -H "Authorization: Bearer $TOKEN" \
    -H "Content-type: multipart/form-data" \
    -F "file=@sharedflow-bundle.zip"

以下示例展示了该命令的响应:

{
  "name": "organizations/acme/sharedflows/flow-1",
  "revision": 1,
  "sharedFlowId": "flow-1",
  "space": "red",
  "createTime": ...,
  "updateTime": ...
}

以空间资源的形式管理 API 产品

分配给空间的成员可以创建 API 产品来捆绑其 API 代理。创建 API 产品时,空间成员可以选择他们可以访问的任何 API 代理,包括直接在组织下创建的代理,以及在他们拥有成员资格的空间中创建为资源的 API 代理。其他空间的成员将无法访问或管理这些 API 产品。

使用 Cloud 控制台的 Apigee 或使用 API 将 API 产品创建为空间资源,如以下部分所述。

Cloud 控制台的 Apigee

如需使用 Cloud 控制台的 Apigee 将 API 产品创建为空间资源,请执行以下操作:

  1. 按照创建 API 产品中的步骤操作。
  2. 第 4 步中,您会在产品详情页面中看到一个额外的字段,您可以在其中为 API 产品选择空间。从列表框中选择空间。如果您不想将 API 产品分配给空间,可以跳过此字段。
  3. 填写其余配置信息,然后点击保存

Apigee API

如需使用 API 将 API 产品创建为空间资源,请向 apiproducts/create 端点发送请求,并添加 space 属性。

例如,以下命令会在 acme 组织中创建一个名为 product-1 的 API 产品,并将其与 red 空间相关联:

curl -X POST "https://apigee.googleapis.com/v1/organizations/acme/apiproducts" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-type: application/json" -d \
      `{
        "name": "product-1",
        "displayName": "product-1",
        "approvalType": "auto",
        "attributes": [
          {
            "name": "access",
            "value": "internal"
          }
        ],
        "environments": [
          "test"
        ],
        "operationGroup": {
          "operationConfigs": [
            {
              "apiSource": "proxy-1",
              "operations": [
                {
                  "resource": "/",
                  "methods": [
                    "GET"
                  ]
                }
              ]
            }
          ],
          "operationConfigType": "proxy"
        },
        "space": "red"
      }'

以下示例展示了该命令的响应:

{
  "name": "product-1",
  "displayName": "product-1",
  "approvalType": "auto",
    "attributes": [
      {
        "name": "access",
        "value": "internal"
      }
    ],
    "environments": [
    "test"
  ],
  "createdAt": "1741977778448",
  "lastModifiedAt": "1741977778448",
  "operationGroup": {
    "operationConfigs": [
      {
        "apiSource": "proxy-1",
        "operations": [
          {
            "resource": "/",
            "methods": [
              "GET"
            ]
          }
        ]
      }
    ],
    "operationConfigType": "proxy"
  },
  "space": "red"
}

列出与空间关联的所有 API 资源

对于所有列出操作(包括 ListApiProxiesListSharedFlowsListApiProducts),您可以指定空间名称以列出与该空间关联的所有资源。如果您未指定空间名称,列出操作会返回您有权访问的组织中的所有资源,无论这些资源是否与空间关联。

请务必注意,使用 Apigee 空间功能时,分配给空间的 API 资源的 list 操作结果将仅限于主账号可访问的空间的结果。例如,如果为 acme-team@acme.com 授予 red 空间的 apigee.spaceContentEditor 角色,则使用 list 操作的团队 acme-team 成员将仅看到与 red 空间关联的 API 代理,而不会看到组织中的所有 API 代理。

如需执行此任务,您必须拥有 apigee.apiResources.list 权限。Apigee > Apigee Organization Admin 角色可提供此权限。

列出与特定空间关联的 API 资源

使用 Cloud 控制台的 Apigee 或使用 API 列出与特定空间关联的所有 API 资源,如以下部分所述。

Cloud 控制台的 Apigee

如需在 Cloud 控制台的 Apigee 中列出与特定空间关联的所有 API 资源,请打开相关资源类型(API 代理、共享流或 API 产品)的概览页面。在过滤条件框中,从列表中选择空间选项,然后输入空间的名称。系统会显示分配给该空间的资源列表。请注意,系统只会显示与用户所属空间关联的资源。

Apigee API

如需列出与指定空间关联的所有 API 资源,请使用以下命令:

curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/RESOURCE_TYPE?space=SPACE_NAME"

其中:

  • ORG_NAME 是您的 Apigee 组织的名称。
  • RESOURCE_TYPE 是要列出的资源的类型。有效值包括:
    • apis
    • sharedFlows
    • apiProducts
  • SPACE_NAME 是要列出其中的资源的空间名称。

例如,通过以下命令,red 团队成员会列出 acme 组织中,与 red 空间关联的所有 API 代理:

curl -H  "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/acme/apis?space=red"

以下示例展示了该命令的响应:

{
  "proxies": [
    {
      "basepaths": "/proxy-1",
      "revision": "1",
      "apiProxyId": "proxy-1",
      "resourceName": "organizations/acme/apis/proxy-1/revisions/1",
      "space": "red",
      "createTime": ...,
      ....
    }
  ]
}

列出 API 资源而不指定空间

使用 Cloud 控制台的 Apigee 或使用 API 列出所有 API 资源,而不指定空间,如以下部分所述。

Cloud 控制台中的 Apigee

如需使用 Cloud 控制台的 Apigee 列出给定类型的所有 API 资源(无论是否与空间关联),请打开相关资源类型(API 代理、共享流或 API 产品)的概览页面。系统会显示所有可用资源的列表。请注意,系统只会显示用户有权查看的资源。这包括与用户是成员的空间关联的资源,或与空间无关的资源。

Apigee API

您还可以使用以下命令列出 API 资源,而不指定空间:

curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/RESOURCE_TYPE"

其中:

  • ORG_NAME 是您的 Apigee 组织的名称。
  • RESOURCE_TYPE 是要列出的资源的类型。有效值包括:
    • apis
    • sharedFlows
    • apiProducts

例如,拥有所有组织资源的 Organization Admin 访问权限的用户可以使用以下命令列出 acme 组织中的所有 API 代理:

curl -H  "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/acme/apis"

如果 acme 组织有三个代理,该命令会返回这三个代理的详细信息。例如:

{
  "proxies": [
    {
      "basepaths": "/proxy-1",
      "revision": "1",
      "apiProxyId": "proxy-1",
      "resourceName": "organizations/acme/apis/proxy-1/revisions/1",
      "space": "red",
      "createTime": ...,
      ....
    },
    {
      "basepaths": "/proxy-2",
      "revision": "1",
      "apiProxyId": "proxy-2",
      "resourceName": "organizations/acme/apis/proxy-2/revisions/1",
      "space": "blue",
      "createTime": ...,
      ....
    },
    {
      "basepaths": "/proxy-3",
      "revision": "1",
      "apiProxyId": "proxy-3",
      "resourceName": "organizations/acme/apis/proxy-3/revisions/1",
      "space": "green",
      "createTime": ...,
      ....
    }
  ]
}

如果另一位仅拥有空间 red 中资源的 apiAdmin 访问权限的用户使用相同的命令,则该命令只会返回有关 proxy-1 的详细信息。响应如下所示:

{
  "proxies": [
    {
      "basepaths": "/proxy-1",
      "revision": "1",
      "apiProxyId": "proxy-1",
      "resourceName": "organizations/acme/apis/proxy-1/revisions/1",
      "space": "red",
      "createTime": ...,
      ....
    }
  ]
}

后续步骤