文档中心 > 对象存储 OSS

授予RAM子账户OSS细粒度的访问权限

更新时间: 访问次数:1934

概述

本文主要介绍在使用阿里云对象存储OSS过程中,在以下场景中,如何授权子用户和STS临时用户通过OSS SDK、OSS命令行或者OSS控制台管理OSS资源的部分权限,进行细粒度的权限控制。

  • 授权RAM用户拥有一个名存储空间的全部权限
  • 授权RAM用户读取一个存储空间中资源的权限
  • 授权RAM用户通过特定的IP地址访问OSS资源
  • 授予RAM用户访问OSS目录中资源的权限

详细信息

授权RAM用户

对RAM用户授予OSS细粒度的访问权限,具体操作如下:

  1. 创建自定义权限策略,请参见创建自定义策略
  2. 登录OSS管理控制台,创建RAM用户并进行授权,以下是具体操作步骤:
    说明:由于主账号的 Access Key对于OSS的Bucket控制权限级别较大,使用安全性不高,因此建议使用子账号赋予OSS的不同权限,可以安全地限制对产品的使用,同时也可实现对OSS的细粒度的访问授权限制。
    1. 登录RAM控制台,选择用户管理>新建用户,创建RAM用户。具体操作方法请参见RAM用户操作手册中的创建RAM用户说明

    2. 登录RAM控制台,选择对应的RAM用户,单击授权,进行授权操作。具体操作方法请参见RAM授权帮助文档

    3. 登录RAM控制台,单击策略管理。策略管理页面,可通过系统授权策略自定义授权策略页面,分别查看已有的系统和自定义策略,单击新建授权策略,进入创建授权策略页面。具体操作方法请参见授权策略管理

  3. 对创建的RAM用户授权,授权时选择刚刚创建的自定义权限策略。关于常见的自定义授权策略,请参考授权策略

授权策略

授权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/16172.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

FAQ

关于此文档暂时还没有FAQ
返回
顶部