阿里云 OSS 对象存储,测试访问策略

来源:互联网 发布:网络监控头调变焦 编辑:程序博客网 时间:2024/06/05 20:54

阿里云 OSS 测试

为方便管理 OSS 的 Bucket,给特定的用户设立了权限,只能在某一特定的目录(实际上 OSS 没有目录,所有的文件都是平级的)下进行读写操作,可以查看其他的 object,但是不能读写。

访问控制策略

参考阿里云工单

{        "Version": "1",        "Statement": [            {                "Effect": "Allow",                "Action": [                    "oss:ListBuckets",                ],                "Resource": [                    "acs:oss:*:*:*"                ]            },            {                "Effect": "Allow",                "Action": [                    "oss:*"                ],                "Resource": [                    "acs:oss:*:*:bucket-name/gsdata/*"                ]            },            {                "Effect": "Allow",                "Action": [                    "oss:ListObjects"                ],                "Resource": [                    "acs:oss:*:*:bucket-name"                ],                "Condition": {                    "StringLike": {                        "oss:Delimiter": "/",                        "oss:Prefix": [                            ""                        ]                    }                }            },            {                "Effect": "Allow",                "Action": [                    "oss:ListObjects"                ],                "Resource": [                    "acs:oss:*:*:bucket-name"                ],                "Condition": {                    "StringLike": {                        "oss:Prefix": [                            "gsdata/*"                        ]                    }                }            }        ]}

检测权限

更改完成权限之后,需要测试权限是否设置正确。在不让测试或开发同事参与的情况下,可以使用 Python-SDK 进行测试。

个人认为,只需要测试上传、删除、下载文件即可。一般不需要给其他用户 bucket 级别的权限。

上传 object

# -*- coding: utf-8 -*-import oss2endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'auth = oss2.Auth('ID', 'key')bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'bucket-name',enable_crc=False)bucket.put_object('bucket-name/file-name','content')

上传本地文件

# -*- coding: utf-8 -*-import oss2endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'auth = oss2.Auth('ID', 'key')bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'bucket-name',enable_crc=False)# rb 并非文件,是固定的字符串with open('/path/filename', 'rb') as fileobj:    bucket.put_object('object-name/file-name', fileobj)

下载 object

# -*- coding: utf-8 -*-import oss2endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'auth = oss2.Auth('ID', 'key')bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'bucket-name',enable_crc=False)# 下载 OSS 中的 object-name/file-name 到本地的 /usr/local/python/filenamebucket.get_object_to_file('object-name/file-name', '/usr/local/python/filename')

删除 object

# -*- coding: utf-8 -*-import oss2endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'auth = oss2.Auth('ID', 'KEY')bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'bucket-name',enable_crc=False)bucket.delete_object('object-name/file-name')