讲解阿里云国际 ECS 实例 RAM 角色、STS 临时凭证、信任与权限策略、PassRole、元数据安全和授权排查。
阿里云国际 ECS 中的应用需要访问 OSS 或其他云 API 时,不应在代码、镜像和环境文件中保存长期 AccessKey。更合适的方式是为 ECS 关联实例 RAM 角色,让官方凭证工具或 SDK 从实例元数据获取并自动刷新 STS 临时凭证。
默认做法:在阿里云国际 RAM 控制台创建 ECS 可扮演的角色,只授予应用实际需要的资源和动作;再到 ECS 实例设置中绑定角色。应用通过实例元数据与 SDK 获取自动更新的 STS 临时凭证,不把 AccessKey 写进代码。绑定角色不会删除数据,角色通常不单独收费,但过宽权限可能造成资源和账单损失。

RAM 角色与 RAM 用户的差别
| 身份 | 凭证 | 适用对象 |
|---|---|---|
| RAM 用户 | 可拥有长期密码或 AccessKey | 具体人员或需要固定身份的程序 |
| RAM 角色 | 没有长期凭证,被信任主体扮演后获得 STS | ECS、跨账户、联邦用户和临时授权 |
STS 凭证包含临时 AccessKey ID、Secret 和安全令牌,有明确有效期。临时不等于无风险:在有效期内泄露仍可按角色权限操作资源。
配置流程
- 创建可信主体为阿里云服务的 RAM 角色;
- 只附加应用所需 API 与资源范围的权限策略;
- 为执行绑定的管理身份授予必要权限,包括受控的 PassRole;
- 把角色关联到目标 ECS,一台 ECS 同时只能关联一个实例 RAM 角色;
- 在实例内使用官方 Credentials 工具或 SDK 默认凭证链;
- 通过 ActionTrail 和业务日志验证调用身份。
最小权限如何拆
先列动作再写策略。例如备份应用只需要向指定 OSS Bucket 前缀列举和写入对象,通常不需要删除 Bucket、修改 ACL 或访问其他项目。测试与生产使用不同角色,删除权限与写入权限分别评估。
凭证获取或 API 调用失败
| 现象 | 优先检查 |
|---|---|
| 无法取得临时凭证 | 实例是否关联角色、元数据模式、凭证工具版本 |
| 取得凭证但 API 拒绝 | 角色权限策略、资源 ARN、条件和显式拒绝 |
| 仍读取旧 AccessKey | 环境变量和配置文件是否覆盖默认凭证链 |
| 绑定角色无权限 | 管理身份是否具有 ECS、RAM 和 PassRole 权限 |
保护实例元数据
官方建议使用实例元数据安全加固模式。应用必须防范 SSRF,限制用户控制的 URL 抓取、代理和回调验证;不要把元数据返回内容写入 Web 响应或普通日志。
边界条件
实例 RAM 角色用于云 API 授权,不是 Linux 登录账户。角色信任策略决定谁能扮演,权限策略决定扮演后能做什么;两者都需要核验。长期 AccessKey 迁移完成后应从代码、镜像和历史配置中彻底撤销。
先分清信任和权限
信任策略决定 ECS 服务能否扮演角色,权限策略决定临时凭证可访问哪些 OSS、日志或其他资源。操作者还可能需要明确的角色传递权限。只创建角色、没有绑定实例,应用拿不到凭证;绑定成功但资源策略或 KMS 显式拒绝,也会返回无权限。
从长期AccessKey迁移
- 用操作审计和应用清单盘点真实 API、区域和资源。
- 为测试实例绑定最小角色,应用改用 SDK 默认凭证链。
- 验证必要调用,再停用旧 AccessKey 并观察。
- 确认无旧密钥调用后删除,不把临时凭证写日志。
权限失败怎么查
- 身份不是预期角色:检查实例绑定和环境变量是否覆盖默认链。
- 元数据超时:查实例网络、代理和官方元数据路径,不退回硬编码密钥。
- 动作被拒:按报错核对动作、资源 ARN、条件、资源策略与 KMS。
- 业务只在部分对象失败:检查前缀、标签或区域条件,不扩大到所有资源。
验收回退
实例内执行一项业务必需操作并确认成功,再测试明确不该允许的动作,必须拒绝;操作审计中的主体应为角色会话。保存旧策略版本和角色关联。新策略故障可短时回上一最小版本并按明确拒绝项修正,禁止绑定管理员策略。角色稳定且旧密钥调用归零后再删除旧凭据。
元数据访问要防止被应用滥用
临时凭证来自实例元数据,因此 URL 预览、下载代理和不可信容器不能任意访问本机链路地址。应用要校验重定向后的目标并隔离不同信任级别工作负载。STS 自动过期不代表泄露无害,攻击者仍可在有效期内调用已授权 API。发现异常时先收紧角色、保留审计,再根据明确业务拒绝逐项恢复权限。

