IAM权限简介
如果您需要对您的对象存储(ZOS)资源进行精细的权限管理,您可以使用统一身份认证(Identity and Access Management,简称IAM)服务。IAM是一种基于用户的授权策略。通过设置IAM策略,您可以控制用户访问您名下哪些资源的权限,例如限制您的用户只拥有对某一个桶的读权限等。
如果当前的天翼云账号已经能满足您的要求,您可以跳过本章节,不需要创建独立的IAM用户,不影响您使用ZOS的其他功能。
默认情况下,天翼云主账号拥有对资源的完全控制权限,而主账号创建的IAM用户没有任何权限。主账号将IAM用户加入用户组,并给用户组授予策略或角色之后,IAM用户获得相应的权限,这一过程称为授权。授权后,IAM用户就可以基于被授予的权限对云服务进行操作。
使用场景
以下场景,您可以使用IAM进行权限控制。
- 对同一账号下的不同IAM用户授予相同权限。
- 对所有ZOS资源或者多个桶配置相同权限。
- 配置ZOS服务级别的权限,例如列举某一账号下的所有桶。
约束与限制
- 对象存储IAM权限管理支持的区域请参见产品能力地图。
操作步骤
- 创建用户组和授权
在IAM控制台创建用户组,并授予权限。 - 创建IAM用户和登录
在IAM控制台创建用户,并将其加入上一步创建的用户组。
IAM策略
在向用户组授权时,您需要选择授权策略。授权策略有两种:系统策略和自定义策略。
IAM为各云服务预置了系统策略,方便您快速完成基础权限配置。ZOS为您预置了zos admin和zos viewer两个系统策略。其中,zos admin拥有对ZOS资源的完全控制权限,zos viewer拥有对ZOS资源的GET和LIST类权限。
如果系统预置的系统权限不满足您的授权要求,您还可以创建自定义策略。
目前支持以下两种方式创建自定义策略:
- 可视化视图:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源等策略内容,可自动生成策略。
- JSON视图:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
为帮助您创建自定义策略,下面将介绍IAM策略语法、ZOS授权项(Action)和资源(Resource)。
策略语法
策略结构:包括Version(策略版本号)和Statement(策略权限语句)两部分,其中Statement可以有多个,表示不同的授权项。
策略参数:包含Version和Statement两部分。Statement(策略权限语句)中包含授权效果(Effect)、授权项(Action)、资源(Resource)等信息。
关于策略结构和参数的详细介绍,请参考IAM关于策略语法的介绍。
授权项(Action)
Action分为Service级别、Bucket级别以及Object级别。
- Service级别
权限 S3 API Action 列举全部桶 ListBuckets zos:AllMyBuckets:List 创建桶 CreateBucket zos:Bucket:Create 获取AK/SK 无 zos:Keys:Get 资源包管理 无 zos:ResourceBundles:Get 查看接入管理(VPC) 无 zos:VPC:Get 设置接入管理(VPC) 无 zos:VPC:Put 用户数据统计 无 zos:UserUsage:Get 获取桶数据统计 无 zos:BucketUsage:Get 查询Endpoint 无 zos:Endpoint:Get 查询桶的自定义域名 无 zos:BucketDomain:Get 设置桶的自定义域名 无 zos:BucketDomain:Put 获取桶位置 无 zos:BucketLocation:Get 设置桶配额 无 zos:BucketQuota:Put 设置访问控制 无 zos:AccessControl:Put
- Bucket级别
权限 S3 API Action 查询桶详情 无 zos:BucketInfo:Get 删除桶 DeleteBucket zos:Bucket:Delete 删除桶策略 DeleteBucketPolicy zos:BucketPolicy:Delete 删除桶静态网站托管配置 DeleteBucketWebsite zos:BucketWebsite:Delete 删除桶跨域复制规则 DeleteReplicationConfiguration zos:ReplicationConfiguration:Delete 获取桶ACL GetBucketAcl zos:BucketAcl:Get 获取桶CORS配置 GetBucketCORS zos:BucketCORS:Get 获取桶加密配置 GetBucketEncryption zos:BucketEncryption:Get 获取桶日志记录 GetBucketLogging zos:BucketLogging:Get 获取桶事件通知配置 GetBucketNotification zos:BucketNotification:Get 获取桶合规保留策略 GetBucketObjectLockConfiguration zos:BucketObjectLockConfiguration:Get 获取桶策略 GetBucketPolicy zos:BucketPolicy:Get 获取桶标签 GetBucketTagging zos:BucketTagging:Get 获取桶版本状态 GetBucketVersioning zos:BucketVersioning:Get 获取桶静态网站托管配置/数据回源 GetBucketWebsite zos:BucketWebsite:Get 获取桶请求者付费配置 GetBucketRequestPayment zos:BucketRequestPayment:Get 获取桶清单配置 GetInventoryConfiguration zos:InventoryConfiguration:Get 获取桶生命周期规则 GetLifecycleConfiguration zos:LifecycleConfiguration:Get 获取桶跨域复制规则 GetReplicationConfiguration zos:ReplicationConfiguration:Get 获取桶的访问追踪状态 GetBucketAccessMonitor zos:BucketAccessMonitor:Get 设置桶ACL PutBucketAcl zos:BucketAcl:Put 设置桶CORS配置 PutBucketCORS zos:BucketCORS:Put 设置桶加密配置 PutBucketEncryption zos:BucketEncryption:Put 设置桶日志记录 PutBucketLogging zos:BucketLogging:Put 设置桶事件通知配置 PutBucketNotification zos:BucketNotification:Put 设置桶合规保留策略 PutBucketObjectLockConfiguration zos:BucketObjectLockConfiguration:Put 设置桶策略 PutBucketPolicy zos:BucketPolicy:Put 设置桶标签 PutBucketTagging zos:BucketTagging:Put 设置桶多版本 PutBucketVersioning zos:BucketVersioning:Put 设置桶静态网站托管配置 PutBucketWebsite zos:BucketWebsite:Put 设置桶请求者付费配置 PutBucketRequestPayment zos:BucketRequestPayment:Put 设置桶清单配置 PutInventoryConfiguration zos:InventoryConfiguration:Put 设置桶生命周期规则 PutLifecycleConfiguration zos:LifecycleConfiguration:Put 设置桶跨域复制规则 PutReplicationConfiguration zos:ReplicationConfiguration:Put 设置桶的访问追踪状态 PutBucketAccessMonitor zos:BucketAccessMonitor:Put 列举桶内对象 ListBucket zos:Bucket:List 列举桶内多版本对象 ListBucketVersions zos:BucketVersions:List
- Object级别
权限 S3 API Action 获取对象内容及元数据 GetObject zos:Object:Get 上传对象 PutObject zos:Object:Put 删除对象 DeleteObject zos:Object:Delete 删除对象标签 DeleteObjectTagging zos:ObjectTagging:Delete 删除指定版本对象 DeleteObjectVersion zos:ObjectVersion:Delete 删除指定版本对象标签 DeleteObjectVersionTagging zos:ObjectVersionTagging:Delete 获取对象ACL GetObjectAcl zos:ObjectAcl:Get 设置对象ACL PutObjectAcl zos:ObjectAcl:Put 获取对象依法保留 GetObjectRetention zos:ObjectRetention:Get 设置对象依法保留 PutObjectRetention zos:ObjectRetention:Put 获取对象保留期限策略 GetObjectLegalHold zos:ObjectLegalHold:Get 设置对象保留期限策略 PutObjectLegalHold zos:ObjectLegalHold:Put 获取指定版本对象内容及元数据 GetObjectVersion zos:ObjectVersion:Get 获取指定版本对象ACL GetObjectVersionAcl zos:ObjectVersionAcl:Get 设置指定版本对象ACL PutObjectVersionAcl zos:ObjectVersionAcl:Put 获取对象标签 GetObjectTagging zos:ObjectTagging:Get 设置对象标签 PutObjectTagging zos:ObjectTagging:Put 获取指定版本对象标签 GetObjectVersionTagging zos:ObjectVersionTagging:Get 设置指定版本对象标签 PutObjectVersionTagging zos:ObjectVersionTagging:Put 列举桶中已初始化分段上传任务 ListBucketMultipartUploads zos:BucketMultipartUploads:List 列举已上传未合并段 ListMultipartUploadParts zos:MultipartUploadParts:List 取消分段上传任务 AbortMultipartUpload zos:MultipartUpload:Abort 解冻归档存储对象 RestoreObject zos:Object:Restore
资源(Resource)
在ZOS中,资源包括桶和对象,支持通配符星号(*)。您可以在创建自定义策略时,通过指定资源路径来选择特定资源。单条自定义策略允许包含多个Resource。
资源类型 资源路径 说明 桶 ctrn:zos:::{V#BucketName} 通过参数BucketName指定桶名称,支持通配符*。
例1:ctrn:zos:::* 表示对任意桶指定权限。
例2:ctrn:zos:::mybucket 表示对mybucket桶指定权限。对象 ctrn:zos:::{V#BucketName}/{V#ObjectName} 通过参数BucketName指定桶名称,参数ObjectName指定对象名称,支持通配符*。
例1:ctrn:zos:::mybucket/* 表示mybucket桶的所有对象。
例2:ctrn:zos:::mybucket/mydir/* 表示mybucket桶中mydir目录下的所有对象。
自定义策略示例
示例1:给用户授予ZOS的所有权限
此策略表示用户可以对ZOS进行任何操作。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"zos:*:*"
],
"Resource": [
"*"
]
}
]
}
示例2:给用户授予桶的全部权限
此策略表示用户可以对mybucket桶进行任何操作。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"zos:*:*"
],
"Resource": [
"ctrn:zos:::mybucket/*",
"ctrn:zos:::mybucket"
]
}
]
}
示例3:给用户授予桶的只读权限
此策略表示用户可以对mybucket桶进行读操作。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"zos:*:Get",
"zos:*:List"
],
"Resource": [
"ctrn:zos:::mybucket/*",
"ctrn:zos:::mybucket"
]
}
]
}
示例4:给用户授予对ZOS的所有资源进行GET类操作的权限
此策略表示用户可以对ZOS进行任何GET类的操作。
{
"Version": "1.1",
"Statement": [
{
"Action": [
"zos:*:Get"
],
"Effect": "Allow"
}
]
}
示例5:给用户授予某个桶的全部权限,同时禁止创建新桶和删除桶
此策略表示用户可以对mybucket桶进行任何操作,同时禁止创建新桶和删除桶。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"zos:*:*"
],
"Resource": [
"ctrn:zos:::mybucket/*",
"ctrn:zos:::mybucket"
]
},
{
"Effect": "Deny",
"Action": [
"zos:Bucket:Create",
"zos:Bucket:Delete"
],
"Resource": [
"*"
]
}
]
}