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

摘要: 在之前文章中,其中一个遗留问题是如何存放访问ACM配置本身的敏感信息,比如要访问ACM本身需要的AccessKey ID(简称AK)或Secret AccessKey(简称SK)如何存放,即所谓敏感配置的"最后一公里"问题。

《如何在阿里云上安全的存放您的配置》一文中,我们介绍了如何通过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来存放敏感配置,敬请期待。

原文链接

原文地址:http://blog.51cto.com/13679539/2124770

时间: 2024-10-08 02:21:47

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

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

摘要: 如果您现在正开始着手准备解决自己的生产数据泄露问题,那么您可能需要看下这篇文档,了解如何可以从配置着手来改善下您目前的情况. 您是否在您的应用部署环境里遇到过以下情节 将敏感信息(如数据库连接串,含密码,下同)存放到生产环境的服务器上的配置文件里. 将敏感信息做成配置文件打包在软件工程的配置文件里,并发布到各类环境里. 在Docker编排时,将敏感信息直接存放到环境变量中. 如果您的生产环境存在以下情况,而您现在又开始着手准备解决自己的生产数据泄露问题,那么您可能需要看下这篇文档,了解如

云计算之路-阿里云上:SLB会话保持的一个坑

冒着被大家厌烦的风险,今天再发一篇"云计算之路-阿里云上".这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原因. 快下班之前,园区里另外一家公司的朋友说他们公司有的人不能正常访问园子--会出现HTTP Error 400错误,而其他人可以正常访问.这个问题立即引起了我们的警觉,因为之前也有园友反馈过同样的问题,当时什么也没动,后来就好了,以为是他们公司网络代理服务器的问题.由于我们从未遇到过这个

阿里云上Oracle 11g RAC安装配置手册

有印象的用户可能发现,阿里云早在2016年深圳云栖大会就官方发布了对Oracle RAC的支持,但是相关产品却一直没能同步推出,相信大家都翘首以盼了许久许久.一个好消息是,近期阿里云将紧密推出两款新产品:共享块存储和ECS多网卡.这两款产品将打通众多关键云下应用上云的最后一公里,为用户提供更多的便利.在我们能正式体验到新产品之前,阿里云技术服务团队也将云上的Oracle RAC安装配置手册放出,希望能给大家提供更多不同的体验和选择. 一.安装说明 阿里云上Oracle RAC的安装部署,重点需要

阿里云上如何搭建jenkins

一. 安装jdk 确保安装jenkins前jdk已经安装,如何安装见<如何在阿里云上部署war包到tomcat服务器> 二. 安装jenkins 使用以下命令安装jenkins: wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm –import https://jenkins-ci.org/redhat/jenkins-ci.org.key yum install je

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

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

云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭遇了恐怖的路由服务(acsrouting)路由错乱问题 —— 请求被随机路由到集群中的任一容器,虽然后来阿里云修复了这个问题,但我们对容器服务失去了信心,走上了用阿里云服务器自建 docker swarm 集群的道路. 用上自建 docker swarm 集群之后,本以为可以在云上容器中过上安稳的日

云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> SLB -> 客户端浏览器. 下面是分析的过程: 1. 启动Wireshark,针对内网网卡进行抓包. 2. 在IIS日志中找出要分析的请求(借助Log Parser Studio) 通过c-ip(Client IP Address)可以获知SLB的内网IP,在分析Wireshar抓包时需要依据这个IP进

远程登录阿里云上的MySQL

最近对云和服务器之类的感兴趣,想要将自己的数据什么的保存到远端服务器.研究了阿里云和百度云.今天算是有点进步吧. 我在阿里云上申请了个免费的云服务器(ECS),很可惜只能用5天.我也不太懂他的性能怎么样..反正能用吧.哈哈 上图吧. 1.主机终端管理:由于对Ubuntu 还算熟悉,我选了装ubuntu 的主机,在"更多操作"选项中,选择"连接终端",进入连接页面,按照提示输入"VNC"密码,就进入了主机系统,不过是命令行的终端 . 2.MySQL

云计算之路-阿里云上:超过70秒的请求抓包分析

超过70秒的请求是通过分析IIS日志发现的: 10.159.63.104是SLB的内网IP. 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080): 09:22:21.299838000 10.159.63.104 10.161.241.208 HTTP 291 GET /eastsea/p/3764040.html HTTP/1.0 这个请求响应内容的长度是:Content-Length 1154110(1.1MB) 云服务器(ECS)在收到请求后