云账号是登录和管理云资源的核心身份凭证,一旦泄露,将带来极高的安全风险。因此,必须妥善保护云账号的各类凭据,防止其被非法获取和滥用。
安全风险
云账号面临的主要安全威胁包括口令被暴力破解、AccessKey(AK)等长期凭据泄露以及RAM Role STS Token泄露等,攻击者一旦掌握这些凭据,便可冒充合法用户登录系统,进行资源操作或访问敏感数据,可能导致以下严重后果:
非法使用资源,造成直接账号损失。
基础设施被破坏或服务中断,影响业务可用性。
敏感数据泄露或被加密,面临信息泄露与勒索风险。
被植入恶意程序或后门,长期威胁系统安全与数据完整性。
最佳实践
保护账号口令,启用多因子认证(MFA)
设置复杂口令:弱口令是账户被入侵的主要原因之一。为防止口令被猜测或暴力破解,应避免使用弱口令。
定期修改口令:建议每 90 天更换一次密码,以降低因长期使用同一口令而带来的泄露风险。
启用多因子认证(MFA):为主账号绑定MFA,在密码认证基础上增加动态验证码(如手机Token、硬件密钥),防止密码泄露后的未授权访问。
使用 ECS RAM 角色替代 AccessKey
当应用程序部署在 ECS 实例中并需要调用云服务 API(如 ECS 扩缩容)时,推荐使用 RAM 角色(RAM Role),而非使用AccessKey。
创建RAM用户并绑定
当前账号需具备 sts:AssumeRole
权限,才能为实例绑定角色,防止权限滥用。
控制台
为 ECS 实例绑定 RAM 角色。
创建时绑定
通过实例购买页创建实例时,在高级选项选择实例RAM角色。
建议在元数据访问模式中选择仅加固模式,防止因实例漏洞或配置错误导致 STS Token 泄露。更多信息,请参见使用仅加固模式访问实例元数据。
已有实例绑定
访问ECS控制台-实例,切换至目标地域。
找到目标ECS实例,单击实例ID进入实例详情页。
在其他信息,单击授予 / 收回 RAM 角色。
在对话框中选择RAM角色,单击确定。
重要一个 ECS 实例只能绑定一个 RAM 角色。若应用需要多种权限,请将所有权限统一授予该角色。
例如:实例已绑定
AliyunECSDiskEncryptDefaultRole
,还需网络接口管理权限,可在 RAM 控制台为该角色添加AliyunECSNetworkInterfaceManagementAccess
策略。
API
通过 API 实现角色绑定与解绑:
创建实例时绑定角色:调用RunInstances或CreateInstance创建实例时,指定
RamRoleName
参数。为已有实例绑定角色:调用AttachInstanceRamRole为实例授予RAM角色。
解绑角色:调用DetachInstanceRamRole收回实例被授予的RAM角色。
应用使用 RAM 角色访问云服务
应用运行在 ECS 实例中,可通过实例元数据服务自动获取临时 STS Token,并使用该 Token 调用云服务 API:
保护 AccessKey(AK),降低泄露风险
若必须使用 AK,应在创建、存储、分发、使用等环节加强安全管理:
创建阶段:遵循 “一人一 AK、一应用一 AK” 原则,避免多个用户或程序共享 AK。一旦AK泄露,可快速定位责任人,缩小影响范围,便于及时轮转。
权限管理:遵循最小权限原则,按需授权。推荐使用子账号并分配职责对应权限,避免使用主账号 AK。更多信息,请参见避免使用主账号,为不同职责子账号成员授予不同权限。
存储安全:将 AK 存储在可信设备上如:
只有 root 或特定用户可读的文件。
受访问控制的数据库或密钥管理系统(KMS)。
禁止将 AK 存放在本地笔记、云笔记、代码仓库、聊天记录、个人签名/状态中。
分发安全:使用加密文件分发 AK。推荐通过邮件等渠道发送加密AK文件,再通过另一个独立渠道(如短信)发送解密密码。
使用安全:禁止在代码中硬编码 AK。将 AK 存放在独立配置文件加密保存在可信服务器上,分发到服务器后再解密,并将文件权限设置为仅owner可读。
网络访问控制:在 RAM 控制台中为 AK 配置网络访问限制策略。具体操作,请参见AccessKey网络访问限制策略。
定期轮转与清理
定期轮转:建议每 90 天更换一次 AK,生成新 AK 并通知使用方更新。更多信息,请参见轮转RAM用户的AccessKey。
定期清理:在 RAM 控制台查看 AK 的操作记录,及时吊销长期未使用的 AK。具体操作,请参见删除RAM用户的AccessKey。
监控 AK 泄露风险:通过云安全中心的AK泄露检测可以识别出AK是否泄露,支持AK泄露告警通知。此外,AK泄露后,阿里云会进行AccessKey限制性保护,防止风险进一步扩大。
合规能力
检查:是否存在ECS实例使用AK访问云服务
通过查询AccessKey日志,可以按需查询AccessKey的基本信息、访问的云服务及相关IP地址和资源。
前提:已创建ActionTrail跟踪,并将日志投递至SLS Logstore。
查询通过VPC Endpoint发起的AK调用:
* | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId", "event.vpcId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" LIKE 'vpc%'
结果形如:
通过
vpcId
和sourceipaddress
,就可以确定调用是从哪个ECS实例发出的。再具体排查哪些程序在使用accessKeyId
调用OpenAPI。查询通过公网Endpoint发起的AK调用:
* | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" IS NULL
结果形如:
判断
sourceipaddress
是否是来自ECS的公网IP。先获取自己账号名下的EIP、PublicIP,再判断上述结果中的sourceipaddress
是否属于您的IP。如果EIP、PublicIP是直接绑定到ECS实例的,那么可以直接定位到具体是ECS实例并改造。
修复:将AK替换为实例绑定角色
请参考使用 ECS RAM 角色替代 AccessKey进行修复。更多信息,请参见AccessKey泄露处理方案。