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

VLAN-VTP-Trunk
VLAN(Virtual LAN) VLAN可以隔离2层的广播域。A VLAN =(一个) 广播域 = (一个)逻辑子网路由器是隔离广播域的单个端口只能承载单个VLAN的流量。使用VLAN好处:1.有效的带宽利用2.提高了安全性3…

科大讯飞刷新纪录,机器阅读理解如何超越人类平均水平? | 技术头条
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」明日开启,扫码咨询 ↑↑↑记者 | 琥珀出品 | AI科技大本营(公众号ID:rgznai100)对于日常从事模型训练的研究人员来讲,无论是图像处理还是语音识别,都离…

【经验】Lenovo/ThinkPad 进入BIOS的方法汇总
1、快捷汇总 联想电脑进入BIOS的快捷键有“F2、F1、Del/Delete、NOVO开机”,部分机型按F2、F1时需要FN键配合 2、常用键 Lenovo笔记本:F2 Fn Lenovo台式机:F2 ThinkPad:F1 联系官网说明: http://tsonline.lenovo.…

NO.7 今天我们是实用派,看看业务选择和部署以及常用故障解决方案是怎么做的...
Hello,大家好,这是第七期 上云用户必看期刊,本期我们主打实用派的相关业务选择和部署以及一些常用故障解决方案做分享。 今天我们不平凡,成为实用派 运维工程师需要掌握的技能https://yq.aliyun.com/articles/591171?spma2c4e.11…

php基础知识
一:php变量#一、PHP的变量定义:变量用于存储值,比如数字、文本字符串或数组、五中:string /integer /double /array /object 命名规则:1、PHP的变量名是区分大小写的。 2、变量名必须以$开头 3、变量名开头可以是下划线 4、变量名…

【Qt】QPixmap加载图片报错:Corrupt JPEG data: premature end of data segment Didn‘t expect more than one scan
1、问题描述 在使用QPixmap加载图片时失败,错误信息如下 Corrupt JPEG data: premature end of data segment Didnt expect more than one scan使用QPicture加载时错误信息如下: QPicturePaintEngine::checkFormat: Incorrect header QPicturePaintEng…

Python超越Java,Rust持续称王!Stack Overflow 2019开发者报告
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」明日开启,扫码咨询 ↑↑↑作者 | 郭芮出品 | CSDN(ID:CSDNnews)导语:2019 年 Stack Overflow 开发者调查报告最新出炉了!今年,近 90,000 名…
electron打包可选择安装位置,可自动更新
Electron打包调参软件(windows版) ----------------------------------可选安装位置,可自动更新,手动更新 一:引包:electron,electron-builder,electron-updater** npm i electron --save-dev n…

osi 模型 tcpip网络模型
OSI网络分层参考模型 网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个 小问题,然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一…

我在旷视研究院做检测 | 技术头条
作者 | 俞刚,旷视研究院Detection组负责人。2014年博士毕业于新加坡南洋理工大学,加入旷视。主要负责检测,分割,跟踪,骨架,动作行为等方面的研究以及算法落地工作。俞刚博士带队参加 2017 COCOPlaces 挑战赛…

【Ubuntu】ubuntu设置GUI程序自启动
1、在启动脚本中添加 在脚本中添加,如“/etc/rc/”“etc/rc.d”“/etc/rc?.d”“/ect/profile”“.bash_profile”等等。 百度下有很多讲解,这里不再赘述。 2、利用ubuntu界面系统启动 终端中执行:gnome-session-properties,出…

(转)关于数据库主键和外键(终于弄懂啦)
一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯…

浏览器兼容:IE6,IE7,IE8,FIREFOX,Chrome
javascript部分1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运行解决方法:改用 document.formName.elements["elementName"]2. 集合类对象问题问题:…

如何将DynamoDB的数据增量迁移到表格存储
为什么80%的码农都做不了架构师?>>> 摘要: AWS 的 Amazon DynamoDB 和阿里云的表格存储 TableStore 都是完全托管的NoSQL数据库服务,提供快速的、可预期的性能,并且可以实现无缝扩展。本篇文章介绍了如何使用 Lambda …

【Ubuntu】ping: unknown host www.baidu.com
1、问题描述 每次重新设置网络后,ping百度总是报错: $ ping www.baidu.com ping: unknown host www.baidu.com2、原因分析 原因是:查看/etc/resolv.conf,发现没有设置DNS服务。 $ cat /etc/resolv.conf # Dynamic resolv.con…

马云:“996 是一种巨大的福气”
作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)【导语】自3月27日996.ICU话题诞生以来,目前GitHub已获得21万的Star,引发国内外的广泛关注和热议。很多人质疑996工作制,Python之父Guido Van Rossum更直言“996反人…

Firebug Console 与命令行全集
Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调试使用。下面是这些方法的一个简单介绍,适时地运用它们,…

100%的程序员都想挑战的算法趣题!| 码书
计算机的世界每天都在发生着深刻的变化。新操作系统的发布、CPU性能的提升、智能手机和平板电脑的流行、存储介质的变化、云的普及……这样的变化数不胜数。在这样日新月异的时代中,“算法”是不变的重要基石。要编写高效率的程序,就需要优化算法。无论开…
【Qt】qss样式表之:QCalendarWidget,日历窗口样式表设置
1、效果图: 2、qss样式表 其中表头的背景颜色等设置不起作用,只好在下面的代码中实现。 /*日历*/ QCalendarWidget QHeaderView {qproperty-minimumSectionSize:0; } QCalendarWidget QMenu{background-color: rgb

BZOJ5324 洛谷4563 LOJ2545:[JXOI2018]守卫——题解
https://www.lydsy.com/JudgeOnline/problem.php?id5324 https://www.luogu.org/problemnew/show/P4563 https://loj.ac/problem/2545 题目见上。 参考:https://blog.csdn.net/dofypxy/article/details/80196942 区间dp,设f[i][j]为[i,j]的答案…

构建高可靠性网络
拓补图如下: 1. 浮动静态路由配置一条主链路,一条辅助链路!正常情况使用主链路,主链路出现故障,切换到辅助链路!H3C主线路 s0-s0 采用ospf 默认度量值是10,辅助线路 s1-s1 配置静态路由,默认度量值是10,无需调整,数据包默认值走s0-s0链路CISCO主线路 s0-s0 采用ospf 默认度量…

LeetCode上最难的链表算法题,没有之一
作者 | 程序员小吴转载自五分钟学算法(ID: CXYxiaowu)该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目:难度为 Hard ,通过率在链表 Hard 级别目前最低。题目描述合并 k 个排序链表,返回合并后的排序链表…
【Qt】qss样式表之:自定义属性实现动态切换样式
1、问题描述 例如在播放器中播放按钮,由“播放”状态切换成“暂停”状态后,响应的图标要跟着状态切换。 2、解决方法 使用qss样式表中的属性功能,自定义一个属性,当按钮动作时,改变它的属性值。 在qss中分别对不同的属性值设置 样式。 但是qss不能自动监听属性值的变…

深入学习Lock锁(2)——LockSupport工具类
2019独角兽企业重金招聘Python工程师标准>>> 在同步组件中,当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能…

受用一生的高效PyCharm使用技巧(二)
本文转载自公众号Python编程时光(ID: Python-Time)今天又来给大家推荐一些我自己的用的小技巧,大家择需所取即可。如果你还没看过,可以下面的传送门,直接访达:受用一生的高效 PyCharm 使用技巧(…

【GStreamer】基本概念及安装
一、参考网站 官方主页 https://gstreamer.freedesktop.org/ 官方手册 https://gstreamer.freedesktop.org/data/doc/gstreamer/ 官方教程: https://gstreamer.freedesktop.org/documentation/tutorials/index.html 官方基础教程 https://gstreamer.freedesktop.org/docum…

python学习day3
1丶 用户先进行登陆如果用户名在文件中且用户密码也正确就登陆成功调用购物车函数,如果用户用户名输入正确密码错误,提示用户密码错误且重新输入,如果用户 输入用户名不存在,提示用户是否创建该用户,调用注册函数。 1.…

Visual Studio 2010构建Web浏“.NET研究”览器应用程序
2001年,我使用C#中的WebBrowser ActiveX控件编写了我的第一个应用程序,点此阅读,Kapil Sony写了一篇文章介绍了C# 2.0中上海企业网站制作的WebBrowser控件,每一次.NET新版本发布,控件和功能都会发生一些变化࿰…

如何通过结构化智能体完成物理构造任务?| 技术头条
作者 | Victor Bapst, Alvaro Sanchez-Gonzalez,Carl Doersch, Kimberly L. Stachenfel译者 | Linstancy编辑 | 一一出品 | AI 科技大本营(ID:rgznai100)摘要物理构造 (physical construction) 是根据物理动力学原理构造带有一些功能的物体的能力&#x…

【GStreamer】gstreamer工具详解之:gst-launch-1.0
一、gst-launch-1.0 1、简介: gst-launch-1.0构建和运行基本GStreamer管道的工具 官网:https://gstreamer.freedesktop.org/documentation/tools/gst-inspect.html?gi-language=c 命令格式: gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION2、OPTIONS参数选项: –help…