什么是访问管理
访问管理(Cloud Access Management,CAM)是一套建立于腾讯云账号体系和开放云API基础之上的云服务,用于帮助客户安全地管理腾讯云账户的访问权限,资源管理和使用权限。通过 CAM,用户可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制哪些人可以使用哪些腾讯云资源。
CAM的工作方式
在访问管理中,授权存在3个要素:授权人、访问权限和委托人。
授权人:授权人可以是云资源拥有者(即用户在腾讯云注册的根账号),也可以是被授予了该账号CAM权限的委托人。
访问权限:在cam中通过策略来定义访问权限,策略包括action、resource和condition等若干部分。action指示授权的API,resource指示授权哪些资源,condition指示访问时间或访问的客户端IP等访问条件。一个策略把action、resource和condition组合在一起,就表示委托人在什么条件下可以使用哪些API操作哪些云资源。
委托人:被授予访问权限的人,在cam中通过子用户、用户组和角色(虚拟身份)来定义。在现实场景中,委托人可以是云资源拥有者的企业员工、云资源拥有者的APP用户或第三方云服务提供商等。
而CAM的身份验证和鉴权,都放到API的入口来做,从而保证授权的有效性。
用户使用云服务面临的问题以及相应的解决方案
第三方服务提供商场景
公有云是开放的云服务,云上有许多第三方服务提供商,这些服务商在腾讯云基础服务上为用户提供增值服务。比如mapreduce服务商,需要在云主机和云存储服务基础之上为用户提供服务。第三方服务商是构建完整云生态不可或缺的重要部分,我们需要考虑如何把第三方服务商安全而低成本地接入到腾讯云平台中来,或者说如何把腾讯云的基础能力开放给第三方服务商,从而更好满足用户多样化的需求。
这个问题一个直观的解决方案是每个不同的第三方服务商都单独直接去跟腾讯云基础服务团队做后台接入。但是第三方服务商数量庞大,如果每个第三方服务商都与基础服务做一对一接入,那么这种做法非常低效,而且对基础服务团队来说也是沉重的负担。而对用户来说,这种在后台直接封装出来的云服务不够透明,完全是一个黑盒。
这个问题另一个简单的解决方案是用户在自己的根账号下创建一个子用户,给这个子用户授权一定的权限,然后第三方服务商通过这个子用户来访问用户的云资源,但是这种方案下,服务商对每一个不同的用户都需要持久化地保存不同的访问凭证,管理这些访问凭证将给服务商带来较高的成本。
为了解决公有云服务对第三方开放的问题,我们设计的方案是,第三方服务商在腾讯云注册成为一个独立的根账号,用户在自己的账号下面创建一个角色(虚拟身份),这个角色被用户关联包含指定权限的策略,并且角色被设置为“信任”第三方服务商的账号,然后,第三方服务商通过自己根账号的密钥签名调用CAM的角色临时密钥API拿到这个角色的临时密钥,通过临时密钥签名调用腾讯云基础服务的开放API来访问用户的云资源。
这个方案实现了腾讯云基础服务的低成本而且安全的开放,同时避免了前面两种方案带来的弊端。
app客户端访问云资源场景
腾讯云的用户中有很多是app开发商,这些开发商使用腾讯云服务存储后台数据,而app需要能够向服务端上传文件或从服务端下载文件。
为了使app能够访问开发商的云资源,有两种简单的解决方案,一种是开发商把自己的腾讯云密钥内置保存在app客户端中,app用户通过密钥直接访问腾讯云服务。但是,把密钥保存在客户端,极易被破解而变成开发商的一个安全漏洞。
还有一种方案是开发商在app客户端与腾讯云服务之间搭建一个网关代理服务。每次app要访问云服务,都先请求开发商的网关层,网关层经过app用户身份验证之后代理app去请求腾讯云服务,最后网关层把请求结果返回给app。这种方案的缺点是,当app访问量巨大的时候,开发商需要为网关层配置大量的机器资源来承接app的请求,这对开发商来说成本太高了。
为了规避前面两种方案的弊端,我们通过临时密钥来满足用户的需求。方案是,开发商搭建一套临时密钥代理服务,app访问云资源前,先请求代理服务,代理服务验证app身份之后,请求CAM的临时证书服务获得一个限定了访问权限的临时证书,然后代理服务把临时证书返回给app端,app再通过这个临时证书访问云资源。因为代理服务每次申请临时证书都可以指定具体的策略权限,所以每个临时证书可以有不同的访问权限,使得开发商可以限制特定的app用户只能访问特定的云资源,从而避免了越权而产生安全漏洞。又因为在临时证书有效期内,app可以重复使用该证书,这样就避免了大量app请求对开发商代理层造成冲击,节省了开发商的设备成本。
通过介绍上述场景中CAM所起的作用,可以看出CAM帮助云服务扩展了自身的服务边界,并增强了云服务的开放能力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。