滚动新闻 →
中国传统药食同源观念的形成 波兰高中校园持刀攻击酿8伤 警逮捕一名19岁男 张婉莹持中国护照恐潜逃 砸逾百万美元交保失败 中国媒体人洪广玉被跨省抓捕 疑因帮樱桃户维权 “寒露六不吃,吃了秋难安” 你知道是哪六不吃吗? 中国书法最基础的五种书体 如何培养孩子尊重服务人员的习惯 “粉碎四人帮”50周年 中共为何沉默? 视频色彩模式应该如何选择 汉武帝为什么不断向西北扩张 女子买房8年惊知客厅上方有坟 竟埋着7岁男童 小户型餐桌应该选择什么形状 战事升级胡塞猛攻沙特 联军反扑曼德海峡要地 从10·7血色黎明到政治追责 以色列迎来大选 碧云天黄叶地 秋色连波 温哥华的赏枫之旅 Crew-12 搭乘龙飞船返航 壮丽太空画面曝光 东北饮食为什么特别重视储存食物 油价破百推升通胀压力 美房贷利率创三年新高 川普回答本台提问:川普账户可对抗共产主义 诺贝尔化学奖揭晓 破解“分子左右手之谜” 专访司法部长:打击中共跨国镇压是重中之重 旅行遇到火车晚点应该怎么办 汽车冷却系统为什么需要排空气 派拉蒙完成收购华纳兄弟探索公司 川普支持 卢比奥访希腊 议题涵国防能源与区域战略合作 为什么很多电动车采用封闭式前脸 从3000到90名学生 纽约莫瑞柏格高中怎么了 美30年国债收益率升高 借贷成本面临上升压力 法国战斗机飞越三大洲 与印太多国联合训练 俄疑似鼠疫 多人接连病亡 中俄提前演练引质疑 房门为什么会越来越难关 中期选举提前投票启动 川普全国造势拼国会席位 俄罗斯爆肺鼠疫?你需要知道的几件事 加州侨领宣国军夫妇涉代孕伤害儿童 出庭受审 AI API 为什么需要限流,高并发请求可能从哪些方面击穿后端 GPU 集群 台征信社收钱监控沈伯洋 检起诉4人通缉2港人 Google Cloud Storage 权限怎么设置,公开文件和私有数据应该如何区分 大陆流行“奴工理论” 压榨员工催生“怨气产品” SaaS API 为什么需要版本号,长期维护接口时有哪些实际好处 显示器偏色严重怎么办?从连接线到面板逐步寻找硬件原因

Google Cloud 服务账号密钥安全吗,什么时候应该避免长期保存 JSON Key

发布时间: 2026-09-16 20:30:01    最后更新: 2026-10-05 23:30:43    阅读:60  约10 分钟阅读     

Google Cloud 的 Service Account Key 能不能长期保存?真正危险的是“静态凭证”思维

在 Google Cloud 环境中,Service Account 是应用程序访问云资源的重要身份机制,而 Service Account Key 则是一种让应用程序获得这一身份的传统方式。

问题在于,JSON 格式的 Service Account Key 文件本身包含私钥。一旦这个文件被复制、泄露或者被攻击者取得,攻击者就可能利用对应的服务账号身份访问其被授权的云资源。

因此,在现代云环境中,一个非常重要的安全原则正在逐渐明确:能不用长期保存的 Service Account Key,就尽量不要保存。

这并不是说 JSON Key 完全不能使用,而是说企业不应该把它当成默认、长期存在的认证方式。

一、JSON Key为什么危险

一个典型的 Service Account JSON Key 文件中包含服务账号信息以及私钥材料。私钥本身就是最需要保护的部分。

与用户名和密码类似,谁掌握了有效的私钥,就可能以对应服务账号的身份向 Google Cloud 发起经过认证的请求。

但它又比普通密码更加危险,因为服务账号往往不是一个普通用户,而是一个拥有大量自动化权限的系统身份。

例如,一个负责备份数据库的服务账号可能拥有Cloud Storage写入权限;一个负责部署应用的服务账号可能拥有Compute Engine或者容器平台相关权限。

如果这样的服务账号私钥泄露,攻击者获得的并不是某一个网页账户,而可能是一套能够调用云资源的机器身份。

因此,真正的问题并不是JSON这个文件格式,而是静态私钥长期存在于服务器、代码仓库、配置文件或者开发人员电脑中。

二、最危险的情况,是把JSON Key放进代码

实际开发中最容易出现的问题之一,就是把JSON Key放进项目目录。

例如开发人员为了让程序能够正常运行,把credentials.json直接放到应用程序目录,然后通过代码加载。

开发环境中可能感觉非常方便,但一旦项目被提交到Git仓库,风险就出现了。

更麻烦的是,即使开发人员后来删除这个文件,如果它已经进入Git历史记录,私钥仍然可能存在于过去的提交中。

因此,所谓“我已经把文件删除了”并不意味着密钥已经安全。

一旦私钥已经泄露,正确做法不是简单删除文件,而是立即处理对应的Service Account Key,并重新检查相关权限和访问日志。

三、生产服务器上长期保存同一个Key同样危险

另一种常见模式是把JSON Key上传到生产服务器,然后让应用永久读取这个文件。

这种方式确实简单,但问题也非常明显。

服务器一旦遭到入侵,攻击者首先会寻找环境变量、配置文件和密钥文件。

如果JSON Key长期存在于服务器文件系统中,攻击者获得服务器控制权之后,很可能进一步取得云平台访问能力。

更严重的是,如果同一个Key被多个服务器、多个容器甚至多个应用共享,那么一个系统出现漏洞,就可能影响整个服务账号的安全边界。

这就是为什么现代云安全越来越强调“工作负载身份”和“短期凭证”,而不是把一把长期有效的私钥复制到每台服务器上。

四、真正的问题是服务账号权限有多大

必须注意,Service Account Key本身并不会自动拥有整个Google Cloud项目的全部权限。

它能够做什么,取决于对应Service Account被授予了什么IAM权限。

这意味着密钥安全和权限设计实际上是两个相互关联的问题。

如果一个服务账号只有读取某个Cloud Storage存储桶的权限,那么即使它的Key泄露,攻击者能够造成的影响相对有限。

但如果一个服务账号拥有项目级管理员权限,那么同样的Key泄露以后,后果可能完全不同。

因此,安全设计不能停留在“保护JSON文件”这一层,而应该同时落实最小权限原则。

一个只负责读取数据的程序,不应该获得删除资源的权限。

一个只负责上传文件的服务,也没有理由获得修改整个项目基础设施的权限。

五、不要让多个服务共享同一个Service Account

微服务架构尤其容易出现这个问题。

例如企业有订单服务、支付服务、报表服务和文件处理服务,开发人员为了方便,给所有服务配置同一个Service Account Key。

这种做法看起来管理简单,实际上却破坏了权限隔离。

假设文件处理服务存在漏洞,攻击者取得了这个Key,那么他获得的权限可能不仅能够访问文件,还可以进一步访问订单、支付或者报表相关资源。

更合理的设计是根据业务边界划分Service Account。

订单服务使用自己的身份,支付服务使用自己的身份,报表服务使用自己的身份。

这样即使其中一个服务遭到攻击,攻击范围也更容易被限制。

六、Google Cloud更推荐什么方式?

如果应用运行在Google Cloud内部,通常应该优先考虑使用平台提供的工作负载身份机制,而不是手工生成JSON Key。

例如运行在Compute Engine、Cloud Run、Google Kubernetes Engine等环境中的应用,可以通过相应的工作负载身份机制获取短期凭证。

这种方式最大的优势是,应用不需要在代码目录里长期保存一个私钥。

应用需要访问云资源时,由云平台负责提供相应的身份和临时访问凭证。

对于Kubernetes环境,Workload Identity Federation尤其重要,因为它可以让Kubernetes工作负载与Google Cloud IAM身份建立对应关系,从而减少在Pod中保存静态密钥的需要。

七、Secret Manager并不能解决所有问题

有些开发人员看到“不能把JSON Key放代码里”,马上想到把JSON Key放进Secret Manager。

这确实比把私钥直接写进代码安全得多,但仍然需要明确一个问题:

Secret Manager解决的是“密钥如何安全保存和读取”,并不意味着“长期使用静态密钥本身已经成为最佳方案”。

如果应用每次启动都从Secret Manager读取一个长期有效的JSON Key,那么静态凭证仍然存在,只是存储位置更加安全。

因此,在能够使用工作负载身份和短期凭证的情况下,应该优先考虑消除长期JSON Key,而不是单纯把JSON Key换一个地方保存。

当然,对于确实必须使用静态密钥的特殊场景,Secret Manager等专业密钥管理系统仍然是比明文文件、代码仓库和普通配置文件更加合理的选择。

八、不要迷信“90天轮换”这个数字

很多安全方案喜欢给出固定的90天轮换周期,但企业不应该把“90天”理解成一个万能标准。

真正重要的是建立完整的密钥生命周期管理。

首先知道有哪些Key。

其次知道每个Key属于哪个Service Account。

然后知道它被哪些应用使用。

同时记录创建时间、最后使用情况以及负责维护的团队。

一旦某个应用不再需要这个Key,就应该删除,而不是让它继续存在。

如果Key已经泄露,则不应该等到轮换周期结束,而应该立即撤销。

换句话说,轮换只是密钥管理的一部分,减少长期存在的静态密钥数量才是更根本的办法。

九、发现Key泄露后,第一反应应该是什么?

如果企业怀疑Service Account JSON Key已经泄露,最忌讳的就是继续观察。

应该立即确认这个Key对应的是哪个Service Account,以及这个服务账号拥有怎样的IAM权限。

然后撤销或者删除已经泄露的Key,并根据实际情况生成新的认证方式。

与此同时,需要检查Cloud Audit Logs等审计记录,确认这个身份最近进行了哪些操作。

重点应该检查资源创建、删除、权限修改、数据访问以及异常时间段的活动。

如果攻击者已经利用这个身份执行过操作,那么简单地删除Key并不意味着安全事件结束。

因为攻击者可能已经创建了其他凭证、修改了IAM权限,或者在系统中留下其他持久化入口。

因此,密钥泄露后的处理应该是一次完整的安全事件响应,而不是简单“换一个密码”。

十、企业真正需要建立的是身份生命周期管理

对于现代云环境,Service Account不应该被理解为一个“程序密码”。

它实际上是一种机器身份。

既然是身份,就应该像管理员账户一样进行生命周期管理。

创建之前明确用途,使用过程中控制权限,运行期间记录访问行为,不再需要时及时撤销。

更理想的状态,是让应用获得短期、动态的访问凭证,而不是把一把永久存在的钥匙放在服务器里。

从安全架构角度看,最值得遵循的原则可以归纳为几个方面:减少静态密钥、采用短期凭证、实行最小权限、不同服务使用不同身份、记录身份活动,并建立明确的撤销机制。

JSON Key并不是绝对不能使用。某些外部系统、遗留应用或者特殊部署环境可能仍然需要它。

但问题在于,一旦使用,就应该把它当成高价值敏感凭证管理,而不是普通配置文件。

对于新的Google Cloud项目,如果能够通过Workload Identity Federation、应用默认凭证以及其他短期身份机制解决认证问题,就没有必要为了方便而生成一份JSON私钥,再把它复制到服务器、容器和代码仓库中。

云安全最危险的习惯,往往不是技术不够先进,而是为了“先跑起来”留下一个永久有效的秘密。

当这个秘密存在数年、被多个系统共享,而且没人真正知道它在哪里时,真正的安全风险就已经产生了。

喜欢这篇报道?

使用下面的功能,方便以后继续阅读和分享 MNewsTV

设为 Google 新闻首选来源 让 Google 新闻优先显示 MNewsTV 的最新报道 ›
★ 我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

捐助(Paypal): https://www.paypal.me/observeccp
订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP