全部产品
云市场
    授予RAM子账户OSS细粒度的访问权限

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

更新时间:2019-12-03 16:00:46

概述

本文主要介绍不同场景中,如何授予RAM子账户OSS细粒度的访问权限。

 

详细信息

在阿里云OSS管理控制台中,可以使用直观的界面进行相应的操作。除了使用阿里云主账号,还可以使用子账户RAM用户登录OSS管理控制台。由于主账号的Access Key对于OSS的Bucket控制权限级别较大,使用安全性不高,因此建议使用子账号赋予OSS的不同权限,可以安全地限制对产品的使用,同时也可实现对OSS的细粒度的访问授权限制。具体授权操作步骤如下。

  1. 登录RAM控制台,选择 用户管理 > 新建用户,创建RAM用户。具体操作方法请参考RAM用户操作手册中的 创建RAM用户说明

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

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

  4. 设置常见的细粒度自定义访问权限,如下对不同场景的授权策略进行举例说明。

    • 授权RAM用户完全管理一个名为myphotos的存储空间。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "oss:*",
                  "Resource": [
                      "acs:oss:*:*:myphotos",
                      "acs:oss:*:*:myphotos/*"
                  ]
              }
          ]
      }
    • 授权RAM用户列出并读取一个存储空间中的资源。
      • 授权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