0
点赞
收藏
分享

微信扫一扫

7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management

        经常被认为上云的第一步是创建云主机/云服务器,而忽略了应该先设置合适的账号、分配合适的权限。在注册了云平台账号后应该尽快创建子账号、分配权限,然后使用子账号来管理资源。

        说到云安全,常被忽略的就是对账号的统一管理,以及给账号分配合适的权限,而这些又是每次管理云资源时都在使用的。在架构设计之初就应该考虑账号及权限体系,仅为用户分配最小权限。云平台提供身份识别与访问管理(Identity and Access Management,IAM)来管理主账号、子账号、权限、授权等。除此之外,还有对IP和端口进行访问权限控制的安全组、VPC中的ACL等。

1. 账号及授权

        下图展示了访问云资源的各类主体,包括账号+密码、公钥+私钥、Token等授权,通过Web控制台、移动端App、API/SDK、CLI等方式来访问云资源和云服务,具体访问主体如下。


  • 主账号:所有账号都有一个主账号的概念,具有子账号、云资源等所有权限,云平台的主账号具有所有云资源的访问权限,以及分配子账号并设置权限的能力,因此不建议直接使用主账号进行日常操作,最佳实践是除了管理子账号等操作,不再使用主账号管理任何资源,即便项目Master是主账号管理员,也应该为自己分配一个子账号进行管理使用。
  • 子账号:开发人员、测试人员、运维人员、财务人员、审计人员是常见的云账号使用者,不同职能的人员需要分配不同的账号,开发人员需要访问云主机等资源的权限,运维人员需要创建云主机的资源,财务人员需要充值并开发票,审计人员需要查看交易账单,财务及审计人员无须对云资源进行增删改查操作。
  • API/SDK:业务程序访问云资源一般通过原生API或SDK调用管理,此时需要的不是主账号或子账号,而是Access Key和Secret Key(也称为Private Key)。
  • l CLI:运维工程师大多采用CLI工具管理云资源,使用的也是Access Key和Secret Key。

7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management_云平台

图  用户通过多种形式访问云资源与云服务

2. 账号

  • 主账号

        主账号是访问和管理云平台资源和服务的最大主体,需要个人或企业通过邮箱、手机号等信息进行注册。在云平台中注册完账号后需要进行实名认证,对于个人账号验证身份证信息,对于企业账号验证营业执照,未完成认证的账号可以登录Web控制台,但是不能充值,不能创建云资源。


  • 子账号

        主账号中的成员通过邮箱来邀请子账号,子账号在邮箱中根据注册邮件进行激活,设置该子账号的登录密码。子账号创建完成后并未分配项目和权限,仅能登录,还不能创建和管理资源。



最佳实践

在管理云资源时不要使用主账号,所有人员都应通过子账号进行操作。


  • MFA验证

        登录云平台时仅通过账号和密码进行认证存在一定的安全风险,黑客获取账号后可以尝试撞库登录,或者非法获取密码进行登录。通过多因子认证(Multi-Factor Authentication,MFA)能够在正常登录流程之外增加MFA设备的认证,如通过绑定手机上的Google身份验证器App到云平台账号中,用户在登录时需要填写手机上的Google身份验证器中的数字验证码,实现登录的二次认证,保障账号登录安全。其中,数字验证码每60秒更新一次,过期无效。开启及绑定Google身份验证器的操作如下图所示。


7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management_云平台_02

图  开启及绑定Google身份验证器的操作


  • Access Key和Secret Key

        Access Key和Secret Key(AK&SK)是面向API、SDK、CLI使用的认证凭证,相当于账号的“账号”和“密码”,因此需要保管好API密钥,仅分发给认证的、必须授权的程序来使用。

        一旦API密钥泄露或被公开,如果设置“允许访问的IP”,则会起到一定的保护作用,但也不能保证API密钥不被利用。必须将API密钥进行重置,通过控制台界面也可以完成,此过程也需要绑定手机的短信验证码验证。另外,建议根据使用频率定期重置API密钥,降低API密钥泄露的风险。

3. 权限与策略

        权限是指人员使用账号,通过API使用AK&SK对云资源执行增删改查等各种操作,能对资源进行某一项操作则说明具有该操作权限。权限通过策略进行展示,下表展示了AdministratorAccess、IAMFullAccess等权限配置。

7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management_云主机_03

表  部分权限配置


        具有账号管理权限的账号可创建自定义策略,并使用系统策略来分配给指定用户,如以下配置文件表示允许(Allow)对本账号中ID为“uhost-1234abcd”的云主机(对应为Resource)执行两个动作(Action),即创建快照、创建镜像。上表展示了超级管理员权限、访问控制权限、只读权限、财务中心权限和云主机的各种操作权限,更多权限参见云平台官网文档。


{
"Effect": "Allow",
"Action": [
"uhost:CreateSnapshot",
"uhost:GenerateUimage"
],
"Resource": [
"ucs:uhost:*:12345:instance/uhost-1234abcd"
]
}

4. 授权

        账号/AK&SK作为主体,权限代表能否对资源进行操作,授权是将账号/AK&SK、权限策略、资源三者进行绑定的动作。授权分为长期授权和临时授权,用户通过绑定权限到资源完成授权,如图所示,这种也是长期授权,临时授权是指分配临时Token。

7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management_云服务_04

图  用户通过绑定权限到资源完成授权


  • 资源描述符


        为了对各项资源设置操作权限,需要精准定位一项资源,参考互联网上任何一个文件都可以通过URL来定位,在云平台上可以通过“资源描述符”来唯一描述一项资源。

        资源描述符的格式可以参考:


<cloud-provider>::<region-id>:<product-name>:<instance-id>

  • 临时Token授权

        如前面所述,访问云资源需要通过使用账号、密码登录控制台,或者基于AK&SK通过API/SDK/CLI进行访问,无法支持临时访问需求。在现实情况中,会有运维人员需要临时查看测试环境的云数据库等资源,如果将账号或AK&SK共享,则其操作会处于不受控的状态。通过创建临时Token授权,可以解决这个问题。首先通过控制台或API创建Token,即可获得TokenID和Token,其作用类似于Ak&SK,只不过TokenID和Token有令牌有效期,目前UCloud支持的令牌更新周期为5秒、10秒、15秒、20秒、30分钟、1小时、2小时、6小时、12小时、24小时。若不设置令牌自动续期,则到令牌有效期时,令牌会自动失效,授权也将结束。

5. 资源管理账号

  • 云主机账号密码

        创建云主机时需要设置密码,Ubuntu系统的默认主账号为ubuntu,其他Linux操作系统的默认主账号为root,Windows的默认主账号为Administrator。通过默认主账号登录操作系统,再创建的子账号属于操作系统内部账号,和云平台无关。

  • 云主机PEM证书

        通过账号密码登录云主机看似比较方便,实则泄露的风险较大,建议使用PEM证书的方式登录云主机。在创建云主机的时候可以选择采用账号密码或PEM证书来认证,如果选择PEM证书则会在创建云主机实例时将PEM证书下载保存,仅有一次下载机会。通过PuTTY登录云主机时在SSH验证配置中选择PEM证书进行上传,即可完成认证。

  • 云数据库

        在云主机上自建MySQL云数据库时的默认主账号为root,默认没有密码,如果云主机的端口对公网公开,就有可能被扫描到,黑客通过root直接登录管理你的数据库就像管理他自己的数据库一样简单,甚至有可能在你的数据库上随心所欲地修改、删除数据。

        云平台做了强制要求,云数据库必须设置具有一定复杂度的密码,避免恶意扫描云数据库IP后直接无密码登录。云数据库通常不会直接提供外网IP,因此不会直接暴露到外网中。如果云数据库需要连接外网,可通过NAT网关转发。部分云服务商支持开通外网IP。

6. 账号安全意识



最佳实践

不使用主账号管理资源,并为每个账号分配最小权限。


  • 演讲者在分享电脑屏幕时,在显示控制台密钥或在代码中进行展示时会泄露API密钥,因为会议录制的视频、参会者拍照、在线观众截屏都会把API密钥泄露出去。
  • 将代码提交至GitHub,往往在提交至GitHub等公共代码平台或共享给其他人员时,会把API密钥一并提交或共享,从而带来泄露风险。
  • 对于不必要的程序应用,临时授权时不能直接给API密钥,或者需要严格界定使用时间,并在临时使用完成后重置API密钥,更新所有程序中的API密钥。

7. 安全组

        安全组用于管理对云主机等资源的网络访问控制,如指定某些IP源地址能够访问云主机中的各类端口上的服务或拒绝访问某些端口上的服务等。绑定在云主机上的每个安全组策略包含若干条规则,这些规则由五元组组成,包括协议类型、源地址、源端口、目的地址、目的端口,安全组会按照顺序生效,如提供Web服务的云主机只需开放22、80、443端口,自建的FTP服务、邮件服务等则需要开放相对应的20、21、25、110、143等端口,对于自建数据库服务则需要开放22、3306端口,且需要设置允许访问的源地址为调用数据库的IP地址。访问控制策略及规则如表所示。

7天7项云服务 | 06-身份管理及访问控制IAM Identity and Access Management_云服务_05

表  访问控制策略及规则

        安全组会绑定在云主机等资源中,首先按照优先级进行排序,也就是优先级越高的越早进行匹配。如果优先级相同,则按照规则从上到下进行匹配,如果当前规则不匹配则尝试匹配下一条,如果已经匹配则会忽略后续同优先级的规则。如果两条规则只有动作不同,则按照拒绝策略生效,按照接受策略失效。部分云服务商默认绑定到云主机中的安全组对所有源地址和端口的所有协议都是拒绝动作,需要手动开放某些端口。

8. 网络访问控制ACL

        网络访问控制ACL是VPC内子网级别的安全策略,用于控制进出子网的数据流。可以通过设置出站规则和入站规则对进出子网的流量进行精确控制。ACL是无状态的,用户如果需要允许某些访问,则需要同时添加相应的入站规则和出站规则。若只添加入站规则,未添加出站规则,则会导致访问异常。

        出站/入站规则五元组如下:

  • 策略:允许或拒绝。
  • 来源IP/目标IP:出站/入站规则针对的网段。
  • 协议类型:支持TCP、UDP、ICMP和GRE协议类型,可选择ALL来指定所有协议类型。
  • 目标端口:TCP和UDP协议类型允许填写的端口范围为1~65535,其他协议类型无须指定端口。
  • 应用目标:ACL规则的生效范围,支持子网内全部资源或指定资源。

9. 延伸思考



更多安全控制

云数据库创建完成后没有公网IP,默认没有对外暴露,进一步管控了外网的访问。安全锁是云资源高危操作的二次验证服务,开启该服务后,在进行删除资源等危险操作时,需要通过手机短信校验身份,身份验证半小时内有效,之后进行危险操作需要再次验证身份。



  • 云平台一般都提供了主账号,在企业内部哪个角色应该使用主账号来管理云主机/云服务器等资源呢?
  • 按照哪种原则为子账号分配权限呢,按照最小权限还是最大权限的原则?

10. 动手实验

  • 选择一个云平台,在主账号中创建一个子账号,进行截图;
  • 为子账号分为创建云主机/云服务器的权限,去掉删除云主机/云服务器的权限,进行截图;
  • 通过更改安全组来限制云主机/云服务器80端口的访问,配置界面进行截图。



举报

相关推荐

0 条评论