安全管理最佳实践系列:阿里云Access Key的轮转
2018-01-05 13:31
232 查看
在信息安全领域,一个常见的假定就是:所有系统都是可攻破的。当然还有另一个更明显的假定,那就是,攻破任何一个系统都需要时间。这里的“攻破”是广义的,可以是外部攻击,也可以是恶意内部威胁(insider threat),当然也可能是无心的泄漏导致的潜在威胁。
在这两个最基本的假定下,安全管理上衍生出了许多的最佳实践,其中本文将要讲述的就是
最小权限原则(principle of least privilege):减小密钥暴露的攻击面(Attack Surface)
定期轮转密钥:减小密钥的有效时间窗口
当然本文主要是讨论怎样轮转阿里云Access Key,但是由于最小权限原则能极大的简化其复杂度,因此也一并讨论。
在设计一个Access Key定期轮转机制之前,需要对系统的密钥管理有以下几点思考
Access Key的轮转意味着老的Access Key将失去访问阿里云资源的能力。因此在设计轮转机制之前有必要明确每一个Access Key的影响范围。在一个复杂的系统之中,往往存在多个微服务,而各个微服务往往也是独立部署的。如果轮转一个Access Key需要系统重新部署多个微服务,那么就需要考虑是否微服务之间存在解耦不明晰,或者Access Key访问权限过大的问题。
在企业部署拓扑中一个常见的实践是:访问每一个微服务都使用一个独立的密钥。这实际上是最小权限原则的体现。阿里云作为企业部署拓扑的一部分,其ECS,RDS,OSS等服务都可以看作企业部署的微服务。作为最小权限原则的体现,做了权限分割的Access Key不仅可以减小每个Access Key所暴露的攻击面,也可以更好的控制轮转Access Key带来的影响,减小线上故障的发生概率。
阿里云并不强制Access Key的过期失效,但是在密钥管理中,很重要的一环就是设计有效期管理机制。在常见的SSL证书管理中,通常会设置一个有效期到期的报警机制,在证书的有效期到期之前提前通知和报警。如果没有类似的Timer报警机制,则可以用一个脚本定期调用RAM
Open API查询Access Key的创建时间,并结合企业监控报警机制(比如将查询到的信息写入日志,监控日志中的关键字等方式),在Access Key的创建时间超过企业规定的有效期之后报警。
Access Key的轮转建议按照以下步骤进行:
为了方便描述,假定轮转之前,指定的RAM用户有一个正在使用中的Access Key。我们用下表来描述此用户的所有Access Key,Access Key的状态,以及Access Key在应用中的部署状态。
注:Access Key的状态有启用和禁用两种,启用的Acces Key可以用来访问云服务,禁用的Access Key不能
这一步要在旧Access Key处于启用状态并且正在使用的时候进行。创建的新Access Key默认为启用状态。当前用户有两个Access Key
原文链接
在这两个最基本的假定下,安全管理上衍生出了许多的最佳实践,其中本文将要讲述的就是
最小权限原则(principle of least privilege):减小密钥暴露的攻击面(Attack Surface)
定期轮转密钥:减小密钥的有效时间窗口
当然本文主要是讨论怎样轮转阿里云Access Key,但是由于最小权限原则能极大的简化其复杂度,因此也一并讨论。
基本考虑
在设计一个Access Key定期轮转机制之前,需要对系统的密钥管理有以下几点思考
1. 每个Access Key对应着访问哪些阿里云的资源
Access Key的轮转意味着老的Access Key将失去访问阿里云资源的能力。因此在设计轮转机制之前有必要明确每一个Access Key的影响范围。在一个复杂的系统之中,往往存在多个微服务,而各个微服务往往也是独立部署的。如果轮转一个Access Key需要系统重新部署多个微服务,那么就需要考虑是否微服务之间存在解耦不明晰,或者Access Key访问权限过大的问题。在企业部署拓扑中一个常见的实践是:访问每一个微服务都使用一个独立的密钥。这实际上是最小权限原则的体现。阿里云作为企业部署拓扑的一部分,其ECS,RDS,OSS等服务都可以看作企业部署的微服务。作为最小权限原则的体现,做了权限分割的Access Key不仅可以减小每个Access Key所暴露的攻击面,也可以更好的控制轮转Access Key带来的影响,减小线上故障的发生概率。
2. 是否需要给Access Key设定一个逻辑上的有效期
阿里云并不强制Access Key的过期失效,但是在密钥管理中,很重要的一环就是设计有效期管理机制。在常见的SSL证书管理中,通常会设置一个有效期到期的报警机制,在证书的有效期到期之前提前通知和报警。如果没有类似的Timer报警机制,则可以用一个脚本定期调用RAMOpen API查询Access Key的创建时间,并结合企业监控报警机制(比如将查询到的信息写入日志,监控日志中的关键字等方式),在Access Key的创建时间超过企业规定的有效期之后报警。
轮转的步骤
Access Key的轮转建议按照以下步骤进行:
轮转之前
为了方便描述,假定轮转之前,指定的RAM用户有一个正在使用中的Access Key。我们用下表来描述此用户的所有Access Key,Access Key的状态,以及Access Key在应用中的部署状态。Access Key | Access Key状态 | 部署状态 |
---|---|---|
旧AK | 启用 | 已上线 |
1. 给对应的RAM用户创建一个新的Access Key
这一步要在旧Access Key处于启用状态并且正在使用的时候进行。创建的新Access Key默认为启用状态。当前用户有两个Access Key原文链接
相关文章推荐
- 安全管理最佳实践系列:账号管理
- 安全管理最佳实践系列:给ECS实例配置RAM角色
- 项目管理系列分享(六)——最佳实践-需求
- 最佳实践系列:常规项目管理(跨部门项目)的12个最佳实践
- 阿里云 CDN HTTPS 最佳实践系列——HTTP/2(二)
- 项目管理系列分享(四)——最佳实践:与上级汇报/沟通
- 安全模式:J2EE、Web服务和身份管理最佳实践与策略
- 项目管理小公司最佳实践系列(一) 项目过程会议规格说明
- Java 日志管理最佳实践
- 组织级项目管理——知识体系和最佳实践
- Android最佳性能实践(一)——合理管理内存
- Maven最佳实践:管理依赖
- QoS最佳实践,实现更好的带宽管理
- CentOS安装阿里云的源 - CentOS源国内最佳实践
- 打造立体化监控体系与APM最佳实践系列 --Zipkin部署与使用
- SeaJS 里版本号和时间戳管理的最佳实践
- 第119讲:HDFS的配置以及安全高效的HDFS配置最佳实践学习笔记
- 高德地图基于阿里云MaxCompute的最佳实践