当前国内外云计算平台Rest API访问控制机制分析

第1章 现有云API的访问控制机制

目前两个常用的云API为REST(Representational State Transfer)和SOAP(Simple Object Access Protocol),REST基于JSON(JavaScript Object Notation)格式,SOAP基于XML格式。现在主流云平台均支持REST风格的API,Amazon EC2和S3已经将SOAP API标为deprecated,因此本文重点研究REST API的访问控制。

1.1 腾讯云API

官方API文档: http://www.qcloud.com/wiki/v2/API

腾讯云API严格来说属于Query API,并不属于REST API。

1.1.1 创建实例例子

如下面创建实例的例子:

https://cvm.api.qcloud.com/v2/index.php?Action=RunInstances &imageId=img-12345678 &bandwidth=1 &cpu=1 &mem=2 &storageType=1 &storageSize=50 &period=12 &goodsNum=1 &COMMON_PARAMS

1.1.2 访问控制策略

腾讯云没有单独的访问控制组件,也没有文本格式的访问控制策略。通过”用户中心”的”权限设置”能够进行简单的权限管理。

如根QQ账户的角色是:创建者,权限是:全局(管理云资源、管理财务、管理协作者)。并且根账户可以创建子用户,设置以下4种默认的权限:管理全部用户、管理财务、管理所有云资源、接受消息。

1.2 阿里云API

阿里云( http://develop.aliyun.com/api)的主要服务有两个:弹性计算服务(Elastic Compute Service, ECS)对象存储服务(Object Storage Service, OSS),分别对应AWS的EC2和S3。ECS主要提供的是Query API。

1.2.1 创建实例例子

如下面创建实例的例子:

https://help.aliyun.com/document_detail/ecs/open-api/instance/createinstance.html

https://ecs.aliyuncs.com/?Action=CreateInstance&RegionId=cn-hangzhou&ImageId=_32_23c472_20120822172155_aliguest.vhd&SecurityGroupId=sg-c0003e8b9&HostName=Bctest01&InstanceType=ecs.t1.small&<公共请求参数>

OSS服务则支持REST API,如下面追加写文件的例子:(Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object)

POST /ObjectName?append&position=Position HTTP/1.1Content-Length:ContentLengthContent-Type: ContentTypeHost: BucketName.oss.aliyuncs.comDate: GMT DateAuthorization: SignatureValue

1.2.2 访问控制策略

https://help.aliyun.com/document_detail/ram/intro/intro.html?spm=5176.product8315075_ram.4.2.1d58g5

阿里云通过RAM (Resource Access Management)服务进行资源访问服务。通过RAM,您可以集中管理您的用户(比如员工、系统或应用程序),以及控制用户可以访问您名下哪些资源的权限。

阿里云RAM与Amazon AWS的IAM非常类似,唯一区别就在于Amazon AWS在支持user-based policies之外,还支持resource-based policies,而阿里云只支持user-based policies。

  • .账号ID:16位十进制数字,例如:1381146476737651
  • .资源:acs::::

格式说明:

acs: 它是Aliyun Cloud Service的首字母缩写,表示阿里云的公有云平台

service-name: 阿里云提供的Open Service的名字,如ecs, oss, ots, odps等

region: 地区信息。如果不支持该项,可以使用通配符”*”号来代替

account-id: 账号ID,比如1234567890123456

relative-id: 与service相关的资源描述部分,其语义由具体service指定。这部分的格式描述支持类似于一个文件路径的树状结构。以odps为例,relative-id = “projects/sampleproject/tables/sampletable”表示:sampleproject项目空间下的sampletable表

  • .操作::

格式说明:

service-name: 阿里云产品名称,如ecs, odps, oss, ots等。

action-name: service相关的api操作接口名称。

策略格式: https://help.aliyun.com/document_detail/ram/ram-user-guide/policy_reference/elements.html?spm=5176.docram/ram-user-guide/policy_reference/condition.6.119.jC8Zcz

策略例子:AliyunECSFullAccess(管理云服务器服务(ECS)的权限)

{ “Version”: “1”, “Statement”: [ { “Action”: “ecs:*”, “Resource”: “*”, “Effect”: “Allow” }, { “Action”: [ “vpc:DescribeVpcs”, “vpc:DescribeVSwitches” ], “Resource”: “*”, “Effect”: “Allow” } ]}
1.2.2.1.RAM要解决的问题

如果您购买了云资源,您的组织里有多个用户需要使用这些云资源。如果这些用户共享使用您的云账号密钥,那么存在两个问题:(1) 您的密钥由多人共享,泄露的风险很高;(2) 您无法限制用户的访问权限,容易出现误操作导致安全风险。RAM将帮助客户管理用户对资源的访问权限控制。

1.2.2.2.RAM解决问题的方法

RAM允许您在云账号下创建并管理多个用户。RAM用户是代表任意的通过控制台或OpenAPI操作阿里云资源的人、系统或应用程序。在您的云账户下,每个用户都有唯一的用户名、登录密码或访问密钥,这样您就不需要与他人共享密钥了。通过RAM,您还可以控制您的用户对基础设施云服务的访问权限,支持角色分离和最小特权的安全最佳实践。

1.2.2.3.云账户与RAM用户的关系

从归属关系上看,云账户与RAM用户是一种主子关系。云账户是阿里云资源归属、资源使用计量计费的基本主体。RAM用户只能存在于某个云账户下的RAM实例中。RAM用户不拥有资源,在被授权操作时所创建的资源归属于主账户;RAM用户不拥有账单,被授权操作时所发生的费用也计入主账户账单。

从权限角度看,云账户与RAM用户是一种root与user的关系(类比Linux系统)。Root对资源拥有一切操作控制权限,而user只能拥有被root所授予的某些权限,而且root在任何时刻都可以撤销user身上的权限。

RAM用户是否能自己设置权限

1.2.2.4.RAM服务与其它云服务的关系

RAM是阿里云为客户提供的集中式用户身份与访问控制管理服务。与阿里云提供的其它服务类似,RAM被抽象成云账户下的一种资源,但在每个云账户下只允许存在一个RAM实例。下面是一个云账户下的资源关系图,它展现了RAM与其它云服务之间的关系。

1.2.2.5.RAM功能

集中控制RAM用户及其密钥——您可以管理每个用户及其访问密钥,为用户绑定/解绑多因素认证设备

集中控制RAM用户的访问权限——您可以控制每个用户可以访问您名下哪些资源的操作权限

集中控制RAM用户的资源访问方式——您可以确保用户必须使用安全信道(如SSL)、在指定时间、以及在指定的网络环境下请求访问特定的云服务

集中控制云资源——您可以对用户创建的实例或数据进行集中控制。当用户离开您的组织时,这些实例或数据不会丢失

统一账单——您的账户将收到包括所有用户的资源操作所发生的费用的单一账单

1.2.2.6.RAM控制台地址

RAM的控制台地址是https://ram.console.aliyun.com

1.2.2.7.支持RAM的云产品

所有阿里云产品都会与RAM集成,查阅目前支持哪些服务与RAM集成,请参考支持RAM的云服务

1.2.2.8.RAM服务费用

RAM服务是阿里云账户的一个基础功能,使用RAM无需额外付费。

1.3 360安全云

https://cloud.360.cn/

正在账号审核中。

1.4 AWS API

https://gehrcke.de/2009/06/aws-about-api/

AWS所提供的各种服务的API并不统一,共采用了3种API形式:REST API,Query API,SOAP API。其中SOAP API基本已经deprecated,不予考虑。因此主要有两种:REST API和Query API。

图1 AWS各子服务支持的API列表

1.4.1 创建实例例子

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html

https://ec2.amazonaws.com/?Action=RunInstances&ImageId=ami-2bb65342&MaxCount=3&MinCount=1&Placement.AvailabilityZone=us-east-1a&Monitoring.Enabled=true&Version=2015-10-01&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLEus-east-1%2Fec2%2Faws4_request&X-Amz-Date=20130813T150206Z&X-Amz-SignedHeaders=content-type%3host%3x-amz-date&X-Amz-Signature=ced6826de92d2bdeed8f846f0bf508e8559e98e4b0194b84example54174deb456cContent-type: application/jsonhost:ec2.amazonaws.com

1.4.2 查询实例例子

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html

https://ec2.amazonaws.com/?Action=DescribeInstances&Filter.1.Name=instance-type&Filter.1.Value.1=m1.small&Filter.1.Value.2=m1.large&Filter.2.Name=block-device-mapping.status&Filter.2.Value.1=attached&Filter.3.Name=block-device-mapping.delete-on-termination&Filter.3.Value.1=true&AUTHPARAMS

1.4.3 访问控制策略

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html

Amazon AWS使用IAM(Identity and Access Management)对云资源进行访问控制。支持用户、组、角色等概念,在IAM里组仅仅是用户的集合,不能作为策略中的内容出现。角色则是拥有独立ID的概念。可以出现在策略中,并且可以跨账号授权。

  • .根账号ID:12位10进制数字,如129697535497
  • .用户ID:arn:aws:iam::account-ID-without-hyphens:user/Bob
  • .操作:每个AWS都有一系列动作。比如你可能希望允许一个用户使用Amazon S3 ListBucket动作,这个动作用来返回bucket里的信息。没有显式允许的动作是禁止。如:s3:ListBucket

AWS操作列表: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actionsconditions.html

  • .资源:需要操作的资源。如arn:aws:s3:::example_bucket
  • .效果:只有Allow和Deny两种取值。

策略例子:AmazonEC2FullAccess(提供对EC2的所有权限)

ARN(Amazon Resource Name)为arn:aws:iam::aws:policy/AmazonEC2FullAccess

{ “Version”: “2012-10-17”, “Statement”: [ { “Action”: “ec2:*”, “Effect”: “Allow”, “Resource”: “*” }, { “Effect”: “Allow”, “Action”: “elasticloadbalancing:*”, “Resource”: “*” }, { “Effect”: “Allow”, “Action”: “cloudwatch:*”, “Resource”: “*” }, { “Effect”: “Allow”, “Action”: “autoscaling:*”, “Resource”: “*” } ]}

同时,对于Amazon S3 bucket这样的基于资源的策略,IAM也支持在策略中设置主体(principle),例子策略如下:

{ “Version”: “2012-10-17”, “Id”: “S3-Account-Permissions”, “Statement”: [{ “Sid”: “1”, “Effect”: “Allow”, “Principal”: {“AWS”: [“arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:root”]}, “Action”: “s3:*”, “Resource”: [ “arn:aws:s3:::mybucket”, “arn:aws:s3:::mybucket/*” ] }]}

IAM还支持在策略中使用request context的属性,如使用username属性来匹配资源:

“Resource”: [ “arn:aws:s3:::mybucket/${aws:username}/*” ]

1.4.4 策略评估与集成

http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

AWS的IAM采用以下机制:

  1. 1)默认所有请求都是禁止的(根账户对所有资源则允许操作);
  2. 2)显式的Allow策略则覆盖1)中的默认规则;
  3. 3)显式的Deny策略则覆盖所有Allow策略。

策略评估的结果与策略的顺序无关,所有符合的策略都会被评估,最终结果不是Allow就是Deny。

IAM采用的策略集成机制是Deny-overrides拒绝优先机制,一旦有策略显式拒绝某请求,则该请求一定会被拒绝。

以下是策略评估示意图:

图2 IAM策略评估示意图

1.5 Microsoft Azure API

http://blog.csdn.net/chszs/article/details/7851794

微软的Azure服务总线提供了一整套REST风格的API,其中包括服务运行时API(Service Runtime API)和服务管理API(Service Management API),分别用于运行时操作和管理操作。

但是大多数API还是采用GUI或者Azure PowerShell才能操作,不具备Rest接口,如虚拟机相关的操作。

1.5.1 Windows Azure安全概述

http://blogs.msdn.com/b/azchina/archive/2011/03/06/windows_5f00_azure_5f00_security_5f00_overview_5f00_white_5f00_papaer.aspx

1.6 华为企业云API

http://support.hwclouds.com/usermanual/iam/hlp/IAM/p_hlp_create_usergroup.html

华为企业云是基于OpenStack开发的。采用统一身份认证服务(Identity and Access Management)来提供适合企业组织结构的用户管理机制,为企业成员分配不同的资源及操作权限,通过访问密钥以OpenAPI的方式访问公有云资源。

华为IAM没有文本格式的访问控制策略,只有通过图形界面,可以选择一些系统预置的权限。

http://developer.hwclouds.com/endpoint.html

虽然华为云是基于OpenStack实现的,但是其已经用主机名来区分服务了,而不是OpenStack默认的端口号,具体的主机名如下图所示。

服务名称区域名称区域Endpoint协议类型
弹性云主机(ECS)中国华北区1cn-north-1ecs.cn-north-1.myhwclouds.comcn
镜像服务(IMS)中国华北区1cn-north-1ims.cn-north-1.myhwclouds.comcn
云硬盘(EVS)中国华北区1cn-north-1evs.cn-north-1.myhwclouds.comcn
云硬盘备份(VBS)中国华北区1cn-north-1vbs.cn-north-1.myhwclouds.comcn
对象存储服务(OBS)中国华北区1cn-north-1obs.cn-north-1.myhwclouds.comcn
虚拟私有云(VPC)中国华北区1cn-north-1vpc.cn-north-1.myhwclouds.comcn
弹性负责均衡(ELB)中国华北区1cn-north-1elb.cn-north-1.myhwclouds.comcn
云监控服务(CES)中国华北区1cn-north-1ces.cn-north-1.myhwclouds.comcn
弹性大数据(BigData)中国华北区1cn-north-1bigdata.cn-north-1.myhwclouds.comcn

1.6.1 查询实例例子

http://support.hwclouds.com/api-ecs/zh-cn_topic_0020212690.html

根据云主机ID,查询云主机的详细信息。

GET

ecs.cn-north-1.myhwclouds.com/v1/{project_id}/servers/{server_id}

1.7 OpenStack API

OpenStack API完全遵守REST风格规范。

1.7.1 查询实例例子

http://developer.openstack.org/api-ref-compute-v2.1.html

显示一个虚拟机的详细信息

GET

http://controller/v2.1/​{tenant_id}​/servers/​{server_id}​

1.8 CloudStack API

CloudStack API是基于Web的API,但是并不完全遵守REST规范。比如REST规范要求使用CRUD操作,但CloudStack API只支持GET和POST动词。详细信息如下:

http://blog.csdn.net/sjun2014/article/details/27320513

所有的CloudStack API请求是以HTTP GET / POST有一个关联的命令和任何参数的形式提交的。无论在HTTP或HTTPS中请求都由一下组成:

CloudStack API URL:这是Web服务的API入口点(例如,http://域名:8080/client/api)。

命令(Command):Web服务命令要执行,如启动虚拟机或创建一个磁盘卷。

参数(Parameters):任何额外的要求或命令的可选参数。

1.8.1 创建实例例子

一个API GET请求示例如下:

http://localhost:8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D

或如下一个更可读的示例:

http://localhost:8080/client/api?2. command=deployVirtualMachine3. &serviceOfferingId=14. &diskOfferingId=15. &templateId=26. &zoneId=47.&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ8. &signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D%3D

第1行是的CloudStackAPI URL。这是你希望进行交互的云实例。

第2行是指你要执行的命令。在我们的例子中,我们试图部署一个新的虚拟机。通过前面的一个(?)将要执行的命令从CloudStack API URL中分离出来。

第3-6行是此命令的参数。要查看命令和请求参数,请参阅在CloudStack API文档的相应部分。每个参数字段-值对(field =value)通过前面的字符(&)分隔开。

第7行是可以唯一标识帐户的APIkey。请参阅第9页上的签名API请求。

第8行是创建的签名哈希来验证用户帐户执行的API命令。

请参阅第9页上的签名API请求。

1.9 Hadoop API

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

Hadoop提供了对FileSystem/FileContext接口的REST API。

1.9.1 写入文件例子

以下提供了一个创建并写入文件的例子:

Step 1: Submit a HTTP PUT request without automatically following redirects and without sending the file data. curl -i -X PUT “http://:/webhdfs/v1/?op=CREATE [&overwrite=false>][&blocksize=][&replication=] [&permission=][&buffersize=]”The request is redirected to a datanode where the file data is to be written: HTTP/1.1 307 TEMPORARY_REDIRECTLocation: http://:/webhdfs/v1/?op=CREATE…Content-Length: 0Step 2: Submit another HTTP PUT request using the URL in the Location header with the file data to be written. curl -i -X PUT -T “http://:/webhdfs/v1/?op=CREATE…”The client receives a 201 Created response with zero content length and the WebHDFS URI of the file in the Location header: HTTP/1.1 201 CreatedLocation: webhdfs://:/Content-Length: 0

1.10 总结

目前业界的云API事实标准是Amazon AWS,因此云平台访问控制的事实标准也是Amazon AWS的IAM。阿里云提供的RAM (Resource Access Management)服务几乎与AWS的IAM完全相同,唯一区别在于Amazon AWS在支持user-based policies之外,还支持resource-based policies,而阿里云只支持user-based policies。

腾讯云没有独立的访问控制组件(至少官方没有显式说明),华为则提出了IAM服务。但是两者都没有提供文本格式的访问控制策略,也做不到action级别的访问控制,只有预置的几个权限可以选择。

360安全云和Microsoft Azure申请还没有获得批准。

第2章 其他类型系统的Rest API整理

2.1 Up云API

http://docs.upyun.com/api/rest_api/

2.2 Dropbox写入文件

http://stackoverflow.com/questions/18491391/is-it-possible-to-work-with-dropbox-rest-api-without-any-libraries-using-only-g

2.3 Wordpress API

https://developer.wordpress.com/docs/api/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Casbin开源社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值