阿里云身份管理与访问控制之信任管理: 角色扮演, 临时身份和安全令牌

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介:

本文介绍了阿里云访问控制中的角色扮演和临时身份特性。这两个特性帮助客户管理好对合作伙伴, 云服务协同应用, 以及客户应用服务的信任与访问授权, 构成了阿里云安全受控的合作生态的技术基础设施的一部分。

信任管理

云平台中的资源, 我们可以授权给信任的员工, 合作伙伴, 平台服务, 我们自己部署的应用等不同的身份来访问.

  1. 合作伙伴A来负责代运维一组Linux服务器, 除此以外不能访问其他资源; 合作伙伴B来负责维护RDB服务, 除此以外不能访问其他资源;
  2. 授权给阿里云的多媒体处理服务来处理存放在OSS中指定目录中的图片和视频, 但不能访问其他目录里中的资源.
  3. 部署在ECS中的运维工具, 能够根据负载变动情况, 自动关闭一些ECS机器, 或自动升级或启动一些ECS机器.

这些应用场景中的信任管理, 都是通过角色扮演和临时身份实现的.

角色扮演

阿里云账号中的资源分权访问, 对于员工可以使用子用户来实现. 对于不适合子用户(含子用户组)授权的情况, 采取基于角色扮演的授权方法更安全便捷.

比如, 合作伙伴帮助做运维时, 会在他们自己的主账号中管理自身的员工子用户, 我们所需要做的是创建一个(或多个)与他们的主账号绑定的角色,  并把角色与合适的访问控制策略绑定.

role-with-accounts

如上图,我们的主账号为A1,两家服务商的主账号分别为P1和P2。在我们的访问控制管理界面上,我们可以创建角色A1P11和A1P21,分别绑定了子账号P1和P2。服务商P1可以在自己的访问控制管理界面上,授予其子用户P1U1、P1U2、P1U3等扮演角色A1P11的权限;服务商P2可以在自己的访问控制管理界面上,授予其子用户P2U1、P2U2、P2U3等扮演角色A1P21的权限。

角色A1P11、A1P21能访问哪些资源,由A1通过关联访问控制策略来设置;哪些人能扮演角色,由合作方P1、P2分别控制。

这种基于角色扮演的代理授权方式, 是一种安全而又便捷的信任管理方式. 阿里云为角色切换及操作过程提供了操作记录供安全审计, 进一步提升了可追溯性和安全性.

角色扮演(或角色切换)的过程, 隐含了创建临时身份(临时子用户)的过程. 跨账号的角色是账号对账号的关系, 并不会限制实际的扮演者是合作账号内的哪一个子用户.

当合作账号内的某个子用户开始扮演角色时, 系统会在我们的账号内创建一个临时的子用户. 当合作账号内的另一个子用户开始扮演角色时, 系统会创建另外一个临时的子用户. 当合作账号的子用户完成了工作, 退出所扮演的角色时, 临时子用户的生命周期就结束了 (不再可用, 但仍然存在于操作记录中).

临时身份和令牌

通过管理控制台进行角色扮演和角色切换过程中创建的临时身份是不可见的。在基于API的访问中, 临时身份以令牌的形式存在, 对API的开发者用户而言是必须理解的概念.

通过STS (Security Token Service)创建的临时身份也叫做令牌,是有过期时间的安全访问凭证。它的临时身份信息由Access Key和Security Token组成。其中Access Key包括Key ID和Key Secret,用于API请求的签名。

在常见的API的访问控制中,一般只使用Security Token即可实现安全身份管理,比如互联网开放平台上最常用的访问控制规范oauth2(不使用MAC signature时);而在云平台中,对API请求签名,能进一步提高安全性。

在阿里云OpenAPI中, 令牌的创建需要调用API assumeRole.

client = AcsClient(access_key_id, access_key_secret, region_id)
sts_request = AssumeRoleRequest.AssumeRoleRequest()
sts_request.set_RoleArn(role_arn)
sts_request.set_RoleSessionName(sts_session_name)

sts_response_str = client.do_action_with_exception(sts_request)
sts_response_json = json.loads(sts_response_str)
sts_cred_dict = sts_response_json['Credentials']
sts_cred = credentials.StsTokenCredential(
    sts_access_key_id=sts_cred_dict['AccessKeyId'],
    sts_access_key_secret=sts_cred_dict['AccessKeySecret'],
    sts_token=sts_cred_dict['SecurityToken']
)

获得了令牌以后, 就可以用于调用阿里云的其他的OpenAPI了, 比如下面的例子, 调用ECS API列出ECS 实例列表.

stsClient = AcsClient(region_id=region_id, credential=sts_cred)
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(50)
response = stsClient.do_action_with_exception(request)

完整的代码请参考 https://gitee.com/iam2cloud/acs_ram_demo.

云服务协同, ECS上的应用与角色扮演

前面我们提到了用户(子用户)扮演角色; 此外, 云平台所提供的服务之间协作时, 我们所订购的服务A要去自动访问服务B或C时, 我们就需要创建一个合适的角色, 该角色允许操作服务B的资源, 并授信服务A来扮演该角色. 服务A在后台会自动依据所授予的角色来调用STS服务, 生成临时身份和令牌, 用于调用服务B或C的API.

目前已经可以支持这种授权方式的服务有:  多媒体转码服务, 归档存储服务, 日志服务, API网关服务, 函数计算服务.

云平台提供的这些服务, 可以通过该服务的管理控制台或OpenAPI来配置所授予的服务角色, 服务获取临时身份和令牌的过程是不可见的.

与云平台提供的服务相比, ECS实例中的应用服务是一种特殊的服务, 由客户自己负责部署. ECS实例中的应用服务要通过平台的API访问云资源时, 可以通过ECS实例的元数据服务来获取临时身份和安全令牌.

阿里云平台中的ECS实例通过以下地址访问其metadata:

curl http://100.100.100.200/latest/meta-data/

其中, 该实例所扮演的角色所生成的临时身份和安全令牌路径为:

ram/security-credentials/[role-name]

下面的代码是一个完整的例子:

 $curl http://100.100.100.200/latest/meta-data/ram/security-credentials/ecs-i-1
 {
  "AccessKeyId" : "STS.123",
  "AccessKeySecret" : "123456",
  "Expiration" : "2018-06-01T15:44:32Z",
  "SecurityToken" : "C1111111111111111111111111111111111111111111111111111111111111111==",
  "LastUpdated" : "2018-06-01T09:44:32Z",
  "Code" : "Success"
}

参考文档

  1. 角色身份的概念理解 https://help.aliyun.com/document_detail/28649.html
  2. 合作伙伴间(跨主账号)基于角色扮演的授权管理场景 https://help.aliyun.com/document_detail/28658.html
  3. STS SDK Python示例 https://help.aliyun.com/document_detail/28797.html
  4. 函数计算中的服务角色授权示例 https://yq.aliyun.com/articles/152077
  5. 通过控制台授予ECS 实例服务角色 https://help.aliyun.com/document_detail/61175.html
  6. 移动应用APP使用临时身份和安全令牌的解决方案https://help.aliyun.com/document_detail/28657.html. 需要注意的是, 这个解决方案在实现移动APP从后台服务端获取临时身份和安全令牌时, 还需要保证后台服务需要保证对移动APP进行身份识别并保证传送过程的加密安全.
相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
1月前
|
SQL 安全 数据管理
在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
【2月更文挑战第33天】在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
36 7
|
13天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
14天前
|
弹性计算 安全
电子好书发您分享《阿里云第八代企业级ECS实例,为企业提供更安全的云上防护》
阿里云第八代ECS实例,搭载第五代英特尔至强处理器与飞天+CIPU架构,提升企业云服务安全与算力。[阅读详情](https://developer.aliyun.com/ebook/8303/116162?spm=a2c6h.26392459.ebook-detail.5.76bf7e5al1Zn4U) ![image](https://ucc.alicdn.com/pic/developer-ecology/cok6a6su42rzm_f422f7cb775444bbbfc3e61ad86800c2.png)
35 14
|
26天前
|
云安全 编解码
阿里云安全视频审核的最大文件大小为**200MB**。
阿里云安全视频审核的最大文件大小为**200MB**。
13 1
|
1月前
|
云安全 人工智能 安全
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器:一款高效、稳定、安全的云计算服务
阿里云服务器ECS和轻量应用服务器有什么区别?轻量和ECS优缺点对比,云服务器ECS是明星级云产品,适合企业专业级的使用场景,轻量应用服务器是在ECS的基础上推出的轻量级云服务器,适合个人开发者单机应用访问量不高的网站博客、云端学习测试环境等,阿里云服务器网从从使用场景、适用人群、计费方式、系统镜像、网络带宽、运维管理等多方面来详细说下二者区别及如何选择
96 1
|
2月前
|
运维 安全 关系型数据库
数据库自治与安全服务训练营火热开营!完成任务可得国潮保温杯和阿里云定制双肩包!
本训练营带您简单了解数据库自治与云安全服务,数据库自治服务提供云上RDS、PolarDB、NoSQL、ADB等数据库7*24小时异常检测、SQL自优化、安全合规审计、弹性伸缩、数据自治、锁分析等亮点功能。一站式自动化、数字化DAS集成平台,助力您畅享DBA运维智能化。

热门文章

最新文章