在《如何在阿里云上安全的存放您的配置》一文中,我们介绍了如何通过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以后,用户将不再需要存放任何敏感信息在应用程序中;取而代之的,程序员在连接相关服务时只需要完成两部分工作,

  1. 基于ACM SDK获取业务的敏感配置信息,如数据库连接串,等。
  2. 基于获取的敏感配置信息去调用对应的服务。

    • 注:以上两个步骤不需要应用程序设置任何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来存放敏感配置,敬请期待。

如何在阿里云上安全的存放您的配置 - 续相关推荐

  1. 如何在阿里云上安全的存放您的配置

    摘要: 如果您现在正开始着手准备解决自己的生产数据泄露问题,那么您可能需要看下这篇文档,了解如何可以从配置着手来改善下您目前的情况. 您是否在您的应用部署环境里遇到过以下情节 将敏感信息(如数据库连接 ...

  2. 如何在阿里云上构建一个合适的Kubernetes集群

    摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其 ...

  3. python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试

    简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...

  4. 个人建设网站流程解说,手把手教你如何在阿里云上搭建自己的网站

    现如今信息化时代,很多企业甚至是个人都有自己搭建网站的需求,目前建站有两方式,第一:找网络公司全程负责搭建:第二:自己建设:找网络公司建设网站市场价格不一,网络公司的实力技术也不一样,所以会有很多的建 ...

  5. IP报文在阿里云上的神奇之旅:同地域内云上通信

    作者:姚悠   阿里云专家服务团队 一个IP报文如何跨越万水千山达到目的地?本文将以阿里云为例,带领大家一起探索同地域内云上通信的全过程,完整展现云上同地域内各种场景的IP报文之旅,深入理解云网络技术 ...

  6. 动态分区分配算法实现_阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区...

    本文关键字:利用colinx+virtio winpe定制aliyun多分区linux系统盘,在winpe xp winpe中运行colinux,在windows pe下真正操作linux分区,利用c ...

  7. 阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区

    本文关键字:利用colinx+virtio winpe定制aliyun多分区linux系统盘,在winpe xp winpe中运行colinux,在windows pe下真正操作linux分区,利用c ...

  8. 微信小程序 实现阿里云上传

    先安装,我使用composer安装 在项目的根目录运行composer require aliyuncs/oss-sdk-php 微信小程序页面 <l-image-picker count=&q ...

  9. 【SVN】在阿里云上创建svn服务器

    1.创建用户及相关设置 阿里云搭建ubuntu18.04工作台,默认只有root超级用户.为了安全起见,我们使用普通用户来创建svn: useradd hello // 创建用户hello mkdir ...

最新文章

  1. next用法C语言,C语言可变参数的使用
  2. (转)SpringMVC学习(三)——SpringMVC的配置文件
  3. flac3d命令流实例大全_ANSYS APDL 疲劳分析实例附命令流
  4. TDengine安装教程
  5. 程序员面试中遇到问题
  6. LeetCode 1207. 独一无二的出现次数
  7. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
  8. 云服务器选ssd还是hdd_SSD和普通硬盘对比?SSD到底好不好?看超变态测试
  9. 保存同一个H264视频流,第一个文件能播放,第二个播放不了。为什么
  10. MCSE 2012 R2之工作文件夹Word Folders(2)
  11. 砍价小程序有人做过吗?调用多多砍价记录,可以转口令或者链接的那种
  12. 服务器系统怎么安装网卡驱动,网卡驱动怎么安装,教您网卡驱动的安装操作
  13. 《MySQL DBA: InnoDB_doublewrite/ChangeBuffer/AHI/FNP》
  14. 图文讲解 WiFi 驱动移植过程,很肝~
  15. implicit super constructor animal() is undefined for default constructor. Must define an explicit 异常
  16. MUSCI算法估计空间方位角
  17. Linux下使用Shell脚本实现反向ssh自动交互
  18. JSON与properties文件的相互转换
  19. windows环境下设置多个PHP版本的环境变量
  20. 缓冲区溢出漏洞浅析(三)

热门文章

  1. Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
  2. 我的Rails笔记(1)
  3. python数据库gui_从python数据库在gui上打印数据
  4. 大学计算机专业副修课,计算机学院举行本科课程教学大纲修订工作研讨会
  5. 能做pc网页吗_梦幻西游网页版:如今还能抽金伙伴吗?玩家亲自验证,感觉还行...
  6. 渥太华大学计算机硕士课程,渥太华大学计算机工程专业解析
  7. 广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!
  8. MapReduce 中 UDF、UDAF、UDTF
  9. devServer proxy跨域 设置代理 proxy
  10. 让自己的开源项目支持CocoaPods集成