企业通常由一个阿里云账号统一持有云资源,再通过 RAM 用户、RAM 用户组或 RAM Role 分配管理权限。本文根据常见使用场景,介绍如何将云沙箱权限限制到指定资源组、Team 或资源类型。用户习惯所说的“主账号”和“子账号”,在本文中分别称为“阿里云账号”和“RAM 用户”。
选择鉴权方式
使用控制台或 OpenAPI
登录控制台管理 Team、API Key 等资源时,使用阿里云账号或 RAM 用户;调用 FCSandbox OpenAPI 时,使用阿里云 AK 或 STS 临时凭证。这两种方式都通过 RAM 权限策略控制可执行的操作和可访问的资源。
使用 E2B SDK、CLI 或兼容 API
通过 E2B SDK、E2B CLI 或兼容 HTTP API 创建和访问 Sandbox 时,使用云沙箱 API Key,不需要配置 FCSandbox RAM 权限。每个 API Key 绑定一个 Team,建议不同项目和环境使用不同 Team 与 API Key,不要让测试和生产应用共用一个 API Key。创建方法参见创建 API Key。
规划资源和权限
多个部门共用一个阿里云账号时,建议按部门划分资源组,按“项目 × 环境”划分 Team。例如:
阿里云账号
├── 资源组:部门 A
│ ├── Team:数据分析项目-测试环境
│ ├── Team:数据分析项目-生产环境
│ ├── Team:机器学习项目-测试环境
│ └── Team:机器学习项目-生产环境
└── 资源组:部门 B
推荐按以下方式分配权限:
|
身份 |
推荐权限范围 |
|
云沙箱平台管理员 |
云沙箱资源 |
|
部门管理员 |
本部门的资源组 |
|
项目开发人员 |
指定项目的测试 Team |
|
生产运维人员 |
指定项目的生产 Team |
|
业务应用 |
仅持有对应 Team 的云沙箱 API Key |
资源组适合作为部门的权限边界,Team 适合作为项目和环境的权限边界。测试和生产环境应使用不同 Team,并通过 Team 级 RAM 权限避免开发人员误操作生产资源。Team 及其资源关系参见创建 Team。
配置 RAM 权限
-
使用阿里云账号或具备 RAM 管理权限的 RAM 用户登录 RAM 控制台。
-
创建自定义权限策略,并选择脚本编辑。具体操作参见创建 RAM 自定义权限策略。
-
根据下面的场景修改策略中的资源组 ID 和 Team ID;策略中使用 Resource ARN 时,同时替换地域和账号 ID。
-
将策略授权给目标 RAM 用户、RAM 用户组或 RAM Role。具体操作参见管理权限策略授权。
-
使用目标 RAM 身份验证授权结果,确认所需操作可以执行,非授权范围仍被拒绝。
管理账号下全部云沙箱资源
适用于统一管理所有 Team 和资源的平台管理员。以下策略授予账号下全部地域的 FCSandbox 权限,不包含函数计算或其他云服务权限。如需限制到指定地域,将 Resource 改为 acs:fcsandbox:<region>:<account-id>:*:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "fcsandbox:*",
"Resource": "*"
}
]
}
管理指定资源组
适用于管理一个部门内所有项目的测试和生产 Team,但不能访问其他部门的管理员。以下示例将权限限制到该部门的资源组:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "fcsandbox:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:ResourceGroupId": "<department-resource-group-id>"
}
}
}
]
}
RAM 用户登录控制台后,需要切换到已授权的资源组。调用列表接口时,也应传入对应的 resourceGroupID。
管理指定 Team
适用于项目开发人员或生产运维人员。以下策略允许管理指定 Team 及其子资源,但不能创建其他 Team:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "fcsandbox:*",
"Resource": [
"acs:fcsandbox:<region>:<account-id>:teams/<team-id>",
"acs:fcsandbox:<region>:<account-id>:teams/<team-id>/*"
]
}
]
}
Team 本身和 Team 子资源使用不同的 ARN,因此需要同时配置两条 Resource。该策略不包含账号级 Team 列表权限。若用户需要通过控制台选择 Team,可以增加资源组范围的 fcsandbox:ListTeams 权限,但该用户将能看到同一资源组内的 Team 列表。需要严格限制 Team 可见范围时,建议为该项目使用独立资源组。
验证权限
完成配置后,分别验证允许和拒绝的操作:
|
身份 |
应允许 |
应拒绝 |
|
平台管理员 |
管理账号下全部 Team 和资源 |
其他账号的资源 |
|
部门管理员 |
管理本部门资源组内的 Team 和资源 |
其他部门的资源组 |
|
项目开发人员 |
管理指定项目的测试 Team |
其他项目及生产 Team |
|
生产运维人员 |
管理指定项目的生产 Team |
测试 Team 和其他生产 Team |
|
业务应用 |
使用 API Key 创建和访问 Sandbox |
通过 OpenAPI 管理 Team、API Key 或 Volume |
常见误区
-
所有项目共用一个 Team:项目成员难以隔离 API Key、Template、Sandbox 和 Volume。建议每个项目和环境使用独立 Team。
-
向开发人员授予整个部门资源组权限:部门资源组同时包含测试和生产 Team,按资源组授权会使开发人员获得生产资源权限。应将开发人员的权限限制到指定测试 Team。
-
使用 AdministratorAccess 简化授权:该策略包含超出云沙箱范围的权限。只管理云沙箱时,应使用
fcsandbox自定义策略。 -
混淆 RAM 权限和云沙箱 API Key:RAM 权限用于控制台和 OpenAPI;API Key 用于 E2B SDK、CLI 和兼容 HTTP API。
-
只授权 Team 或只授权 Team 子资源:
teams/<team-id>不包含teams/<team-id>/*,管理整个 Team 时需要同时配置。 -
忽略列表权限范围:列表接口可能使用集合 ARN。增加集合权限前,应确认用户是否可以看到该范围内的全部资源。
权限策略参考
Action
权限策略中的 Action 用于限定 RAM 身份可以调用的云沙箱 OpenAPI,格式为:
fcsandbox:<action>
例如,CreateTeam 对应 fcsandbox:CreateTeam,CreateVolume 对应 fcsandbox:CreateVolume。配置策略前,请在云沙箱 OpenAPI 文档中找到业务需要调用的接口,并根据接口的授权信息配置 Action。
Resource ARN
ARN 格式
acs:fcsandbox:<region>:<account-id>:<resource-path>
|
占位符 |
说明 |
|
|
云沙箱资源所在地域,例如 |
|
|
资源所属阿里云账号 ID |
|
|
Team ID |
|
|
Template ID |
|
|
Volume ID |
常用 ARN
|
Resource 表达式 |
匹配范围 |
|
|
账号下全部地域的云沙箱资源 |
|
|
指定账号和地域下的全部云沙箱资源 |
|
|
指定账号在全部地域的云沙箱资源 |
|
|
账号下的 Team,不包含其子资源 |
|
|
指定 Team,不包含其子资源 |
|
|
指定 Team 的全部子资源,不包含 Team 本身 |
|
|
所有 Team 下的 Template |
|
|
所有 Team 下的 Sandbox |
|
|
指定 Team 下的 Template |
|
|
指定 Team 下的 Sandbox |
|
|
指定 Template,不包含其子资源 |
|
|
指定 Template 创建的 Sandbox |
|
|
所有 Team 下的 API Key |
|
|
指定 Team 下的 API Key |
|
|
所有 Team 下的 Volume |
|
|
指定 Team 下的全部 Volume |
|
|
指定 Team 下的指定 Volume |
|
|
所有 Team 的配额 |
|
|
指定 Team 的配额 |
Sandbox 没有包含 Sandbox ID 的独立 Resource ARN。Template 使用 templates/<template-id>,基于该 Template 创建的 Sandbox 使用 templates/<template-id>/*。Resource 决定允许访问的 Template 或 Sandbox 范围,Action 决定允许执行 Template 或 Sandbox 的哪些操作。
API Key 和配额只支持 Team 粒度授权,不能分别限制到某一个 API Key 或某一条配额记录。列表接口根据请求范围可能使用账号级集合或 Team 级集合 ARN;仅具有 Team 级权限时,调用支持 Team ID 的列表接口需要显式传入 Team ID。