企業通常由一個阿里雲帳號統一持有雲資源,再通過 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 許可權,不包含Function Compute或其他雲端服務許可權。如需限制到指定地區,將 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。