我的阿里云 AK 差点就泄露了:一次最小权限改造实录

简介: 同事在群里发了张截图,我们仓库的 .env 里躺着一把主账号 AK——四年没换、三个团队共用。从止血到收权限再到让密钥从代码里彻底消失,完整记录这次改造的每一步和自查清单。

周五下午 5 点 27 分,群里弹出一张截图

DevOps 的老王在群里丢了张截图:我们一个内部仓库的 .env,第 12 行赫然躺着 ALIYUN_AK=LTAI5t...。配文只有一句:"这玩意儿应该在 code repo 里吗?"

那一瞬间我脑子里的画面不是"完了",而是"这个号上有多少东西"。很多人第一反应是删文件、改密码,但真正该先搞清楚的,是这把钥匙到底能开几扇门。当时我还挺自信——生产环境用了 KMS 加密,问题不大。打开 RAM 控制台之后,这份自信存活了大概十一秒。

顺藤摸瓜,越挖越凉

第一,那是主账号的 AccessKey。 它默认握着账号里最大的一把枪,策略上写着 Action: "*"、Resource: "*"。第二,它四年没换过。第三——这个最难受—— 三个团队、七八个服务共用同一把 AK,日志里根本答不出"谁在调 API"。

泄露的路子也比我想的多:

  • 硬编码进代码,还有人贴心地写了 # TODO: 挪到环境变量,这个 TODO 挂了两年;
  • 配置中心、K8s ConfigMap、Jenkins 全局变量,一个都没落下;
  • CI 里 echo 调试完忘了删,构建日志永久留存;
  • 镜像里删了 .env,但 docker history 和各层里还躺着一份——那只是盖了块白布。

长期 AK 的危险不在难破解,而在于它是一张没有有效期、没有身份、没有用途边界的通行证。一旦流出,攻击者不用绕过任何认证,照着文档调 OpenAPI 就能拉数据、开机挖矿、加一个自己的后门子账号。

第一步:止血——先禁用,再换钥匙

我们没直接删那把 AK,而是先禁用。原因很朴素:直接删,你会同时收获一次线上事故和一堆追问。禁用之后挂一天,谁的调用报 InvalidAccessKeyId,谁就自己暴露了——成本最低的资产盘点。

盘完所有调用方,才发新凭证,顺手立两条规矩:

  1. 不再共用。 每个调用方一个 RAM 用户,命名 svc-{业务}-{环境},出事一秒定位到服务。
  2. 控制台登录一律关闭,只留编程访问。 确需登录的人走独立 RAM 用户,强制绑 MFA。

这一步没什么技术含量,但它把"匿名钥匙"换成了"实名钥匙",后面的治理才有抓手。

第二步:收权限——最小权限不是"少给点"

换钥匙只是止血,旧策略还是 *。权限我们收成三层。

用用户组做批量管理。 按业务建组,权限策略挂在组上,人来人往只动成员关系——不然每次有人离职,都得在一堆内联策略里玩俄罗斯方块。

按需授权,Action 和 Resource 一起收。 一个只往某个 OSS 目录写报表的服务,策略大概这样:

{
   
  "Effect": "Allow",
  "Action": ["oss:PutObject"],
  "Resource": ["acs:oss:*:*:report-bucket/daily/*"]
}

关键在 Resource。只把 Action 收窄却留着 Resource: "*",等于给万能钥匙换了个钥匙扣。能用条件(Condition)的再叠一层,限制来源 IP 或 VPC。

能不用系统策略就不用。 AliyunXXXFullAccess 上手快、埋雷也快。我们全量盘了一遍,逐个换成自定义策略,顺便发现有三分之一的权限从来没被调用过。

第三步:让密钥从代码里彻底消失

前两步是把密钥管好,第三步是根本不需要密钥。

ECS 上跑的服务一律绑定 RAM 角色,也就是实例角色。应用不再保存任何 AK,SDK 自己去实例元数据服务(100.100.100.200)取 STS 临时凭证,到期自动刷新,配置文件里那行 accessKeyId 直接删掉。临时凭证默认一小时有效期,即使被截获窗口也就这么长,而且每份都能回溯到"哪台实例、扮演了哪个角色"。

跨账号用 AssumeRole:A 账号要读 B 账号的数据,不是把 B 的 AK 复制一份过去,而是 B 建一个角色、把角色 ARN 授给 A 的 RAM 身份,再配合 ExternalId 和收窄的会话策略,把能干什么卡死在会话级别。

改完这一轮,代码库里的 LTAI 从"必需品"变成了"可疑物"——好信号。(RAM 本身是免费服务,创建 RAM 用户的入口在 访问控制 RAM 产品页,点「RAM 管理控制台」就能进。)

改造之后,我给自己列了张自查清单

代码库里还有没有硬编码凭证?

  • 用 AK 特征前缀在全量 git 历史里搜,别只搜 HEAD——文件删了,提交记录还在;
  • 上 gitleaks / trufflehog 一类工具,扫历史提交和各个分支;
  • 在 CI 加卡点,pre-commit 或流水线先扫再构建;
  • 镜像也翻一遍:docker history、导出 tar 看各层有没有残留的 .env。

权限是不是真的收敛了?

  • 收紧策略后跑一遍业务回归,再去操作审计里翻这段 API 调用,看实际用到的 Action 和策略对不对得上;
  • 操作审计是主力:谁、何时、从哪个 IP、调了什么、成功还是失败,一目了然;
  • 定期拉一次"90 天未使用的权限"和长期未用的 AK;
  • 故意做一个越界操作,确认它真的被 Deny,而不是你以为它被 Deny。

临时凭证链路通不通?

  • 在实例上确认能取到 STS 凭证,且有明确过期时间;
  • 代码里再搜一遍 LTAI 和 accessKeySecret,确认没留"兜底"的本地密钥——很多改造就栽在这个兜底上。

另外,AK 定期轮换别设成"下次一定",把 AK 泄露检测接上,让它主动告警,而不是等同事截图。

一点心得

这次最大的收获不是记住几个产品名词,而是想明白一件事:权限治理的核心不是加密,是让每一次调用都能对应到一个具体的身份和一个具体的用途。

长期 AK 危险,是因为它同时抹掉了这两样:没有身份,出事查不到人;没有用途边界,一出事就是全域。RAM 用户、最小权限策略、实例角色、STS,本质都是在把这两样一件一件加回去。

至于最小权限,它不是能画勾的配置项,而是每季度都要重做一遍的动作。发截图的老王,后来成了我们权限审计的常驻轮值——最早发现问题的人,最有动力盯着它别复发。

相关文章
|
3月前
|
人工智能 自然语言处理 机器人
阿里云千问大模型详细介绍:包含模型、应用场景、模型服务和Agent开发平台,免费tokens活动
本文介绍了阿里云自主研发的通义千问(Qwen)大模型全栈产品体系,覆盖从2.4万亿参数的旗舰MoE模型Qwen3.8-Max,到轻量极速版、千万级超长上下文Qwen-Long,再到多模态、代码、垂直领域的完整模型谱系。其依托优化的混合专家架构,实现了高性能与低算力成本的平衡,原生支持全模态理解、百万级长文档处理与端到端智能体执行,打通阿里生态四百余项服务。配套阿里云百炼平台提供从API调用到低代码Agent开发的全链路能力,当前新用户可免费领取超7000万Tokens的90天体验额度,大幅降低开发者与企业落地AI应用的门槛。
|
1天前
|
人工智能 开发者
阿里云优惠券是什么?在哪领取?如何使用?代金券使用指南
阿里云2026年最新优惠券指南:涵盖AI焕新季1728元券、学生300元无门槛券、企业上云补贴、域名口令及1元购活动。提供官方权益中心、高校计划、企业补贴三大领取入口,详解查询路径(费用→账户→卡券)与支付使用方法,助您省钱上云。
57 27
|
3月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
4961 157
|
1天前
|
人工智能 安全 JavaScript
Qoder × Jev:重新思考 Agent 如何判断和行动
Qoder探索Agent新分工:生成模型负责理解规划,Jev类System One判断模型专精高频、边界明确的语义决策(如“下一步做什么”),Harness则统一管控权限、执行、验证与回退。本文以Jev为切入点,介绍其在Auto Mode(自动执行判定)和浏览器自动化(页面操作选择)两大场景的实践,展现专用判断模型如何提升效率与可控性。
87 0
|
1天前
|
人工智能 运维 IDE
阿里云Qoder CN面向所有个人用户开放Qwen3.8-Flash限时免费活动介绍
本文将系统性地解析Qoder CN产品体系的架构组成、Qwen3.8-Flash的技术特性、限时免费活动的完整规则与边界条件,并对使用路径、扣减机制及常见问题进行严谨说明,帮助个人用户在免费窗口期内最大化利用该算力资源。
|
1天前
|
人工智能 缓存 程序员
开通就送千万 tokens?我把百炼和千问 API 翻了个底朝天
每个程序员都有个没做完的 AI 梦。这次我把百炼跑通了:开通领额度、拿 Key、改 base_url,账单也算明白了。
|
3天前
|
数据采集 存储 缓存
【建站实战】用 ESA + Cloudflare 把网站月费压到接近零费用
本文以geojsoncn.com为例,详解如何用阿里云ESA(中国边缘)+ Cloudflare Workers + R2构建百度友好型静态站:ESA保障国内可达与ICP备案,Workers无服务器计算,R2低成本存储。三者协同,月成本压至约10元,兼顾SEO硬指标与极致性价比。(239字)
|
5天前
|
Cloud Native 专有云
阿里云个人邮箱登录入口官网在哪里?我的邮箱@aliyun.com在哪登录?
本文汇总阿里云邮箱全入口:@aliyun.com个人邮箱登录页、免费企业邮箱(5年/50账号)申请链接、付费企业邮箱官网及后台管理地址,含图文指引,助您快速找到对应入口。
|
3月前
|
人工智能 关系型数据库 分布式数据库
阿里云数据库产品专属活动解析:数据库上云优选,数据库产品年付3折起,RDS年付88元起!
阿里云推出数据库专属普惠活动,瑶池数据库全系产品年付低至3折起,覆盖RDS、PolarDB、Redis、MongoDB及创新Supabase、Agentic AI等服务。核心产品中RDS MySQL基础版年付仅88元,Redis高可用版年付72元,PolarDB标准版年付3816元,满足从个人开发到企业核心业务的多层次需求。活动主打"Data+AI"战略,Supabase系列支持通过SQL直接调用内置AI模型,降低AI应用开发门槛。新客享指定规格3折优惠及1个月免费试用,试用后购买可享首年5折起,搭配"先试后买"策略大幅降低上云试错成本,助力企业平滑迈向AI-Native数据智能时代。
|
2月前
|
人工智能 自然语言处理 运维
小白商家实操记录|踩坑复盘:全渠道品牌信息不统一,导致通义千问AI识别彻底混乱
深圳实体商家亲历AI收录踩坑:因品牌信息口径混乱,通义千问抓取错乱、混搭同行内容。复盘发现,大模型依赖全域信息一致性确权,非内容数量。通过统一品牌名称、业务口径、清理过时信息,10天实现精准稳定展示。小白入局阿里云AI生态,务必先做信息归一化!
164 0

热门文章

最新文章