引言:本文整理自【弹性计算技术公开课——ECS安全季】系列课程中,阿里云弹性计算高级技术专家张振华带来的课程《如何安全访问和管理ECS资源》一节。
一、身份与访问控制的基本概念
首先给大家介绍一下关于身份与访问控制的一些基本概念。
身份与访问控制是为了实现集中管理阿里云上的用户身份,只有通过这个身份的认证,并且满足了特定权限授权条件下的用户才能够访问或者操作您所指定的阿里云资源,避免您的云资源被未经授权的用户恶意访问,所以这里会涉及到三个管理系统,分别是身份管理、权限管理以及资源管理。
所谓身份管理,就是您如何管理您的企业员工或者应用的身份。权限管理是您要怎样分配权限,比如管理员可以拥有全部的访问权限,而研发人员根据自己的职责范围,只能在特定的网络环境下操作有限的云资源,一般建议遵循最小够用的原则来给员工进行授权。
资源管理是您要怎样管理云上的资源,建立的管理方式是按照部门或者是业务线划分到不同的资源组,只有被授权可以访问资源组的用户身份,才可以操作对应的云资源。这里的云资源,不仅仅是ECS的资源,也包括网络资源,比如VPC,也包括存储资源,比如OSS、对象存储以及日志服务,同样也包括像数据库、云原生的容器等各种各样的云资源。
在阿里云上面,我们统一负责用户身份管理和访问控制的服务,称为RAM,它的全称是Resource Access Manager,即资源访问控制。
RAM有主账号和子用户RAM账号这两个概念,这两种账号,都可以通过用户名、密码登录到阿里云的控制台,并对其云上的资源进行操作。用户在访问阿里云账号时,使用的是主账号,主账号的密码规范、登录安全的风险控制策略是由阿里云统一管理的。在主账号下的子用户,即通常所说的RAM用户,它的密码策略则可以由客户自己设定,比如密码字符的组合规范、重试登录次数、密码轮转周期等策略。
管理员可以通过RAM控制台为RAM用户创建密码策略,来保证各个子用户都可以使用定期轮转的强密码,从而提高整体账户的安全性。RAM服务使得一个阿里云主账号可以拥有多个独立的RAM用户,从而避免与其他用户共享云账号的密钥,并可以根据最小权限的原则为不同用户分配最小的工作权限,从而降低用户的信息安全的管理风险。
RAM的策略可以细化到针对某一个API、Action或者Resource ID等最细粒度的授权,还可以支持多种的限制条件,比如像限制来源IP的访问范围,安全访问的通道,比如必须要通过SSL或者TLS,还有访问的时间段或者是MFA的多因素的认证等等。
RAM是阿里云账号安全管理和安全运维的基础,通过RAM可以为每个RAM用户分配不同的密码或API访问密钥(Access Key),消除云账号共享带来的安全风险;同时可为不同的RAM用户分配不同的工作权限,大大降低了因用户权限过大带来的风险。
一般来说,企业的管理者或者运维主管往往会成为阿里云上的主账号拥有者,也就是超级管理员。
∙ 我们建议由超级管理员根据组织实体或业务场景,创建不同的RAM用户、RAM用户组,并为每个用户分配唯一的安全凭证AK。
∙ 控制授予每个用户、用户组对ECS资源授予不同的操作权限,根据最小权限原则,分权管理不同的资源,降低信息泄露风险。
∙ 更进一步,可以将RAM角色关联到ECS实例上,不同的实例赋予不同授权策略,这样就无需在实例中保存Access Key,使它们对不同的云资源具有不同的访问权限,实现更精细粒度的权限控制。
接下来展开介绍一下ECS的身份管理、权限管理以及如何避免显示的AK配置的一个最佳实践。
二、身份管理的安全治理原则与验证手段
首先介绍一下身份管理中的安全治理原则和验证手段,以及基本概念,并且分别介绍RAM用户和RAM角色的相同点和不同点,接下来是关于身份管理安全的治理原则,还有安全的验证手段。
什么是身份认证?身份认证指的是通过凭证信息来认证用户的真实身份。
它通常是指通过登陆密码或访问密钥,也就是AccessKey机制来进行身份认证。请注意,用于身份认证的凭证信息对于用户来说是敏感的秘密信息,用户必须妥善保护好身份凭证信息的安全。
阿里云提供多种多样的身份认证能力,总体上可以分成是面向用户或企业员工的认证手段,还有面向应用程序的认证手段这两大类。
第一大类是面向用户的认证方式有,账号密码认证、SSH密码认证、基于MFA验证码的认证(比如人脸、短信、短时口令等)和SSO单点登录认证。
账号密码认证相信大家都不陌生:用户可以使用其云账号(即主账号)或其云账号下RAM用户的密码登录阿里云控制台并对其云上资源进行操作。阿里云的账号密码规范、登录安全风控策略由阿里云统一管理。云账号下子用户(RAM用户)的密码策略则可以由客户自己设定,如密码字符组合规范、重试登录次数、密码轮转周期等策略。例如,用户可以通过RAM控制台为RAM用户创建密码策略,以保证各个子用户都使用定期轮转的强密码从而提高整体账户的安全性。
SSH密码认证也是常用的非对称密钥认证机制。针对ECS Linux实例,如果用户已经将SSH公钥配置在Linux实例中,那么在本地或者另外一个实例中,用户可以使用SSH私钥通过SSH命令或相关工具登录之前有公钥配置的实例,而不需要输入密码。SSH密钥对默认采用RSA 2048位的加密方式,相较于传统的用户名和密码认证方式,SSH密钥对登录认证更为安全可靠,同时便于远程登录大量Linux实例。同时,阿里云容器服务也支持通过 SSH 密钥对的方式远程登录集群。
MFA是一种简单有效的最佳安全实践方法,它能够在用户名和密码之外再额外增加一层安全保护。启用MFA后,用户登录阿里云时,系统将要求输入用户名和密码(第一安全要素),然后要求输入来自其MFA设备的可变验证码(第二安全要素)。这些多重要素结合起来将为用户的账户提供更高的安全保护。阿里云可以支持基于软件的虚拟MFA设备。虚拟MFA设备是产生一个6位数字认证码的应用程序,它遵循基于时间的一次性密码(TOTP)标准(RFC6238)。
同时,阿里云也支持基于SAML 2.0的单点登录(Single Sign On,简称SSO),可以支持企业客户使用企业自有身份系统的登录服务登录访问阿里云。为了满足不同企业客户的登录场景需求,阿里云提供了以下两种基于SAML 2.0协议的SSO机制:
∙ 用户SSO:阿里云通过身份提供商IdP颁发的SAML 断言(SAML Assertion)确定企业用户与阿里云RAM用户的对应关系。企业用户登录后,使用该RAM用户访问阿里云资源,对应的访问权限由RAM用户的授权策略所限制。
∙ 角色SSO:阿里云通过身份提供商IdP颁发的SAML断言(SAML Assertion)确定企业用户在阿里云上可以使用的RAM角色。企业用户登录后,使用SAML断言中指定的RAM角色访问阿里云资源,对应的访问权限由RAM角色的授权策略所限制。
第二大类是面向应用程序的认证方式,主要有AccessKey认证和STS认证两种。其中AccessKey是用户调用云服务API的身份凭证,用于在用户通过API访问阿里云资源时对用户身份进行认证。API凭证相当于登录密码,只是使用场景不同。前者用于程序方式调用云服务API,而后者用于登录控制台。
Access Key包括访问密钥ID(AK ID)和秘密访问密钥(AK Secret)。AK ID用于标识用户,而AK Secret用来验证用户身份的合法性。用户在调用资源时会传入AK ID,并使用AK Secret对请求进行签名(HMAC-SHA1算法)。用户可以登录阿里云用户中心或RAM控制台来管理Access Key,包括创建、冻结、激活和删除操作。Access Key是可以长期使用的API访问密钥,建议用户在使用时要考虑对Access Key的周期性轮转。
请注意,出于有效权限分割和降低风险的考虑,云上最佳安全实践中不建议用户为其云账号(即主账号)创建AK凭证,而建议为其下属的RAM用户各自创建AK凭证。建议RAM用户更多的使用STS临时token,而不是使用长期使用的永久AK。
阿里云Security Token Service(STS)是为RAM用户、阿里云服务、身份提供商等受信实体提供短期访问资源的权限凭证的云服务。
有时存在一些用户(人或应用程序),他们并不经常访问客户云账号下的云资源,只是偶尔需要访问一次,这些用户可以被称为“临时用户”;还有些用户,例如运行在不可信移动设备上的App,由于自身安全性不可控,不适合颁发长期有效的访问密钥。这些情况下,可以通过STS来为这些用户颁发临时权限凭证。颁发令牌时,管理员可以根据需要来定义令牌的权限和自动过期时间(默认为1小时过期)。
STS访问令牌是一个三元组,它包括一个安全令牌(Security Token)、一个访问密钥 ID (Access Key ID) 和一个秘密访问密钥 (Access Key Secret)。用户在调用资源API时传入安全令牌和访问密钥ID,并使用秘密访问密钥对请求进行签名(和上述AK签名机制相同)。
在通过身份认证后,RAM实际上会生成两类的身份,一类是实体身份,比如RAM用户、RAM用户组,另一类是虚拟身份,也就是RAM角色,那这两者有什么相同和不同点呢?
首先,RAM用户和RAM角色都是RAM中定义的身份,前者是实体身份,代表人或者程序,而后者是一种虚拟身份,往往需要被实体用户扮演才能生效。无论是RAM用户和RAM角色在被授予权限后都可以直接访问资源,也可以通过 SSO 和企业 IdP 互联。
不同点在于:
∙ RAM用户有确定的登录密码和访问密钥,可以支持控制台登录,享有登录凭证;
∙ RAM用户可以被加入RAM用户组,从而继承用户组的权限,RAM用户组就是用来划分一组职责相同的RAM用户,因此可以被赋予一组同样的权限策略;
∙ RAM用户可以对应企业内的人员、应用等,在需要协同使用资源的场景中,避免直接共享阿里云账号的密码等机密信息,缩小机密信息的可见范围,并为RAM用户和RAM用户组赋予最小权限,即使不慎泄露机密信息,也不会危及阿里云账号下的所有资源。
而RAM角色虽然有确定的虚拟身份,也可以被赋予一组权限策略,但是没有确定的登录密码或访问密钥。RAM角色需要由一个受信的实体扮演,该实体在扮演RAM角色时即获得RAM角色的权限。在云产品通信的场景中,为受信的实体(例如ECS实例)绑定RAM角色后,该实体可以基于STS(Security Token Service)临时凭证访问其他云产品的API,避免将AccessKey写在配置文件中等高危操作,保证AccessKey的安全。
企业在云上的身份和AK的管理中,常见的风险往往是因为账号或者是AK的管理或使用不善,会导致AK的安全的风险敞口会变大,甚至是AK的泄露,从而导致了一些安全的隐患,因为用户名的密码的泄露或者是AK泄露所造成的危害,也备受企业的关注,这里列举了一些常见的安全风险,这里可以分成两类。
第一类是人员管理上的风险,第二类是AK管理上的风险。
在人员的管理上常见的风险,第一是使用了主账号进行日常运维和管理的操作,第二是存在多人共享一个RAM用户,这样会影响审计信息,第三是控制台的用户,没有和企业的账号打通,由于员工的离职之后,一些数据没有和企业内部账号的信息进行同步,第四种是高权限的用户且没有配置好MFA,登录的IP的白名单等安全的设置,会有一些高危的用户登录的风险,最后一种,是存在长期不使用的僵尸用户,扩大了风险的敞口。
AK管理的风险主要有,一般是经常会使用主账号的AK,在主账号AK如果一旦泄露了,止血的成本就非常的高昂。第二类是在代码中的硬编码的AK,从而容易从ECS的镜像OSS文件或者是一些外部的公开的渠道上面把AK泄露出去,第三种是存在的人和程序混用RAM用户而造成了AK被误删的这种场景,第四种是存在AK长期不轮转,造成了风险的累积。还有一种是客户端的代码中包含了永久AK,这也是非常容易泄露的。
为此我们给出了五个身份安全治理的原则和建议:
∙ 原则一是不推荐您使用主账号的AK。因为主账号AK拥有的是超级权限,一旦泄漏后的风险极高,而且主账号AK不支持精细化的授权,也不支持临时授权和白名单控制。我们推荐您开启主账号MFA的多因子认证来增强主账号的安全性,通过云安全中心提供的AK泄漏扫描能力来检查自身环境是否使用了主账号AK。
∙ 原则二是区分人员和程序的RAM身份。人员不应启用AK,控制台子用户不应该拿到AK,可以使用SSO实现统一认证登录。而程序应该与子AK一一对应,并且关闭程序子AK的控制台登录能力。
∙ 原则三是合理的授权,比如客户端或测试开发环境使用临时Token,而不是永久AK,定期清理长期不使用RAM子用户。
∙ 原则四是安全合理的使用永久AK,至少可以定期巡检&报警,开启AK白名单、限制白名单访问来源IP,避免明文编码AK,避免将AK暴露到外部公共平台上,以及实现AK加密和集中化管理。
∙ 原则五是尽可能的实现无AK的使用,比如我们可以定义ECS实例的RAM角色,授权给某个ECS,实现权限精细化控制和管理,并且过程中无需明文的保存AK信息。
RAM访问控制服务允许企业对主账号内的身份安全做整体性的安全控制,比如密码强度的设置策略会对主账号下所有的RAM用户生效,用户的安全设置也允许设置MFA的多因素的认证与设置允许控制台登录的来源的IP的掩码,以及是否允许RAM用户自主管理密码和MFA的设备等等。
这里推荐您免费开通RAM访问控制服务提供的身份权限治理服务,当您开通了身份权限治理服务功能之后,RAM会持续的检测阿里云账号及其下的RAM用户是否存在身份权限的安全风险,帮助您及时发现治理上的缺失,并提供友好的治理引导,帮助您完善云上身份权限治理的配置,身份权限治理服务的检测项,包含了AccessKey管理检测,RAM用户管理检测,密码强度和MFA管理检测,安全使用的建议,以及高危权限的管理,还有细粒度的权限管理和授权效率的建议等等。
具体来说,您需要使用阿里云的账号或者是具有管理权限的RAM用户登录到RAM的控制台,在左侧的导航栏中点击概览,在概览页的标签页下面选择治理检测,可以查看身份权限的治理的检测数据。单击下载报告,可以下载检测的数据到本地进行查看,可以按照报告中介绍的治理方案,在控制台完成身份权限的治理。
小结:在身份管理这一部分,我们介绍了什么是身份认证,阿里云提供了多种多样的面向用户和应用程序的认证手段,在通过身份认证之后,RAM其实会生成两类的身份,一类是实体身份,我们称为RAM用户,另一类的是虚拟身份,也就是RAM角色。
我们对比了两者的相同点和不同点,介绍了在身份管理里面的一些安全的风险,安全治理的原则以及阿里云建议的一些最佳实践。
您通过RAM访问控制服务来设置企业用户整体的安全性是最常见的治理手段,另外也建议您开通免费的身份权限治理服务,阿里云可以帮助您及时发现治理缺失的漏洞,并提供友好的治理引导,帮助您完善云上的身份权限治理的配置。
带你读《从基础到应用云上安全航行指南》——干货长文快收藏!阿里云专家教你如何安全访问和管理ECS资源(2):https://developer.aliyun.com/article/1441585