授予RAM子账户OSS细粒度的访问权限
概述
本文主要介绍在使用阿里云对象存储OSS过程中,在以下场景中,如何授权子用户和STS临时用户通过OSS SDK、OSS命令行或者OSS控制台管理OSS资源的部分权限,进行细粒度的权限控制。
授权RAM用户拥有一个存储空间的全部权限
授权RAM用户读取一个存储空间中资源的权限
授权RAM用户通过特定的IP地址访问OSS资源
授予RAM用户访问OSS目录中资源的权限
详细信息
授权RAM用户
对RAM用户授予OSS细粒度的访问权限,具体操作如下:
创建自定义权限策略,请参见创建自定义权限策略。
登录OSS管理控制台,创建RAM用户并进行授权,以下是具体操作步骤:
说明说明:由于主账号的
Access Key
对于OSS的Bucket控制权限级别较大,使用安全性不高,因此建议使用子账号赋予OSS的不同权限,可以安全地限制对产品的使用,同时也可实现对OSS的细粒度的访问授权限制。登录RAM控制台,选择用户管理>新建用户,创建RAM用户,详情请参见创建RAM用户。
登录RAM控制台,选择对应的RAM用户,单击授权,进行授权操作。具体操作方法请参见为RAM用户授权。
登录RAM控制台,单击策略管理。在策略管理页面,可通过系统授权策略和自定义授权策略页面,分别查看已有的系统和自定义策略,单击创建权限策略,进入创建授权策略页面。具体操作方法请参见创建自定义权限策略。
对创建的RAM用户授权,授权时选择刚刚创建的自定义权限策略。关于常见的自定义授权策略,请参考RAM Policy常见示例。
授权策略
授权RAM用户拥有一个名为myphotos的存储空间的全部权限
以下主要介绍通过OSS SDK管理Bucket,或者通过OSS管理控制台或客户端管理Bucket的授权策略:
如果您需要授权一个子用户通过OSS SDK、OSS命令行管理Bucket中的资源,那么您需要创建一条自定义授权策略,具体策略如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] } ] }
如果您希望被授权的子用户能够通过OSS管理控制台或客户端进行操作,则需要授权ListBucket权限,具体策略如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListBuckets", "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] } ] }
授权RAM用户列出并读取一个存储空间中的资源
可通过OSS SDK、OSS命令行或者OSS控制台完成,具体内容如下所示:
授权RAM用户通过OSS SDK和OSS命令行工具读取一个存储空间中的资源,存储空间名称为
myphotos
,具体策略如下:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListBuckets", "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:myphotos" }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:myphotos/*" } ] }
授权RAM用户能够通过OSS控制台和客户端列出并读取一个存储空间中的资源。
说明说明:为了操作体验的优化,登录OSS控制台时,OSS控制台会额外调用ListBuckets、GetBucketAcl和GetObjectAcl,用来确定存储空间属性是公开还是私有。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:myphotos" }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:myphotos/*" } ] }
授权RAM用户通过特定的IP地址访问OSS
在Allow授权中增加IP限制:允许通过
192.168.0.0/16
,172.12.0.0
/16
两个IP段读取myphotos
中的信息。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ], "Condition":{ "IpAddress": { "acs:SourceIp": ["192.168.0.0/16", "172.12.0.0/16"] } } } ] }
在Deny授权中增加IP限制:如果源IP不在192.168.0.0/16中,则禁止对OSS执行任何操作。
说明说明:因为权限策略的鉴权规则是Deny优先,所以通过192.168.0.0/16以外的IP地址访问myphotos中的内容时,OSS会提示没有权限。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] }, { "Effect": "Deny", "Action": "oss:*", "Resource": [ "acs:oss:*:*:*" ], "Condition":{ "NotIpAddress": { "acs:SourceIp": ["192.168.0.0/16"] } } } ] }
设置OSS目录级别的授权
假设用于存放照片的存储空间名为myphotos,该存储空间中的目录代表照片的拍摄地,每个拍摄地目录中又有年份子目录。
myphotos[Bucket]
├── beijing
│ ├── 2014
│ └── 2015
├── hangzhou
│ ├── 2013
│ ├── 2014
│ └── 2015 //授予此目录只读权限
└── qingdao
├── 2014
└── 2015
若要授权RAM用户访问myphotos/hangzhou/2015/
目录的只读权限。目录级别的授权属于授权的高级功能,根据使用场景不同,授权策略的复杂程度也不同,以下几种场景可供参考:
场景一:授予RAM用户读取文件内容的权限,不需要列出文件的权限。RAM用户可以通过完整的文件路径读取文件内容,通常会将这样的权限授予应用程序。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] } ] }
场景二:授权RAM用户使用OSS命令行工具访问
myphotos/hangzhou/2015/
目录,并列出目录中文件的权限。RAM用户可以使用OSS命令行工具或API直接获取目录信息,通常会将这样的权限授予软件开发者。说明说明:此场景需要新增ListObjects的权限。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:myphotos" ], "Condition":{ "StringLike":{ "oss:Prefix":"hangzhou/2015/*" } } } ] }
场景三: 授予RAM用户使用OSS控制台访问目录。RAM用户使用可视化的OSS客户端访问
myphotos/hangzhou/2015/
目录,可视化的客户端类似Windows文件管理器,RAM用户可以从根目录开始,逐层进入要访问的目录。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:myphotos" ], "Condition": { "StringLike": { "oss:Delimiter": "/", "oss:Prefix": [ "", "hangzhou/", "hangzhou/2015/*" ] } } } ] }
说明说明:此场景需要新增以下权限。
列出所有
Bucket
的权限。列出
myphotos
下目录的权限。列出
myphotos/hangzhou
下的目录的权限。
其他策略
更多的授权设置,请参见权限策略示例库。
适用于
对象存储OSS