当代理早已不在,其访问密钥却依然存在,会发生什么?

当代理早已不在,其访问密钥却依然存在,会发生什么?

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

云环境中,AWS IAM访问密钥不会自动过期,任务结束后常被遗忘,仍可能被攻击者利用。建议用CloudQuery同步凭证报告,通过SQL查询找出90天以上未使用且仍活跃的密钥,结合审计日志确认归属,先停用观察再删除;同时用策略在部署时禁止长期凭证,优先采用OIDC临时凭证,并为例外设置负责人和撤销期限。

🔎

延伸解读

非人类身份的生命周期盲区

文章指出,代理任务结束后其访问密钥常被遗忘,而AWS IAM密钥不会自动过期。OWASP将不当离职流程列为2025年非人类身份十大风险之首,强调应退役不再需要的身份并为其余身份指定负责人。难点在于先要知道存在哪些凭证,因此定期同步凭证报告并查询是发现遗留密钥的起点。

90天查询是审查清单,不是判决

文章提供的SQL查询会返回创建超过90天且至少90天未使用的活跃IAM用户密钥,但作者明确提醒90天只是审查阈值。季度任务可能有安静的密钥,最后使用日期为空或为占位符意味着需要调查而非“从未需要”。查询结果还需结合审计日志和具名负责人确认归属,并单独紧急审计根账户密钥。

停用可逆,删除不可逆

文章建议先停用特定密钥并观察,因为停用可逆但并非无害:季度批处理或灾难恢复任务可能在常规发布周期之后才失败。观察期应匹配工作负载的调度,取得负责人签字后再按变更流程删除,因为删除不可逆。凭证报告不含密钥ID,需另行查询密钥ID和最后使用元数据。

策略拦截与例外管理

部署时策略只能拦截由该平台管理的部署中创建的长生命周期凭证,无法覆盖控制台、外部脚本或平台任务创建的凭证,也不撤销部署身份本身。因此仍需云原生IAM控制和凭证清单配合。若集成确实需要持久密钥,应走有记录的例外:具名负责人、特定工作负载、最小权限、撤销期限、安全存储、监控和审批记录。

❓

Q&A

AWS IAM访问密钥会自动过期吗?如果代理任务结束后密钥没删会怎样?

不会自动过期。AWS IAM用户访问密钥没有自动过期机制,任务结束后若无人停用或删除,密钥会一直有效,可能被攻击者利用。

如何用CloudQuery找出超过90天未使用但仍活跃的IAM访问密钥?

启用aws_iam_credential_reports表并同步AWS IAM凭证报告,然后用SQL查询:取每个报告的最新行,将两个密钥槽转为行,筛选active=true、创建超过90天且最后使用超过90天或为NULL的密钥,排除root账户。CloudQuery Platform使用ClickHouse方言,PostgreSQL需调整语法。

发现一个长期未使用的IAM密钥后,应该直接删除还是先停用?

应先停用(Deactivate)并观察。停用是可逆的,但可能影响季度批处理或灾难恢复任务,需根据工作负载周期观察认证错误,获得负责人确认后再按变更流程删除,因为删除不可逆。

如何在部署时禁止创建长期凭证,优先使用临时凭证?

可使用env zero的审批策略(基于OPA)在Terraform/OpenTofu计划阶段拒绝特定长期凭证资源类型(如aws_iam_access_key)。同时优先采用OIDC联合身份认证,AWS角色签发随会话过期的临时凭证。策略仅在部署和销毁时执行,不覆盖控制台或外部脚本创建的凭证。

如果业务确实需要长期访问密钥,应该怎么管理例外?

应建立有记录的例外:指定负责人、明确工作负载、最小权限、设置撤销截止日期、安全存储、监控和审批记录。IAM访问密钥无法打标签,需在身份和凭证清单中记录归属。对于Terraform管理的凭证,可将一次性凭证放在同一环境并设置TTL作为拆除点,但TTL不是凭证过期,需验证撤销是否成功。

凭证报告能直接告诉我某个密钥属于哪个代理吗?还需要结合什么信息?

不能。凭证报告不包含密钥ID,也不说明哪个代理使用了账户。需要结合审计日志和指定的负责人来确认归属,然后通过aws iam list-access-keys和get-access-key-last-used查找密钥ID和最后使用时间,再执行停用。

🏷️

标签

➡️

继续阅读