IAM权限
IAM权限简介
默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略和角色,才能使得用户组中的用户获得策略定义的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。
对于OBS,IAM权限作用于OBS所有的桶和对象。如果要授予IAM用户操作OBS资源的权限,则需要向IAM用户所属的用户组授予一个或多个OBS权限。
OBS部署时不区分物理区域,为全局级服务。授权时,在全局级服务中设置权限,访问OBS时,不需要切换区域。
根据授权精细程度分为角色和策略。
- 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。
- 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对OBS服务,管理员能够控制IAM用户仅能对某一个桶资源进行指定的管理操作。
由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的角色和策略后,大概需要等待10~15分钟权限才能生效。
IAM中为各云服务预置了系统权限,方便您快速完成基础权限配置,表1为OBS的所有系统权限。
如果系统预置的OBS权限,不满足您的授权要求,可以创建自定义策略。
系统角色/策略名称 |
描述 |
类别 |
依赖关系 |
---|---|---|---|
Tenant Administrator |
拥有该权限的用户拥有除IAM外,其他所有服务的所有执行权限。 |
系统角色 |
无 |
Tenant Guest |
拥有该权限的用户拥有除IAM外,其他所有服务的只读权限。 |
系统角色 |
无 |
OBS FullAccess |
拥有该权限的用户为OBS管理员,可以对账号下的所有OBS资源执行任意操作。 |
系统策略 |
无 |
OBS Buckets Viewer |
拥有该权限的用户可以执行列举桶、获取桶基本信息、获取桶元数据的操作。 |
系统策略 |
无 |
OBS ReadOnlyAccess |
拥有该权限的用户可以执行列举桶、获取桶基本信息、获取桶元数据、列举对象(不包含多版本)的操作。
说明:
拥有该权限的用户如果在控制台上列举对象失败,可能是因为桶中存在多版本对象。此时需要额外授予该用户列举多版本对象的权限(obs:bucket:ListBucketVersions),才能在控制台正常看到对象列表。 |
系统策略 |
无 |
OBS OperateAccess |
拥有该权限的用户可以执行OBS ReadOnlyAccess的所有操作,在此基础上还可以执行上传对象、下载对象、删除对象、获取对象ACL等对象基本操作。
说明:
拥有该权限的用户如果在控制台上列举对象失败,可能是因为桶中存在多版本对象。此时需要额外授予该用户列举多版本对象的权限(obs:bucket:ListBucketVersions),才能在控制台正常看到对象列表。 |
系统策略 |
无 |
下表列出了OBS常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。
操作名称 |
Tenant Administrator |
Tenant Guest |
OBS FullAccess |
OBS Buckets Viewer |
OBS ReadOnlyAccess |
OBS OperateAccess |
---|---|---|---|---|---|---|
列举桶 |
可以 |
可以 |
可以 |
可以 |
可以 |
可以 |
创建桶 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
删除桶 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
获取桶基本信息 |
可以 |
可以 |
可以 |
可以 |
可以 |
可以 |
管理桶访问权限 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理桶策略 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
修改桶存储类别 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
列举对象 |
可以 |
可以 |
可以 |
不可以 |
可以 |
可以 |
列举多版本对象 |
可以 |
可以 |
可以 |
不可以 |
不可以 |
不可以 |
上传文件 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
新建文件夹 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
删除文件 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
删除文件夹 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
下载文件 |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
删除多版本文件 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
下载多版本文件 |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
修改对象存储类别 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
恢复文件 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
取消删除文件 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
删除碎片 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
管理对象访问权限 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
设置对象元数据 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
获取对象元数据 |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
管理多版本控制 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理日志记录 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理事件通知 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理生命周期规则 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理静态网站托管 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理CORS规则 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理防盗链 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
域名管理 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
管理跨区域复制 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
设置对象ACL |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
设置指定版本对象ACL |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
不可以 |
获取对象ACL |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
获取指定版本对象ACL |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
多段上传 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
列举已上传段 |
可以 |
可以 |
可以 |
不可以 |
不可以 |
可以 |
取消多段上传任务 |
可以 |
不可以 |
可以 |
不可以 |
不可以 |
可以 |
IAM权限应用场景
IAM权限主要面向对同账号下IAM用户授权的场景:
- 使用策略控制账号下整个云资源的权限时,使用IAM权限授权。
- 使用策略控制账号下OBS所有的桶和对象的权限时,使用IAM权限授权。
- 使用策略控制账号下OBS指定资源的权限时,使用IAM权限授权。
策略结构&语法
策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。
策略语法,示例:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:HeadBucket", "obs:bucket:ListBucket", "obs:bucket:GetBucketLocation" ], "Resource": [ "obs:*:*:bucket:*" ], "Condition": { "StringEndWithIfExsits": { "g:UserName": ["specialCharacter"] }, "Bool": { "g:MFAPresent": ["true"] } } } ] }
参数 |
说明 |
---|---|
Version |
标识策略的版本号:
|
Statement |
策略授权语句,描述策略的详细信息,包含Effect(效果)、Action(动作)、Resource(资源)和Condition(条件)。其中Resource和Condition为可选。
|
IAM权限通用配置方法
OBS自定义策略样例
- 示例1:给用户授予OBS的所有权限
此策略表示用户可以对OBS进行任何操作,使用方式包括API、SDK、控制台及工具。
由于用户登录OBS控制台时,会访问一些其他服务的资源,如CTS审计信息,CDN加速域名,KMS密钥等。因此除了配置OBS的权限外,还需要配置其他服务的访问权限。其中CDN属于全局服务,CTS、KMS、SMN等属于区域级服务,需要根据您实际使用到的服务和区域分别在全局项目和对应区域项目中配置Tenant Guest权限。{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:*:*" ] } ] }
- 示例2:给用户授予桶的只读权限(不限定目录)
此策略表示用户可以对桶obs-example下的所有对象进行列举和下载。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject", "obs:bucket:ListBucket" ], "Resource": [ "obs:*:*:object:obs-example/*", "obs:*:*:bucket:obs-example" ] } ] }
- 示例3:给用户授予桶的只读权限(限定目录)
此策略表示用户只能下载桶obs-example中“my-project/”目录下的所有对象,其他目录下的对象虽然可以列举,但无法下载。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject", "obs:bucket:ListBucket" ], "Resource": [ "obs:*:*:object:obs-example/my-project/*", "obs:*:*:bucket:obs-example" ] } ] }
- 示例4:给用户授予桶的读写权限(限定目录)
此策略表示用户可以对桶obs-example中“my-project”目录下的所有的对象进行列举、下载、上传和删除。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject", "obs:object:ListMultipartUploadParts", "obs:bucket:ListBucket", "obs:object:DeleteObject", "obs:object:PutObject" ], "Resource": [ "obs:*:*:object:obs-example/my-project/*", "obs:*:*:bucket:obs-example" ] } ] }
- 示例5:给用户授予桶的所有权限
此策略表示用户可以对桶obs-example进行任何操作。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:*:*" ], "Resource": [ "obs:*:*:bucket:obs-example", "obs:*:*:object:obs-example/*" ] } ] }
- 示例6:拒绝用户上传对象
拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。
如果您给用户授予OBS OperateAccess的系统策略,但不希望用户拥有OBS OperateAccess中定义的上传对象的权限,您可以创建一条拒绝上传对象的自定义策略,然后同时将OBS OperateAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以执行除了上传对象外OBS OperateAccess允许的所有操作。拒绝策略示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "obs:object:PutObject" ] } ] }
- 示例7:给用户授予指定桶的修改桶存储类别权限以及桶内指定对象的删除权限
此策略表示用户可以对桶obs-example进行修改桶存储类别,以及对桶obs-example中“my-object.txt”对象进行删除。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListAllMyBuckets", "obs:bucket:ListBucket" ] }, { "Effect": "Allow", "Action": [ "obs:object:DeleteObject", "obs:bucket:PutBucketStoragePolicy" ], "Resource": [ "OBS:*:*:object:obs-example/my-object.txt", "OBS:*:*:bucket:obs-example" ] } ] }