安全管理最佳实践系列:给ECS实例配置一个RAM角色身份(使用动态STS-Token访问云服务API)

简介: 如果你的应用程序部署在ECS实例中,你可能会苦恼于应用程序的AK配置安全问题及管理难的问题。为此阿里云提供了给ECS实例配置RAM角色的解决方案,使得运行ECS实例中的应用程序将不再需要配置AK,而只需要从ECS Metadata服务中获取StsToken就可以访问阿里云服务API,让你不再担心应用程序的AK配置安全问题和难管理的问题。

问题描述

AK(AccessKey)是代表用户身份的钥匙,是用户访问阿里云API的身份认证密钥。如果部署在ECS实例中的应用程序需要访问各种阿里云服务API,用户通常会将AK保存在应用程序的配置文件中,使得应用程序能读取AK来调用阿里云服务API。这里存在两个问题:(1) 保密性问题。不管AK以何种形式存在于实例中,它都可能随着快照、镜像及镜像创建出来的实例被泄露。(2) 难运维性问题。由于AK存在于实例中,如果要更换AK(比如周期性轮转或切换用户身份),那么需要对每个实例和镜像进行更新并重新部署,这会极大增加对实例和镜像管理的复杂性。

针对保密性问题的通常解法是借助加解密(Crypto)或访问控制(Access Control)技术。

加密方案

由于AK本身也是一种密钥,而加解密技术通常不适合保护密钥本身,因为总有最后一把密钥(Last Key)是需要保护的,所以加密技术这里不适用。当然可能有少数区域的ECS实例提供了可信加密设备支持(比如HSM、TPM或SGX),但基于硬件来保护Last Key的方法是另一个专题,本文不做讨论。

访问控制方案

一种简单有效的AK保护做法是采用访问控制技术。比如,可以使用操作系统提供的访问控制机制来保护存放AK密钥的配置文件,比如
$ chmod 400 ~/.aliyuncli/credentials (只允许当前用户可读) 在用户登录管理严格的条件下,这种机制可以起到一定的保护作用。但由于AK本身没有加密,通过快照或镜像泄露之后就可能绕过访问控制机制,仍然可能泄漏。

针对难运维性问题就难解了,只要AK存在于实例文件中,对大量实例和镜像的管理复杂性就无法降低。

阿里云的技术方案

站在操作系统设计的角度,用户态中难解的问题,在内核态看来根本不是事。同样,ECS实例中难解的问题交给ECS管控来解,也不是难题。

阿里云ECS结合RAM (Resource Access Management)提供的访问控制能力,针对此问题提供了一个根本的解决方法 —— 通过给ECS实例配置RAM角色来避免AK泄露及运维难的问题。

技术原理

图1详细描述了如何给ECS实例配置RAM角色的工作原理:


a1
(图1)

Step 1. 云账号(root)在RAM中创建一个ECS实例型的RAM-Role,并对角色授予合适的Policy权限。

Step 2. 启动ECS实例时,可以配置使用上一步骤中创建的RAM-Role。

以上两步的具体操作请参考通过控制台使用实例型RAM角色 或 通过API使用实例型RAM角色

所谓ECS实例型角色,它只是RAM服务角色中的一种类型,表示该角色是由客户创建并授权给该客户的ECS实例所使用。ECS服务在创建实例时:(i) 根据所配置的RAM角色,调用AssumeRole去访问STS请求获取该角色的StsToken;(ii) STS服务会验证ECS服务身份及该角色的授权类型,验证通过后颁发StsToken,否则拒绝请求。获取到StsToken后,ECS将通过Metadata服务提供给实例中的应用程序访问(HTTP访问地址:100.100.100.200 )。StsToken过期时间通常为6小时,在过期之前ECS服务会自动维护StsToken的刷新。

Step 3. 获取StsToken。

ECS实例中的应用程序需要通过访问 ECS Metadata服务来获取相应的StsToken。比如, 在Linux中执行命令:

$ curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<roleName> 

即可获取StsToken及过期时间等元数据信息。

Step 4. 使用StsToken调用云服务API。

如果你的应用程序使用了阿里云SDK,那么阿里云SDK已经支持从ECS Metadata服务中获取实例RAM角色的StsToken,开发者无需在SDK中配置任何AK相关敏感信息。详细使用方法,请参考阿里云SDK支持InstanceProfileCredentialsProvider。

Step 5. StsToken在有效期内及权限范围内都能正常访问云服务API。如果StsToken过期,那么需要从ECS Metadata服务中重新获取StsToken;如果StsToken权限不足,那么需要找管理员给实例RAM角色添加足够的权限。实例RAM角色的权限更新后,StsToken权限立即生效,用户无需重新启动ECS实例。

关于RAM的PassRole说明

在上文的技术图解1中,读者可以发现授权者和ECS实例操作者都是管理员。而对很多企业客户来说,授权者和ECS实例操作者通常都是不同的RAM用户,不同的人干不同的事,职责分离。

那么针对管理员与操作员分离的客户场景,我们需要对图解1进行一下扩展,得到如下的图解2:


a2
(图2)

除了增加Step 1.5之外,其它各步骤与图解1相同。

当RAM用户(假设仅有ECS权限,而并非RAM权限管理员)在创建ECS实例并配置RAM角色时,这个RAM用户必须要被授予对该角色的PassRole权限。ECS服务会强制检查当前用户是否拥有指定RAM-Role的 ram:PassRole 权限,否则无法成功创建ECS实例。这样做能确保只有被授权用户才能为ECS实例配置RAM角色,从而避免RAM角色权限被滥用。

Step 1.5 管理员给操作员增加一个PassRole权限。

管理员可以通过RAM按如下Policy样例创建一个自定义策略(注意替换rolename为自己的RAM角色名称),然后将这个自定义策略授权给操作员:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram:*:*:role/<rolename>"
    }
  ]
}

至此,你已经通晓了ECS实例型角色的概念和技术原理,赶紧开启安全最佳实践吧,让你不再因为ECS实例中的AK泄露和管理难的问题而烦恼了。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
2296 0
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
788 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1361 17
钉钉宜搭--远程API,在其他人访问时无法生效
简介: 描述了一种远程API配置问题的场景。开发人员在本地可正常通过应用表单获取数据,但同组织的其他同事访问时无法获取数据,尽管已设置全部权限。问题是关于如何解决这种跨用户数据访问异常的情况,确保同事间能正常共享数据。
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
862 1
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
674 2
如何申请微店的API访问权限?
申请微店API访问权限需先注册账号并完成实名认证,随后提交开发申请,学习API接口,实现功能和数据传输,申请授权获取API Key,测试接口,最后正式上线并持续维护优化。
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{&quot;code&quot;:200,&quot;ip&quot;:&quot;175.154.88.178&quot;,&quot;browser&quot;:&quot;Chrome&quot;,&quot;os&quot;:&quot;Windows 10&quot;}。详情见官网文档。
914 0
|
监控 关系型数据库 API
Dataphin数据服务系列之--API 配置、管理和消费
研发小哥哥还在为公司里大量 API 只上不下,不可查不可用, 想找的 API 找不到而苦恼吗?业务方小姐姐还在为 API 开发时间长,业务相应不及时而抱怨吐槽吗? 铛铛铛,Dataphin 数据服务 -- API 配置管理,闪亮登场!助力研发小哥哥五分钟搞定 API,提升业务响应速度,同时大大提升 API 复用能力!作者:张尘初 更多内容详见数据中台官网 https://dp.alibaba.comDataphin 数据服务Dataphin 是阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体。
4902 0