谈AK管理之基础篇 - 如何进行访问密钥的全生命周期管理?
qiyuwang 2024-10-14 14:30 9 浏览 0 评论
简介: 我们也常有听说例如AK被外部攻击者恶意获取,或者员工无心从github泄露的案例,最终导致安全事故或生产事故的发生。AK的应用场景极为广泛,因此做好AK的管理和治理就尤为重要了。本文将通过两种AK使用不安全的典型案例,进行分析和介绍。
一、引言:
对于企业上云的典型场景,云账号管理员一般会给员工、应用程序或系统服务创建一个相应的用户账号。每个账号都可以有独立的身份认证密钥,俗称AK (AccessKey),它用于阿里云服务API的身份认证。既然是身份证明,证明你是某个云账号的合法拥有者,那么一旦泄露后果着实严重。我们也常有听说例如AK被外部攻击者恶意获取,或者员工无心从github泄露的案例,最终导致安全事故或生产事故的发生。AK的应用场景极为广泛,因此做好AK的管理和治理就尤为重要了。本文将通过两种AK使用不安全的典型案例,进行分析和介绍。
二、访问密钥误删,用户服务受阻
典型案例重现
2020年,某客户突然发现自己的一些项目的用户APP上传数据出现失败,这个上传数据功能使用了该云厂商上的某存储服务,客户发起工单认为云厂商的存储服务有故障。经排查发现该用户的Region其他业务方的生产活动正常,未出现明显异常;遂怀疑网络问题,建议客户查询网络连接,此时客户提交App端的错误日志,日志中显示是访问密钥没有找到,在云客服的指导下,并未发现有相同ID的密钥存在,然后在操作审计的记录中,发现该访问密钥是被其自己内部做了删除操作。
紧急处理
- 云产品建议该客户对使用的访问密钥马上替换,客户反馈APP上不好控制,特别iOS的app发布还要审核,周期太长;
- 客户紧急发布公告,通知其用户此功能暂时不可用,待升级后恢复。
影响
影响显而易见,对很多初创企业这样的故障会轻则导致用户体验差,重则关键功能不可用,对企业留存客户或者收入都会受到不同程度的影响。
分析和总结
- 这次故障主要是由于员工误删除AK导致,有的同学就会说,能不能有个类似垃圾站的功能,还可以回收?其实云厂商一般都会提供一个类似的功能叫激活/禁用,应当遵循“先禁用再删除”,以确保业务的正常持续;
- 此外,AK删除导致服务端的故障,值得引起注意和自查的是,用户作为管控和服务端使用的不同场景,是不是做了严格的区分?服务端使用和管控是否区分开等?员工和线上系统是否区分开?
- App应用中硬编码访问密钥,导致出现泄漏时,替换成本很大,不能马上进行轮转替换完成业务止损;其实App类业务不适合使用永久AK密钥来访问OpenAPI。
- 此外,应用反编译,hack已经是多发事件了,代码中存放永久密钥,泄露的风险巨大!
三、规范的访问密钥生命周期管理操作,保障安全生产进行
上述真实的案例不仅带给我们巨大的警示,那么针对访问密钥究竟在哪些环节进行规范操作?又应当通过什么办法进行管理控制呢?
1 、创建:访问密钥
- 再次敲黑板,不推荐使用主账号的访问密钥,原因很明显,主账号拥有的资源和权限太大,泄露后的风险不堪设想;
- 可以通过云厂商的访问控制等页面查看,有没有创建租户级别下的子用户,并实际使用的是这些子用户的访问密钥。
2 、配置:合适的权限
- 每个不同的应用使用不同子用户的访问密钥,这样可以做到应用级别资源和权限隔离;
- 每个子用户的权限是不是满足了最小可用原则,不扩大不要的权限;可以在测试环境试着减少权限,看看测试是不是能正常,不正常的话大概率这个权限是不能去除的;
- 通过RAM访问控制台查询,可以看到某一个用户所具有的权限Policy,以及Policy里具体的权限描述。
3 、删除:访问密钥
访问密钥的删除是不可恢复的,所以删除是具有一定风险的,只有在安全确认这把访问密钥没有任何使用记录后,才能删除,标准的流程如下:
- 首先把原来访问密钥使用的地方替换为新的访问密钥,然后监控需要删除的访问密钥的最后使用时间;
- 按照自己业务的状况,确定老的访问密钥的失效时间,比如根据业务状况确定7天为安全时间,即一把访问密钥7天没有使用记录就可以尝试删除老的密钥;
- 所以在安全时间既要到达删除的效果,又要在出现突发状况下把删除的访问密钥找回,云厂商都会提供一组这样的操作禁用/激活,使用禁用代替删除操作,禁用操作可以达到和删除一样的效果,但是可以满足突发状况下访问密钥的找回,即通过激活操作,把禁用的访问密钥恢复过来,就如同提供了一个垃圾箱的功能;
- 在访问密钥进行禁用后,持续观察业务是否有异常,直到一个最终安全时间,比如7天,如果没有任何老的访问密钥的使用记录,就可以真实删除了。
4、 泄露:密钥轮转
每个RAM用户最多可以创建两个访问密钥。如果您的访问密钥已经使用3个月以上,建议您及时轮换访问密钥,降低访问密钥被泄露的风险。
- 在需要轮转的时候,再创建第二个访问密钥。
- 在使用访问密钥的所有应用程序或系统中,更新正在使用的访问密钥为新创建的第二个访问密钥。
说明 :可以在控制台的用户详情页的用户AccessKey列表中,查看访问密钥的最后使用时间,以此初步判断第二个访问密钥是否已经被使用,原来的访问密钥是否已经不用。
3 禁用原来的访问密钥。
4 验证使用访问密钥的所有应用程序或系统是否正常运行。
- 如果运行正常,说明访问密钥更新成功,您可以放心地删除原来的访问密钥。
- 如果运行异常,您需要暂时激活原来的访问密钥,然后重复步骤2~4的操作,直至更新成功。
5 删除原来的访问密钥。
5 开发:避免密钥硬编码到代码
系统属性
在系统属性里寻找环境凭证,如果定义了 alibabacloud.accessKeyId 和 alibabacloud.accessKeyIdSecret 系统属性且不为空,程序将使用它们创建默认凭证。
环境凭证
在环境变量里寻找环境凭证,如果定义了ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量且不为空,程序将使用它们创建默认凭证。
配置文件
如果用户主目录存在默认文件 ~/.alibabacloud/credentials (Windows 为 C:\Users\USER_NAME\.alibabacloud\credentials),程序会自动创建指定类型和名称的凭证。默认文件可以不存在,但解析错误会抛出异常。配置名小写。不同的项目、工具之间可以共用这个配置文件,因为不在项目之内,也不会被意外提交到版本控制。 可以通过定义 ALIBABA_CLOUD_CREDENTIALS_FILE 环境变量修改默认文件的路径。不配置则使用默认配置 default,也可以设置环境变量 ALIBABA_CLOUD_PROFILE 使用配置。
[default] # 默认配置
enable = true # 启用,没有该选项默认不启用
type = access_key # 认证方式为 access_key
access_key_id = foo # Key
access_key_secret = bar # Secret
[client1] # 命名为 `client1` 的配置
type = ecs_ram_role # 认证方式为 ecs_ram_role
role_name = EcsRamRoleTest # Role Name
[client2] # 命名为 `client2` 的配置
enable = false # 不启用
type = ram_role_arn # 认证方式为 ram_role_arn
region_id = cn-test # 获取session用的region
policy = test # 选填 指定权限
access_key_id = foo
access_key_secret = bar
role_arn = role_arn
role_session_name = session_name # 选填
[client3] # 命名为 `client3` 的配置
type = rsa_key_pair # 认证方式为 rsa_key_pair
public_key_id = publicKeyId # Public Key ID
private_key_file = /your/pk.pem # Private Key 文件
6、 审计:定期分析访问密钥使用行为
通过规范访问密钥生命周期的管理操作,可以解决大部分由于不当操作导致的安全故障,但是很多安全问题,是需要分析访问密钥的使用数据才能发现的。
- 访问密钥存储泄露探测:是不是硬编码到代码里去了?可以借助代码托管平台提供一些服务来检测比如 Github Token scan;
云厂商也有类似一些方案帮助客户做检测,比如阿里云云安全中心的AK泄露检测。
- 异常访问密钥使用探测
这种分析主要是对密钥本身的实际使用相关的数据,日志等做分析,来看是否已经出现了异常。
厂商方案-操作审计
开启操作日志审计,并将其投递至OSS和SLS长期保存和审计,将操作日志存储至OSS,异常情况时可以起到固证的作用;操作日志投递至SLS,帮助您在日志数量大的时候也能实现高效检索。
厂商方案-访问日志审计
除了云产品的操作日志外,还有大量的云产品使用访问日志,这一部分也往往是数据访问的主要部分,比如OSS的Bucket上数据的写入,获取,修改和删除等。这部分日志可以直接通过阿里云提供的日志服务来做到收集,存储,统计和分析等,您在各个云产品控制台开通日志功能后,即可执行日志服务相关操作。
本地方案-自建分析引擎
对一些操作日志审计里没有记录的产品的访问日志,也可以通过云产品提供日志存储功能把这些日志记录并下载下来,通过自己离线的计算,和定时比较,发现上述异常访问记录。
统计分析
可以监控报警和分析的维度如下,可以通过下面相关维度的日常监控,来观测是否在各个维度上出现了非预期的访问,如果出现就预示了访问密钥可能已经出现泄漏,需要重点关注了:
- 使用访问密钥的IP是否是自有的机器的IP;
- 使用访问密钥的产品是否是自己购买过的;
- 使用访问密钥的region是否是自己预期的;
- 使用访问密钥的时间是不是服务自己的业务规律。
四、总结
本文从访问密钥的生命周期管理进行了分析和介绍,希望对于您在云上密钥管理能够有所启发和帮助。最后,附上AK使用锦囊:
禁止使用主账号,
子账号来隔离好;
密码一次要记好,
AK保密要记牢;
泄露先别乱阵脚,
先禁再删不可少;
两把AK分配好,
定期审计很重要;
究极安全无密钥。
本文为阿里云原创内容,未经允许不得转载
相关推荐
- windows开启telnet服务,检测远程服务端口是否可以连通
-
本文介绍windwos开启telnet服务,telnet服务一般可以用于检测远程主机的某个端口服务是否可以连通,在日常的工作中,我们经常会遇到在本地的windows检测远程服务端口是否可以连通。win...
- 仅在Web登录新华三交换机条件下启用设备Telnet登录方式
-
概述Web登录新华三交换机可以在“网络-服务”页面中启用设备Telnet服务或SSH服务,也可以在“设备-管理员”设置管理员用户的可用服务,然而,在设备Web页面中,无法设置lineVTY用户线【l...
- 思科交换机,路由器如何关闭telnet 开启ssh服务
-
SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。今天我们就来说说思科交换机,路...
- 智能化弱电行业常用的DOS命令,掌握了你也能成为...
-
前言在做智能化弱电项目时,前端摄像头设备安装结束后,我们会对网络摄像头进行调试,调试过程中会遇到前端摄像头没有图像或者图像出来了画面卡顿的现象。我们会采用ping命令来测试网络的连通性和网络承载能力。...
- 「干货」eNSP模拟器之配置Telnet登录
-
配置说明:配置Telnet,使R2(模拟PC)通过SW1登录到R1进行管理和配置。操作步骤:system-view##进入系统视图[Huawei]sysnameR1##改名为R1[R1]int...
- win11开启telnet服务怎么操作 win11打开telent指令是什么
-
telnet服务是我们在进行远程连接的时候,必须要打开的一项功能。但是有不少用户们不清楚在windows11系统中怎么开启telnet服务。今天小编就使用详细的图文教程,来给大家说明一下打开telen...
- 华三(H3C)交换机Telnet的远程登陆
-
一,配置交换机管理IP[SW1]vlan20//创建管理vlan[SW1]interfacevlan20//进入vlan接口[SW1-Vlanif20]ipaddress192.168....
- win10 telnet命令怎么查看端口是否打开
-
可能大家也会遇到这个问题,win10telnet命令查看端口是否打开的步骤是什么?具体方法如下:1、键盘输入快捷键WIN+R,打开运行窗口。2、输入cmd,点击确定按钮。3、弹出cmd命令行窗...
- Windows 7如何打开Telnet功能(win7系统打开telnet)
-
Windows7默认安装后是没有开启telnet客户端功能的,例如,我们在开始菜单中输入cmd,然后使用telnet命令,会弹出下图提示:‘telnet’不是内部或外部命令,也不是可运行程序或批处理文...
- 为锐捷路由器交换机开启web和telnet,实现轻松管理
-
笔者上一篇文章写了关于锐捷二层交换机配置教程,那么接下来讲一下锐捷的路由交换设备配置web、telnet技巧。同样,今天的教程也是基于命令行,比较简单,适合新手小白进行学习。准备工作配置前准备:con...
- 一文学会telnet命令的用途和使用方法
-
Telnet是一个古老的远程登录协议,可以让本地计算机获得远程计算机的工作能力。它采用了TCP的可靠连接方式,可以连接任何网络互通的远程计算机。不过由于它采用了明文传输方式,存在安全风险,目前已经很少...
- Telnet命令是什么?如何使用?(telnet命令在哪里开启)
-
telnet命令是一个常用的远程登陆工具,使用它,我们可以快捷地登陆远程服务器进行操作。那么如何使用telnet命令呢?首先,我们需要打开telnet功能,任何电脑默认是关闭此功能的,开启方式如下:打...
- win11系统如何开启telnet服务(拷贝版本)
-
我们要知道,Telnet协议是Internet远程登陆服务的标准协议,可以使用户在本地计算机上完成远程主机的工作,不过对于一些刚接触win11中文版系统的用户来说,可能还不知道telnet服务在哪...
- 如何开启telnet客户端(如何开启telnet服务)
-
Telnet协议是TCP/IP协议家族中的一员,是Internet远程登陆服务的标准协议和主要方式,Telnet是常用的远程控制Web服务器的方法。工作中经常用到telnet客户端,但在windows...
- Telnet 是什么,如何启用它?(telnet有什么用)
-
对于Internet等TCP/IP网络,Telnet是一个终端仿真程序。Telnet软件在您的系统上运行并将您的个人计算机链接到网络服务器。它将所有数据转换为纯文本这一事实被认为是易受...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)