摘要: 在以前文章中,其中一个遗留问题是如何存放访问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角色"的原理。ECS实例RAM角色是阿里云RAM角色的一种,它让ECS实例扮演具备某些权限的角色,从而赋予实例必定的访问权限。实例RAM角色容许用户经过一个RAM角色关联到ECS实例,在实例内部基于STS(Security Token Service)临时凭证(临时凭证将周期性更新)访问其余云产品的 API。这样,一方面能够保证 Access Key 安全,另外一方面也能够借助 RAM 实现权限的精细化控制和管理。架构
ECS实例RAM角色的推出,主要就是为了解决敏感信息AK/SK的存放难题,这跟ACM敏感配置信息存放要解决的"最后一公路"问题是一致的。咱们接下来经过ECS实例RAM角色的使用步骤来窥探其中原理,以下图:curl
如上图,ECS的实例角色在使用时,分为5个步骤。ide
1. 云帐号(root)在RAM中建立一个ECS实例型的RAM-Role,并对角色授予合适的Policy权限
2. 启动ECS实例时,能够配置使用上一步骤中建立的RAM-Role阿里云
(注:以上两步的具体操做请参考经过控制台使用实例型RAM角色 或 经过API使用实例型RAM角色)加密
经过以上两个步骤后,ECS服务在建立实例时:url
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角色"的方法和上诉架构的原理相同。用户在使用该方案时,须要先操做"步骤1-在RAM中建立一个ECS实例型的RAM-Role",和"步骤2-启动ECS实例时,能够配置使用上一步骤中建立的RAM-Role"。做为阿里云SDK的一部分,ACM SDK自己默认帮助用户完成三、四、5三个步骤,用户只须要经过调用ACM SDK专一业务敏感配置获取便可。
为进一步理解以上所属原理,咱们设想一个场景,用户须要经过一个数据库链接串(含密码)访问某数据库。在常规场景下,用户须要在配置文件中设置这些敏感信息,并将配置发布到生产环境。而在使用ACM之后,用户将再也不须要存听任何敏感信息在应用程序中;取而代之的,程序员在链接相关服务时只须要完成两部分工做,
基于获取的敏感配置信息去调用对应的服务。
用户使用ACM SDK基于"ECS实例RAM角色"获取配置的方法和场景以下图所示。
如图所示,对于第二步ACM SDK去ACM服务获取配置的关键步骤中,ACM SDK将默认基于ECS MetaService中"ECS实例RAM角色"的STS Token临时认证信息向ACM服务进行认证,而不须要任何外部的AK,SK的输入,从而绕开了用户手动输入AK, SK的要求。
如图上所描述,该方法的适用场景包括任何携带敏感信息的数据服链接串,服务器临时登陆信息,第三方软件的license信息,等。
以上文章概述了如何利用ACM来存取程序的敏感信息。经过这种作法,在安全方面应用将获得如下优势:
在接下来章节中,咱们将提供一个代码实例来进一步讲解如何使用ACM来存放敏感配置,敬请期待。