更新时间:2025-12-19 GMT+08:00
分享

IAM权限配置概述

IAM权限简介

默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略和角色,才能使得用户组中的用户获得策略定义的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。

对于OBS,IAM权限作用于OBS所有的桶和对象。如果要授予IAM用户操作OBS资源的权限,则需要向IAM用户所属的用户组授予一个或多个OBS权限。

如果您通过IAM授权时,没有指定具体的桶和对象,那么使用IAM授予的权限对所有桶生效。

目前IAM支持两类授权,一类是角色与策略授权,另一类为身份策略授权。

两者有如下的区别和关系:

表1 两类授权的区别

名称

核心关系

涉及的权限

授权方式

适用场景

角色与策略授权

用户-权限-授权范围

  • 系统角色
  • 系统策略
  • 自定义策略

为主体授予角色或策略

核心关系为“用户-权限-授权范围”,每个用户根据所需权限和所需授权范围进行授权,无法直接给用户授权,需要维护更多的用户组,且支持的条件键较少,难以满足细粒度精确权限控制需求,更适用于对细粒度权限管控要求较低的中小企业用户。

身份策略授权

用户-策略

  • 系统身份策略
  • 自定义身份策略
  • 为主体授予身份策略
  • 身份策略附加至主体

核心关系为“用户-策略”,管理员可根据业务需求定制不同的访问控制策略,能够做到更细粒度更灵活的权限控制,新增资源时,对比角色与策略授权,基于身份策略的授权模型可以更快速地直接给用户授权,灵活性更强,更方便,但相对应的,整体权限管控模型构建更加复杂,对相关人员专业能力要求更高,因此更适用于中大型企业。

例如:如果需要对IAM用户授予可以创建华北-北京四区域的ECS和华南-广州区域的OBS的权限,基于角色与策略授权的场景中,由于涉及到两个需要授权的区域,所以管理员需要创建两个自定义策略,并且为IAM用户同时授予这两个自定义策略才可以实现权限控制。在基于身份策略授权的场景中,管理员仅需要创建一个自定义身份策略,在策略中通过条件键“g:RequestedRegion”的配置即可达到策略对于授权区域的控制。将身份策略附加主体或为主体授予该身份策略即可获得相应权限,权限配置方式更细粒度更灵活。

两种授权场景下的策略/身份策略、授权项等并不互通,推荐使用身份策略进行授权。

关于IAM的详细介绍,请参见IAM产品介绍

IAM权限应用场景

IAM主要面向对同账号下IAM用户授权的场景:

  • 控制账号下整个云资源的权限时,使用IAM权限授权。
  • 控制账号下OBS所有的桶和对象的权限时,使用IAM权限授权。
  • 控制账号下OBS指定资源的权限时,使用IAM权限授权。
  • 授予IAM用户创建桶和列举桶的权限。

策略结构&语法

策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。

图1 策略结构

策略语法,示例:

{
	"Version": "5.0",
	"Statement": [
                {
			"Effect": "Allow",
			"Action": [
				"obs:bucket:headBucket",
				"obs:bucket:listBucket",
				"obs:bucket:getBucketLocation"
			],
			"Resource": [
				"obs:*:*:bucket:*"
			],
			"Condition": {
				"StringEquals": {
					"g:UserName": ["specialCharacter"]
				},
				"Bool": {
					"g:MFAPresent": ["true"]
				}
			}
		}
	]
}
表2 策略语法参数

参数

说明

Version

标识策略的版本号:
  • 1.0:代表基于角色的访问控制。详情请参阅角色语法介绍
  • 1.1:代表基于策略的访问控制。详情请参阅策略语法介绍
  • 5.0:身份策略。身份策略授权模型相较于基于角色和策略授权模型能够做到更细粒度、更精准安全的权限控制。身份策略核心关系为“用户-身份策略”。新增资源时,对比角色与策略授权,基于身份策略的授权模型可以更快速地直接给用户授权,灵活性更强,更方便,但相对应的,整体权限管控模型构建更加复杂,对相关人员专业能力要求更高,因此更适用于中大型企业。详细的身份策略请参见身份策略概述

Statement

策略授权语句,描述策略的详细信息,包含Sid(语句ID)、Effect(效果)、Action(动作)、Resource(资源)和Condition(条件)。其中Resource和Condition为可选。
  • Sid(语句ID)

    Sid(Statement ID)表示语句的可选标识符,一个由零个或多个字符组成的字符串。

  • Effect(效果)

    作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。

  • Action(动作)

    对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。OBS只有两种资源类型:bucket和object。

    详细的Action描述请参见桶相关授权项对象相关授权项

  • Resource(资源)

    策略所作用的资源,格式为:服务名:region:domainId:资源类型:资源路径,支持通配符号*,通配符号表示所有。在JSON视图中,不带Resource表示对所有资源生效。

    Resource支持以下字符:-_0-9a-zA-Z*./\,如果Resource中包含不支持的字符,请采用通配符号*。

    OBS是全局级服务,region填“*”;domainId表示资源拥有者的账号ID,建议填写“*”简单地表示所填资源的账号ID。

    示例:

    • "obs:*:*:bucket:*": 表示所有的OBS桶。
    • "obs:*:*:object:my-bucket/my-object/*": 表示桶my-bucket中“my-object”目录下的所有对象。
  • Condition(条件)

    您可以在创建自定义策略时,通过Condition元素来控制策略何时生效。Condition包括条件键和运算符,条件键表示策略语句的Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,全局级条件键分为基于策略授权的全局级条件键基于身份策略授权的全局级条件键。服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。

    OBS通过IAM预置了一组条件键,例如,您可以先使用obs:SourceIp条件键检查请求者的IP地址,然后再允许执行操作。

    OBS支持的条件键和运算符与桶策略的Condition一致,在IAM配置时需要在前面加上“obs:”。详细的Condition介绍请参见桶策略参数说明

    Condition的条件值仅支持以下字符:-,./ a-zA-Z0-9_@#$%&,如果条件值中包含不支持的字符,请考虑使用模糊匹配的条件运算符,如:StringMatch等。

    示例:

    • "StringEndWithIfExists":{"g:UserName":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。
    • "StringLike":{"obs:prefix":["private/"]}:表示在列举桶内对象时,需要指定prefix为private/或者包含private/这一子字符串。
  • Resource(资源)级别细粒度授权特性会逐步在各个区域上线,需要使用该特性时请确保桶所在区域已经支持。
  • 使用Resource(资源)级别细粒度授权特性前,请提交工单到OBS,申请开通Resource(资源)级别细粒度授权特性白名单。

相关文档