创建和管理 Apigee 空间

查看 Apigee Edge 文档。

本主题介绍了如何在 Apigee 组织中创建 Apigee 空间,以便大规模管理 Apigee API 资源的 Identity and Access Management 政策。

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

如需详细了解使用 Apigee 空间管理 API 资源的优势,请参阅 Apigee 空间

准备工作

在开始使用空间之前,请完成以下操作:

  • 预配 Apigee。 确认您要使用的 Apigee 订阅或随用随付组织已预配。如需详细了解预配 Apigee 所需的步骤,请参阅预配简介
  • 获取身份验证凭据。在命令行中运行命令以创建和管理空间之前,请使用以下命令获取您的 gcloud 身份验证凭据:
    export TOKEN=$(gcloud auth print-access-token)

所需的角色和权限

Make sure that you have the following role or roles on the project: Apigee > Apigee Organization Admin

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

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

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

创建空间

如需执行此任务,您需要拥有 apigee.spaces.create 权限。Apigee Organization Admin 角色拥有此权限。

如需在 Apigee 组织中创建空间,请使用以下命令:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces" \
    --data-raw '{
       "name":"SPACE_NAME"
    }'

其中:

  • ORG_NAME 是您的 Apigee 组织的名称。
  • SPACE_NAME 是您要创建的空间的名称。

例如,以下命令会在 acme 组织中创建一个名为 red 的空间:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/acme/spaces \
    --data-raw '{
       "name":"red",
    }'

管理空间中的成员和角色

创建空间后,您可以将团队成员添加到空间,并分配在空间中创建和管理 API 资源所需的 IAM 角色。Apigee 用户只能在作为团队成员被授予适当权限的空间中创建和管理资源。由于 IAM 访问权限控制是在空间级层授予,因此组织成员无法访问或管理 Spaces API 资源,除非这些资源专门添加到空间中。 如需简要了解管理空间资源所需的 IAM 角色和权限,请参阅所需的角色和权限

将组织成员添加到空间

将组织成员添加到空间后,系统会为该空间创建 IAM 政策绑定,该绑定接受两个参数:

  • 空间成员列表
  • 向成员授予的角色或角色列表

如需执行此任务,您需要拥有 apigee.spaces.setIamPolicy 权限。Apigee Organization Admin 角色拥有此权限。

如需将组织成员添加到空间并分配 IAM 角色,请使用以下命令:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:setIamPolicy" -d \
      '{
        "policy":{
          "bindings":[
            {
              "members": ["user:USER_EMAIL"],
              "role": "roles/IAM_ROLE"
            }
          ]
        }
      }'

其中:

  • ORG_NAME 是 Apigee 组织的名称。
  • SPACE_NAME 是空间的名称。
  • USER_EMAIL 是您要添加到空间的用户的电子邮件地址。
  • IAM_ROLE 是您要将其分配给用户作为空间成员的 IAM 角色的名称。

例如,以下命令会将 my-email@acme.com 用户添加到 acme 组织中的 red 空间,并授予 IAM 角色 apigee.apiAdminV2

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:setIamPolicy" -d \
      '{ 
        "policy":{
          "bindings":[
            {
              "members": ["user:my-email@acme.com"],
              "role": "roles/apigee.apiAdminV2"
            }
          ]
        }
      }'

您可以通过更新空间的 IAM 政策,为空间成员添加其他角色和权限。如需更新空间的 IAM 政策,请使用本部分中所述的 setIamPolicy 方法,并使用修改后的所需角色和权限列表。这将为空间创建新的 IAM 政策,并相应地调整角色和权限。

将成员团队添加到空间

或者,您也可以将成员团队添加到空间,并分配一个或多个 IAM 角色。如需将成员团队添加到空间并分配 IAM 角色,请使用以下命令:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
   "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:setIamPolicy" -d \
     '{
       "policy":{
         "bindings":[
           {
             "members": ["group:GROUP_EMAIL"],
             "role": "roles/IAM_ROLE"
           }
         ]
       }
     }'

其中:

  • ORG_NAME 是 Apigee 组织的名称。
  • SPACE_NAME 是空间的名称。
  • GROUP_EMAIL 是您要添加到空间的群组的电子邮件地址。
  • IAM_ROLE 是您要将其分配给团队作为空间成员的 IAM 角色的名称。

例如,以下命令会将 acme-team@acme.com 群组添加到 acme 组织中的 red 空间,并向该群组授予 apigee.apiAdminV2 角色:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
   "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:setIamPolicy" -d \
     '{ 
       "policy":{
         "bindings":[
           {
             "members": ["group:red-team@acme.com"],
             "role": "roles/apigee.apiAdminV2"
           }
         ]
       }
     }'

将组织成员添加到空间中所述,IAM 角色 apigee.apiAdminV2 可提供管理空间资源所需的许多权限。不过,您可能需要向用户授予其他角色才能执行特定任务。

验证空间 IAM 政策分配

如需执行此任务,您需要拥有 apigee.spaces.getIamPolicy 权限。Apigee Organization Admin 角色拥有此权限。

如需验证是否已为空间正确设置了 IAM 政策,请使用以下命令:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:getIamPolicy"

其中:

  • ORG_NAME 是 Apigee 组织的名称。
  • SPACE_NAME 是空间的名称。

例如,以下命令用于确认是否为 acme 组织中的 red 空间正确设置了 IAM 政策:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:getIamPolicy"

此命令的输出会返回该空间的当前 IAM 政策,应如下所示:

{
  "version": "0",
  "bindings": [
    {
      "role": "roles/apigee.apiAdminV2",
      "members": [
        "group:red-team@acme.com"
      ]
    }
  ]
}

在此示例中,该空间的 IAM 政策会向空间成员(在本例中为群组 red-team@acme.com 的成员)授予 apigee.apiAdminV2 角色

请注意,red 团队的成员是唯一有权访问 red 空间的组织成员。这意味着,只有 red 团队成员可以在 red 空间中创建和管理 API 资源。如果其他组织团队(例如 team-blue@acme.com)的成员尝试访问在 red 空间下创建的 API 代理,则他们将看到以下错误:

{
  "error": {
    "code": 403,
    "message": "Permission denied on resource \"organizations\/acme\/apis\/proxy-1\" (or it may not exist).",
    "status": "PERMISSION_DENIED"
  }
}

从空间中移除成员

如需从空间中移除成员或一组成员,您需要为空间设置新的 IAM 政策,并使用修改后的成员或群组列表。使用 setIamPolicy 方法会为空间创建新的 IAM 政策,并相应地调整角色和成员。

例如,如需更新 blue 团队空间的成员,您可以先使用以下命令检查当前 IAM 政策:

curl -X GET -H "Authorization: Bearer $TOKEN" \
  "https://apigee.googleapis.com/v1/organizations/acme/spaces/blue:getIamPolicy"

此命令的输出会返回该空间的当前 IAM 政策,应如下所示:

{
  "version": "0",
  "bindings": [
    {
      "role": "roles/apigee.apiAdminV2",
      "members": [
        "group: blue-team@acme.com", 
        "users: user-a@acme.com, user-b@acme.com, user-c@acme.com"
      ]
    }
  ]
}

如需从空间中移除 user-b@acme.com,请使用以下命令:

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
  "https://apigee.googleapis.com/v1/organizations/acme/spaces/blue:setIamPolicy" -d \
    '{ 
      "policy":{
        "bindings":[
          {
            "members": [
              "group:blue-team@acme.com",
              "users: user-a@acme.com, user-c@acme.com"
            ]  
            "role": "roles/apigee.apiAdminV2"
          }
        ]
      }
    }'

空间的新 IAM 政策将不再包含 user-b@acme.com

如需从空间包含的群组中移除成员,请先从群组中移除该成员,然后重新运行 setIamPolicy 命令,以使用群组电子邮件别名的正确成员资格更新空间的 IAM 政策。

列出组织中的所有空间

如需执行此任务,您需要拥有 apigee.spaces.list 权限。Apigee Organization Admin 角色拥有此权限。

如需列出 Apigee 组织中的所有空间,请使用以下命令:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces"

其中,ORG_NAME 是 Apigee 组织的名称。

例如,以下命令会列出 acme 组织中的所有空间:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces"

此命令会返回如下所示的内容:

  {
    "spaces": [
        {
            "name": "red",
            "createTime": "2024-08-02T23:26:03.001512Z",
            "updateTime": "2024-08-02T23:26:03.001512Z"
        },
        {
            "name": "blue",
            "createTime": "2024-08-02T00:34:54.159331Z",
            "updateTime": "2024-08-02T00:34:54.159331Z"
      }
      ]
  }

获取空间详细信息

如需执行此任务,您需要拥有 apigee.spaces.get 权限。Apigee Organization Admin 角色拥有此权限。

使用以下命令获取空间详细信息:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME"

其中:

  • ORG_NAME 是 Apigee 组织的名称。
  • SPACE_NAME 是空间的名称。

例如,以下命令会获取 acme 组织中的 red 空间的详细信息:

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red"

此命令会返回如下所示的内容:

  {
      "name": "red",
      "createTime": "2024-08-02T23:26:03.001512Z",
      "updateTime": "2024-08-02T23:26:03.001512Z"
  }

更新空间

如需执行此任务,您需要拥有 apigee.spaces.update 权限。Apigee Organization Admin 角色拥有此权限。

如需更新 Apigee 组织中的空间,请使用以下命令:

curl -X PATCH -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME" \
      --data-raw '{
        "displayName":"DISPLAY_NAME"
      }'

其中:

  • ORG_NAME 是 Apigee 组织的名称。
  • SPACE_NAME 是空间的名称。
  • DISPLAY_NAME 是空间的新显示名称。

例如,以下命令会更新 acme 组织中的 red 空间的显示名称:

curl -X PATCH -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red" -d \
    '{
      "displayName": "Red team space"
    }'

删除空间

如需执行此任务,您需要拥有 apigee.spaces.delete 权限。Apigee Organization Admin 角色拥有此权限。 在删除空间之前,请确保空间中的所有资源也已删除。

如需删除 Apigee 组织中的空间,请使用以下命令:

curl -X DELETE -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME"

例如,以下命令会删除 acme 组织中的 red 空间:

curl -X DELETE -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red"

如果您尝试删除仍与活跃资源关联的空间,则会看到以下错误:

{
  "error": {
    "code": 400,
    "message": "Space \"red\" has resources associated with it. Please delete the resources before deleting the space.",
    "status": "FAILED_PRECONDITION"
  }
}

如需解决该错误,请先删除或移动空间中的资源,然后再尝试删除空间。

后续步骤