查看 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
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- 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
-
In the Google Cloud console, go to the IAM page.
进入 IAM - 选择项目。
- 点击 授予访问权限。
-
在新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。
- 在选择角色列表中,选择一个角色。
- 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
- 点击 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" } }
如需解决该错误,请先删除或移动空间中的资源,然后再尝试删除空间。
后续步骤
- 详细了解 Apigee 空间。
- 了解如何使用 Apigee 空间管理 API 资源。
- 查看 Identity and Access Management (IAM) 文档。