云安全中心通过实时检测 GitHub 平台公开源代码中存在的阿里云账号或 RAM 用户的访问密钥 AccessKey(以下简称 AK)信息,识别 AK 是否泄露并提供告警。本文介绍 AK 泄露检测的原理及处理方法。
功能原理
适用范围
-
检测平台:仅支持检测 GitHub 平台公开源代码中的 AK 泄露,暂不支持其他代码托管平台。
-
检测对象:阿里云账号(主账号)及 RAM 用户的 AccessKey(包括 AccessKey ID 和 AccessKey Secret)。
通知方式
云安全中心根据泄露的 AccessKey ID(以下简称 AK)和 AccessKey Secret(以下简称 SK)是否有效,采用不同的通知方式:
只有 AK 和 SK 同时泄露时,第三方才可能利用该访问密钥,进而获取该账号下所有资源的控制权。
|
通知条件 |
通知方式 |
|
AK 泄露,无论 SK 是否有效。 |
AK 泄露检测页面告警 |
|
SK 泄露且有效 |
|
配置 AK 泄露告警通知
云安全中心默认开启 AK 泄露告警通知,可通过短信、语音、邮件、站内信等方式发送告警。
修改通知方式
-
访问云安全中心控制台-系统配置-通知设置,在页面左侧顶部,选择需防护资产所在的区域:中国内地或非中国内地。
-
在 短信/邮件/站内信页签中,找到 AccessKey 泄露情报,选择需要的 通知方式。
AK 泄露风险较高,为及时接收通知,建议选中所有通知方式。具体操作,请参见通知设置。
添加通知接收人
默认仅账号联系人会收到通知。如需其他联系人接收告警,可通过以下方式添加:
处理 AK 泄露事件
收到 AK 泄露告警通知后,表示阿里云账号或 RAM 用户的 AK 和 SK 信息已外泄。请按以下步骤处理:
步骤一:手动处理泄露事件
云安全中心不支持自动处理 AK 泄露事件,需要先在外部完成以下操作:
-
删除或隐藏 GitHub 上的泄露内容:联系相关人员删除或隐藏包含 AK 信息的文件、仓库或代码。
-
在 RAM 控制台处理泄露的 AccessKey:在确保核心业务不受影响的前提下,删除或禁用已泄露的 AccessKey,并创建新的 AccessKey。具体操作,请参见删除RAM用户的AccessKey和禁用RAM用户的AccessKey。
处理时请注意以下几点:
-
禁用立即生效:在 RAM 控制台禁用 AccessKey 的操作立即生效,该 AccessKey 将无法再用于 API 调用,可立即阻断基于该密钥发起的操作。
-
禁用后仍可能收到告警:AccessKey 禁用后,虽然调用会失败,但由于该密钥的记录仍然存在,云安全中心可能继续检测到泄露风险并发送告警。如果确认该 AccessKey 已不再使用,建议在禁用后直接删除该 AccessKey,以彻底消除告警。
-
业务影响评估与轮换策略:禁用或删除 AccessKey 前,请先核实该密钥是否仍被业务依赖(例如用于 K8s 集群等服务的凭据配置)。如果业务正在使用该 AccessKey,建议先为 RAM 用户创建新的 AccessKey 并替换到相应的业务配置中,验证新密钥可正常工作后,再禁用并删除旧的 AccessKey,避免影响线上服务。
-
无法轮换时的临时管控:如果因特殊原因暂时无法完成 AccessKey 轮换,可结合业务情况配置网络访问控制策略(IP 白名单),仅允许指定的业务 IP 发起访问,作为临时限制手段。
说明此处的 IP 白名单是指网络侧的访问控制策略,与本文「处理 AK 泄露事件」中控制台内的告警白名单(加白名单处理方式,用于标记误报事件)是不同的概念,请勿混淆。
-
步骤二:在控制台标注处理状态
手动处理完成后,在云安全中心控制台对该 AK 告警事件进行状态标注:
-
单击目标事件操作列的 处理,选择以下处理方式之一,并单击 立即处理。
|
处理方式 |
适用场景 |
|
我已手动删除 |
已泄露的 AccessKey 不再继续使用,已删除。 |
|
我已手动禁用 AK |
已泄露的 AccessKey 仍需继续使用,但需要临时使其失效。选择此方式后,可在 RAM 控制台重新启用该 AccessKey。 说明
如果 AK 已在 RAM 控制台禁用,云安全中心将自动同步 AK 的禁用状态,AK 泄露事件状态变为"我已手动禁用"。 |
|
加白名单 |
该事件为误报或可以安全忽略。选择后状态变为已加白名单,事件进入已处理列表。 需要恢复检测时,可从已处理列表进入 AK 泄露详情页,取消白名单即可。 |
查看 AK 调用记录
通过查看 AK 调用记录,可以确认 AK 泄露后是否被攻击者利用,从而了解泄露的影响范围。下文介绍通过操作审计服务按时间线查看 AK 调用事件的操作步骤。
如需查看 AK 访问某个云产品的调用记录,可以使用操作审计的 AccessKey 审计功能。具体操作,请参见 查询 AccessKey 日志。
-
在 云安全中心控制台 AK 泄露检测页面,获取需要查看的 AccessKey ID。
-
登录操作审计控制台。
-
在左侧导航栏,选择 。
-
在顶部导航栏选择要查询事件的地域。
-
选择类型为 AccessKey ID,输入待查询的 AccessKey ID,并选择查询时间段。
-
查看该 AccessKey ID 的调用事件列表,单击目标事件操作列的查看详情,可查看事件的详细记录信息。
关于管控事件参数的更多信息,请参见 管控事件结构定义。
在查看调用记录时,可参考以下思路排查攻击行为并溯源:
-
内网 IP 调用源排查:如果发现 AK 调用来源 IP 为阿里云内网 IP,可能是由于云上主机被入侵并沦为肉鸡所致,建议立即排查相关云主机的安全状况,并加强主机侧防护。
-
恶意 RAM 用户创建溯源:如果怀疑攻击者通过泄露的 AccessKey 创建了恶意 RAM 用户,可通过操作审计或告警邮件中的详细信息(异常 AccessKey、IP、时间)确认该 RAM 用户具体是由哪个 AccessKey 通过 API 创建的,并区分是通过控制台登录创建,还是通过 API 调用创建。
-
告警接口类型与预期产品不一致:AK 异常调用告警中显示的调用接口类型(例如
Ecs:DescribeInstances)可能与预期涉及的产品(例如 OSS)不一致。请以告警中实际显示的接口为准,在操作审计中查询对应产品的调用记录,避免因查询了错误产品的日志而遗漏风险。 -
风险评估边界:如果调用记录显示攻击者仅通过 API 查询了资源信息(例如仅调用了
Describe类接口),通常不会直接导致进一步的安全入侵,可据此合理评估此次泄露的影响范围。
持续关注 AK 异常调用
处理完 AK 泄露事件后,建议持续关注 AK 调用是否异常,防止类似事件再次发生,并在泄露发生时快速响应,缩小事件影响范围。
调用接口字段说明:调用接口指通过 API 使用 AccessKey 访问的具体云服务操作。接口名称格式为{产品前缀}:{API名称},其中:
-
产品前缀:对应阿里云产品名称(如 Ecs→ECS、Oss→OSS、Rds→RDS)。
-
API 名称:对应具体的 API 操作(如 DescribeRegions→查询可用地域)。
常见接口名称映射示例如下:
|
接口名称 |
产品 |
操作说明 |
|
|
ECS |
查询可用地域 |
|
|
OSS |
获取 Bucket 信息 |
|
|
RDS |
查询数据库实例列表 |
从攻击视角监测 AK 异常调用
云安全中心基于安全攻防经验和大模型,可检测常见的 AK 调用异常。例如:调用 AK 的 IP 地址在近期发起过攻击行为、该 IP 在云上批量调用多个用户的 AK、调用的 API 较为敏感且该 AK 出现过泄露等。当 AK 从非常用地域的 IP 调用敏感 API 时,系统将其识别为异常行为并触发告警。如果确认告警为正常业务行为,通过操作审计查询该 AK 的调用记录核实,确认后在告警详情中将告警状态标记为误报。当前不支持配置信任 IP。
监测阿里云账号调用 AK 等异常
操作审计服务提供内置告警,可监控阿里云账号调用 AK 及 AK 异常调用。在操作审计控制台启用内置告警 AK 使用的异常频率告警 和 Root 账号 AK 使用检测,以便在出现 AK 异常调用时收到通知。具体操作,请参见 设置事件告警。
基于历史行为检测 AK 异常调用
操作审计服务提供的审计事件洞察(Insights 事件)功能,可基于历史行为分析调用率异常的 AK,及时发现异常行为。开通并查看 Insights 事件的具体操作,请参见 通过操作审计控制台查询 Insights 事件。
使用建议
-
不使用阿里云账号(主账号)AccessKey。更多信息,请参见 不使用主账号 AccessKey。
-
避免将 AccessKey 信息硬编码到代码中,可通过配置环境变量的方式管理 AccessKey。更多信息,请参见 凭据的安全使用方案。
-
使用私有的 GitHub 代码仓库管理代码,或搭建企业内部代码托管系统,防止源代码和敏感信息泄露。
FAQ
使用第三方 SDK 本地测试上传文件,是否会导致 AccessKey 泄露?
使用第三方 SDK 完成本地测试上传文件的流程本身不会直接导致 AccessKey 泄露。AccessKey 泄露通常是因为 AccessKey 以明文形式硬编码在应用程序代码或公共代码仓库中,随后被他人获取。建议采取以下措施:
-
删除已泄露的 AccessKey 及对应的 RAM 用户。
-
定期轮转 AccessKey。
-
通过环境变量等方式管理 AccessKey 等凭据,避免在代码中明文保存。