[图片]
使用RAM对OSS进行权限管理
KB: 58905
更新时间:2019-07-22 17:10:37
本页目录
前提条件
基本信息
将自定义策略授权给RAM用户
OSS授权样例
本文介绍了通过RAM的权限管理功能,创建相应的权限策略,从而对对象存储(OSS)进行权限管理,以满足RAM用户操作OSS的多种需求。
前提条件
请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册。详情请参见账号注册。
基本信息
使用RAM对OSS进行权限管理前,需先了解几个常用的权限策略。
权限策略 描述
AliyunOSSFullAccess 为RAM用户授予OSS的完全管理权限。
AliyunOSSReadOnlyAccess 为RAM用户授予OSS的只读访问权限。
说明 查看OSS的权限定义,请参见OSS产品文档中的权限控制概述。
将自定义策略授权给RAM用户
根据下述OSS授权样例创建相应的自定义策略。
详情请参见创建自定义策略。
找到创建好的权限策略,单击其权限策略名称。
单击引用记录 > 新增授权。
被授权主体处输入需要授权的用户名称或ID。
单击确定。
说明 您也可以直接对用户或用户组授予创建好的权限策略,详情请参见为RAM用户授权和为用户组授权。
OSS授权样例
示例1:授权RAM用户完全管理某个Bucket的权限。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:myphotos",
"acs:oss:*:*:myphotos/*"
]
}
]
}
示例2:授权RAM用户列出并读取一个Bucket中的资源。
授权RAM用户通过OSS SDK或OSS命令行工具列出并读取一个Bucket中的资源。Bucket名称为:myphotos。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ListObjects",
"Resource": "acs:oss:*:*:myphotos"
},
{
"Effect": "Allow",
"Action": "oss:GetObject",
"Resource": "acs:oss:*:*:myphotos/*"
}
]
}
授权RAM用户能够通过OSS控制台进行操作。
说明 用户登录OSS控制台时,为了操作体验的优化,OSS控制台会额外调用ListBuckets操作,以及GetBucketAcl和GetObjectAcl,以确定bucket属性是公开还是私有。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListBuckets",
"oss:GetBucketStat",
"oss:GetBucketInfo",
"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/*"
}
]
}
示例3:授权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: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执行任何操作。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListBuckets",
"oss:GetBucketStat",
"oss:GetBucketInfo",
"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"]
}
}
}
]
}
说明 因为Policy的鉴权规则是Deny优先,所以访问者从192.168.0.0/16以外的IP地址访问myphotos中的内容时,OSS服务会提示没有权限。
示例4:OSS目录级别的授权。
假设用于存放照片的Bucket:myphotos。这个Bucket下有一些目录,代表照片的拍摄地,每个拍摄地目录下又有年份子目录。
myphotos[Bucket]
├── beijing
│ ├── 2014
│ └── 2015
├── hangzhou
│ ├── 2013
│ ├── 2014
│ └── 2015 //授予此目录只读权限
└── qingdao
├── 2014
└── 2015
若要授权RAM用户访问myphotos/hangzhou/2015/目录的只读权限。目录级别的授权属于授权的高级功能,根据使用场景不同,授权策略的复杂程度也不同,以下几种场景可供参考。
场景1:授予RAM用户读取文件内容的权限,不需要列出文件的权限。
RAM用户知道文件的完整路径,可以使用完整的文件路径直接去读取文件内容,通常会将这样的权限授予应用程序。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject"
],
"Resource": [
"acs:oss:*:*:myphotos/hangzhou/2015/*"
]
}
]
}
场景2:授权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/*"
}
}
}
]
}
场景3: 授予RAM用户使用OSS控制台访问目录。
RAM用户使用可视化的OSS客户端访问目录myphotos/hangzhou/2015/,可视化的客户端类似Windows文件管理器,RAM用户可以从根目录开始,一层一层的进入要访问的目录,此场景是最易用的场景。
此场景需要新增以下权限:
列出所有Bucket的权限
列出myphotos下目录的权限。
列出myphotos/hangzhou下的目录的权限。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListBuckets",
"oss:GetBucketStat",
"oss:GetBucketInfo",
"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/*"
]
}
}
}
]
}