如何在阿里云上安全的存放您的配置 - 续
在《如何在阿里云上安全的存放您的配置》一文中,我们介绍了如何通过ACM存放您的敏感配置,并进行加密。这样做的目的有两个:
- 在应用程序或对应生产环境容器或系统中,无需持久化任何敏感数据信息(如数据库连接串,等),以防止生产环境或开发过程中的敏感信息泄露。
- 配置数据在配置中心存放且全程加密,进一步保证数据的安全性。
然而在之前文章中,其中一个遗留问题是如何存放访问ACM配置本身的敏感信息,比如要访问ACM本身需要的AccessKey ID(简称AK)或Secret AccessKey(简称SK)如何存放,即所谓敏感配置的"最后一公里"问题。而就在最近ACM发布的4.4版本中包含了一个重要的功能"ACM SDK支持ECS实例RAM角色",使得上述问题得到彻底解决。我们来看看ACM是怎么做的。
为说明ACM的做法,本文将分为两个部分:
- 第一部分,通过简单介绍"ECS实例RAM角色"的原理,让读者理解如何可以不通过输入AK/SK来调用阿里云的SDK。
- 第二部分,通过介绍ACM支持"ECS实例RAM角色"的方法和使用场景,让读者进一步理解如何利用ACM的彻底在代码中去掉敏感配置和AK/SK的。
"ECS实例RAM角色"原理
首先来看看所谓"ECS实例RAM角色"的原理。ECS实例RAM角色是阿里云RAM角色的一种,它让ECS实例扮演具有某些权限的角色,从而赋予实例一定的访问权限。实例RAM角色允许用户通过一个RAM角色关联到ECS实例,在实例内部基于STS(Security Token Service)临时凭证(临时凭证将周期性更新)访问其他云产品的 API。这样,一方面可以保证 Access Key 安全,另一方面也可以借助 RAM 实现权限的精细化控制和管理。
ECS实例RAM角色的推出,主要就是为了解决敏感信息AK/SK的存放难题,这跟ACM敏感配置信息存放要解决的"最后一公路"问题是一致的。我们接下来通过ECS实例RAM角色的使用步骤来窥探其中原理,如下图:
如上图,ECS的实例角色在使用时,分为5个步骤。
1. 云账号(root)在RAM中创建一个ECS实例型的RAM-Role,并对角色授予合适的Policy权限
2. 启动ECS实例时,可以配置使用上一步骤中创建的RAM-Role
(注:以上两步的具体操作请参考通过控制台使用实例型RAM角色 或 通过API使用实例型RAM角色)
通过以上两个步骤后,ECS服务在创建实例时:
- 根据所配置的RAM角色,调用AssumeRole去访问STS请求获取该角色的STS Token;
- STS服务会验证ECS服务身份及该角色的授权类型,验证通过后颁发STS Token,否则拒绝请求。
- 获取到STS Token后,ECS将通过Metadata服务提供给实例中的应用程序访问(HTTP访问地址:100.100.100.200 )。
- STS Token过期时间通常为6小时,在过期之前ECS服务会自动维护STS Token的刷新。
3. 应用程序获取STS Token
ECS实例中的应用程序需要通过访问 ECS Metadata服务来获取相应的STS Token。比如, 在Linux中执行命令:
$ curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<roleName>
即可获取STS Token及过期时间等元数据信息。
4. 使用STS Token调用云服务API
这是关键的一步。如果用户的应用程序使用了阿里云SDK,且阿里云SDK已经支持从ECS Metadata服务中获取实例RAM角色的STS Token,那么开发者无需在SDK中配置任何AK相关敏感信息。详细使用方法,请参考阿里云SDK支持InstanceProfileCredentialsProvider。
5. STS Token在有效期内及权限范围内都能正常访问云服务API
如果STS Token过期,那么需要从ECS Metadata服务中重新获取STS Token;如果STS Token权限不足,那么需要找管理员给实例RAM角色添加足够的权限。实例RAM角色的权限更新后,STS Token权限立即生效,用户无需重新启动ECS实例。
ACM支持"ECS实例RAM角色"的方法和使用场景
ACM支持"ECS实例RAM角色"的方法和上诉架构的原理相同。用户在使用该方案时,需要先操作"步骤1-在RAM中创建一个ECS实例型的RAM-Role",和"步骤2-启动ECS实例时,可以配置使用上一步骤中创建的RAM-Role"。作为阿里云SDK的一部分,ACM SDK本身默认帮助用户完成3、4、5三个步骤,用户只需要通过调用ACM SDK专注业务敏感配置获取即可。
为进一步理解以上所属原理,我们设想一个场景,用户需要通过一个数据库连接串(含密码)访问某数据库。在常规场景下,用户需要在配置文件中设置这些敏感信息,并将配置发布到生产环境。而在使用ACM以后,用户将不再需要存放任何敏感信息在应用程序中;取而代之的,程序员在连接相关服务时只需要完成两部分工作,
- 基于ACM SDK获取业务的敏感配置信息,如数据库连接串,等。
基于获取的敏感配置信息去调用对应的服务。
- 注:以上两个步骤不需要应用程序设置任何AK/SK信息。
用户使用ACM SDK基于"ECS实例RAM角色"获取配置的方法和场景如下图所示。
如图所示,对于第二步ACM SDK去ACM服务获取配置的关键步骤中,ACM SDK将默认基于ECS MetaService中"ECS实例RAM角色"的STS Token临时认证信息向ACM服务进行认证,而不需要任何外部的AK,SK的输入,从而绕开了用户手动输入AK, SK的要求。
如图上所描述,该方法的适用场景包括任何携带敏感信息的数据服连接串,服务器临时登录信息,第三方软件的license信息,等。
总结
以上文章概述了如何利用ACM来存取程序的敏感信息。通过这种做法,在安全方面应用将得到以下优点:
- 通过将敏感配置信息从程序中剥离并在ACM中保存,使得在开发和生产环境中最大程度保证了敏感信息不会被泄露。
- 同时,应用通过"ECS实例RAM角色"的临时认证信息访问ACM,在生产环境中不持久化任何永久性AK/SK信息,杜绝了永久性AK/SK泄露带来的安全性问题。
在接下来章节中,我们将提供一个代码实例来进一步讲解如何使用ACM来存放敏感配置,敬请期待。
如何在阿里云上安全的存放您的配置 - 续相关推荐
- 如何在阿里云上安全的存放您的配置
摘要: 如果您现在正开始着手准备解决自己的生产数据泄露问题,那么您可能需要看下这篇文档,了解如何可以从配置着手来改善下您目前的情况. 您是否在您的应用部署环境里遇到过以下情节 将敏感信息(如数据库连接 ...
- 如何在阿里云上构建一个合适的Kubernetes集群
摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其 ...
- python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试
简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...
- 个人建设网站流程解说,手把手教你如何在阿里云上搭建自己的网站
现如今信息化时代,很多企业甚至是个人都有自己搭建网站的需求,目前建站有两方式,第一:找网络公司全程负责搭建:第二:自己建设:找网络公司建设网站市场价格不一,网络公司的实力技术也不一样,所以会有很多的建 ...
- IP报文在阿里云上的神奇之旅:同地域内云上通信
作者:姚悠 阿里云专家服务团队 一个IP报文如何跨越万水千山达到目的地?本文将以阿里云为例,带领大家一起探索同地域内云上通信的全过程,完整展现云上同地域内各种场景的IP报文之旅,深入理解云网络技术 ...
- 动态分区分配算法实现_阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区...
本文关键字:利用colinx+virtio winpe定制aliyun多分区linux系统盘,在winpe xp winpe中运行colinux,在windows pe下真正操作linux分区,利用c ...
- 阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区
本文关键字:利用colinx+virtio winpe定制aliyun多分区linux系统盘,在winpe xp winpe中运行colinux,在windows pe下真正操作linux分区,利用c ...
- 微信小程序 实现阿里云上传
先安装,我使用composer安装 在项目的根目录运行composer require aliyuncs/oss-sdk-php 微信小程序页面 <l-image-picker count=&q ...
- 【SVN】在阿里云上创建svn服务器
1.创建用户及相关设置 阿里云搭建ubuntu18.04工作台,默认只有root超级用户.为了安全起见,我们使用普通用户来创建svn: useradd hello // 创建用户hello mkdir ...
最新文章
- next用法C语言,C语言可变参数的使用
- (转)SpringMVC学习(三)——SpringMVC的配置文件
- flac3d命令流实例大全_ANSYS APDL 疲劳分析实例附命令流
- TDengine安装教程
- 程序员面试中遇到问题
- LeetCode 1207. 独一无二的出现次数
- c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
- 云服务器选ssd还是hdd_SSD和普通硬盘对比?SSD到底好不好?看超变态测试
- 保存同一个H264视频流,第一个文件能播放,第二个播放不了。为什么
- MCSE 2012 R2之工作文件夹Word Folders(2)
- 砍价小程序有人做过吗?调用多多砍价记录,可以转口令或者链接的那种
- 服务器系统怎么安装网卡驱动,网卡驱动怎么安装,教您网卡驱动的安装操作
- 《MySQL DBA: InnoDB_doublewrite/ChangeBuffer/AHI/FNP》
- 图文讲解 WiFi 驱动移植过程,很肝~
- implicit super constructor animal() is undefined for default constructor. Must define an explicit 异常
- MUSCI算法估计空间方位角
- Linux下使用Shell脚本实现反向ssh自动交互
- JSON与properties文件的相互转换
- windows环境下设置多个PHP版本的环境变量
- 缓冲区溢出漏洞浅析(三)
热门文章
- Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
- 我的Rails笔记(1)
- python数据库gui_从python数据库在gui上打印数据
- 大学计算机专业副修课,计算机学院举行本科课程教学大纲修订工作研讨会
- 能做pc网页吗_梦幻西游网页版:如今还能抽金伙伴吗?玩家亲自验证,感觉还行...
- 渥太华大学计算机硕士课程,渥太华大学计算机工程专业解析
- 广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!
- MapReduce 中 UDF、UDAF、UDTF
- devServer proxy跨域 设置代理 proxy
- 让自己的开源项目支持CocoaPods集成