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

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

更新时间:2020-07-02 17:31:31

概述

本文主要介绍不同场景中,如何授予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的存储空间

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "oss:*",
            "Resource": [
                "acs:oss:*:*:myphotos",
                "acs:oss:*:*:myphotos/*"
            ]
        }
    ]
}

授权RAM用户列出并读取一个存储空间中的资源

可通过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