在阿里云中,给子账号(RAM 用户)仅授权访问/操作指定的一台 ECS 服务器 ,需要使用 基于资源的授权(Resource-Level Authorization) ,通过 自定义权限策略(Custom Policy) 实现。
⚠️ 注意:不是所有操作都支持"精确到单台 ECS",但 查看、启动、停止、重启、连接(VNC/Workbench)等常见操作是支持的。删除、修改配置等部分操作可能不支持资源粒度限制。
✅ 目标
让子账号 只能管理某一台特定的 ECS 实例 (例如实例 ID 为 i-bp1d6ts0w5v8xxxxxabc),不能看到或操作其他服务器。
🔧 操作步骤
第一步:获取目标 ECS 实例的 ARN(资源标识符)
阿里云资源的唯一标识格式为:
css
acs:ecs:{region}:{account-id}:instance/{instance-id}
{region}:ECS 所在地域,如cn-hangzhou{account-id}:你的阿里云账号 ID(12位数字,可在 账号安全设置 查看){instance-id}:ECS 实例 ID,如i-bp1d6ts0w5v8xxxxxabc
✅ 示例:
js
acs:ecs:cn-hangzhou:123456789012:instance/i-bp1d6ts0w5v8xxxxxabc
第二步:创建自定义权限策略(Custom Policy)
-
登录 阿里云 RAM 控制台
-
点击 【创建权限策略】
-
填写基本信息:
- 策略名称 :如
ECS-SingleInstance-Access - 配置模式 :选择 【脚本配置】
- 策略名称 :如
-
在策略内容中粘贴以下 JSON(根据你的需求调整):
js
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:DescribeInstances",
"ecs:DescribeInstanceAttribute",
"ecs:DescribeDisks",
"ecs:DescribeNetworkInterfaces"
],
"Resource": "acs:ecs:*:123456789012:instance/i-bp1d6ts0w5v8xxxxxabc"
},
{
"Effect": "Allow",
"Action": [
"ecs:StartInstance",
"ecs:StopInstance",
"ecs:RebootInstance",
"ecs:ResetPassword",
"ecs:ModifyInstanceAttribute"
],
"Resource": "acs:ecs:*:123456789012:instance/i-bp1d6ts0w5v8xxxxxabc"
},
{
"Effect": "Allow",
"Action": "ecs:Describe*",
"Resource": "*"
}
]
}
📌 说明:
- 第一段:允许查看该实例及其关联资源(磁盘、网卡等)
- 第二段:允许操作该实例(启停、重启、改名等)
- 第三段:
Describe*必须作用于*(全局),因为阿里云控制台需要先列出区域、可用区等基础信息才能展示实例(这是平台限制)
🔒 如果你完全不想让子账号看到其他实例 ,第三段不能加,但会导致控制台无法正常显示(API 可用,控制台可能空白)。建议保留
Describe*全局只读。
- 点击 【确定】 创建策略
第三步:将策略授权给子账号
- 进入 RAM 用户列表
👉 ram.console.aliyun.com/users - 找到你的子账号 → 点击 【添加权限】
- 授权范围:选择 整个云账号
- 在 自定义策略 中,勾选你刚创建的
ECS-SingleInstance-Access - 点击 【确定】
第四步(可选):限制登录地域(增强安全)
如果这台 ECS 只在 cn-hangzhou,你可以在策略中把 * 替换为具体地域:
json
"Resource": "acs:ecs:cn-hangzhou:123456789012:instance/i-bp1d6ts0w5v8xxxxxabc"
并在 Action 中避免使用跨地域操作。
✅ 验证效果
让子账号登录控制台:
- 能看到 所有地域列表(因 Describe* 全局)
- 进入对应地域后,只能看到这一台 ECS
- 点击该实例,可进行 启停、重启、重置密码等操作
- 尝试操作其他实例 → 提示 无权限
💡 如果用于 API/SDK 编程,则完全隔离,不会返回其他实例信息。
❗ 注意事项
| 问题 | 说明 |
|---|---|
| 不能完全隐藏其他实例? | 控制台因前端依赖,需 Describe* 全局权限;但 API 调用是精确过滤的 |
| 某些操作不支持资源粒度 | 如 ecs:DeleteInstance 在部分地域不支持按实例授权(会失败) |
| 快照、安全组等关联资源 | 如需管理,需额外授权对应 Resource ARN |
| Workbench 远程连接 | 需要额外授权 ecs:InvokeCommand 和 ecs:DescribeInvocationResults |
🔐 更安全的做法(推荐生产环境)
- 为主账号和子账号 开启 MFA 多因素认证
- 对高危操作(如删除)不授权
- 使用 操作审计(ActionTrail) 记录子账号行为