安全管理最佳实践系列:给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泄露和管理难的问题而烦恼了。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
55 18
[Git] 深入理解 Git 的客户端与服务器角色
|
1月前
|
弹性计算 监控 安全
API稳定安全最佳实践:用阿里云SDK为业务保驾护航
阿里云智能集团高级技术专家赵建强和曹佩杰介绍了API稳定安全最佳实践,涵盖业务上云真实案例、集成开发最佳实践、配额管理和共担模型四部分。通过分析企业在不同阶段遇到的问题,如签名报错、异常处理不严谨、扩容失败等,提出了解决方案和工具,确保API调用的安全性和稳定性。特别强调了SDK的使用、无AK方案、自动刷新机制以及配额中心的作用,帮助用户构建更稳定、安全的服务,提升运维效率。最终介绍了集成开发共担模型,旨在通过最佳实践和平台工具,保障业务的稳定与安全,推动行业创新与发展。
|
1月前
|
存储 算法 数据挖掘
服务器数据恢复—nas中raid6阵列失效,存储无法访问的数据恢复案例
一台nas上共有14块硬盘组建了一组raid6磁盘阵列。 该nas在工作过程中,raid6阵列中硬盘出现故障离线,导致raid6阵列失效,nas无法正常访问。
|
2月前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
111 9
|
2月前
|
监控 数据管理 测试技术
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
|
3月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
3月前
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
118 1
|
3月前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
85 12
|
3月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
59 5
|
3月前
|
JSON API 开发者
构建高效API:后端开发中的RESTful最佳实践####
在数字化时代,API作为不同系统间通信的桥梁,其重要性日益凸显。本文将深入探讨RESTful API的设计原则与最佳实践,通过实际案例分析,揭示如何构建高效、可维护且易于使用的API接口,助力后端开发者提升项目质量与用户体验。 ####