作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.对象存储概述
1.对象存储的访问方式
如上图所示,前面我们学习基于s3cmd和swift均可以使用命令后正常访问对象存储网关,但作为OSS对象存储,也支持基于"http|https"方式来访问对象。
如下图所示,默认情况下WebUI是拒绝访问的,因为我们需要通过专用的访问策略进行功能验证。
对于OSS存储来说,我们资源对象访问策略,它是以存储桶"BACKUET"为基础单位,安全策略等粒度有些大。
参考链接:
https://docs.ceph.com/en/reef/radosgw/
https://docs.ceph.com/en/reef/radosgw/bucketpolicy/
2.基于http方式访问对象存储注意事项
- 资源对象的访问方式:
http还是https,依赖于rgw的基本配置。
如果是s3的话,需要在配置文件设定的时候,启用https功能。
- 资源对象的访问控制:
通过定制策略的方式来实现,比如上传策略,下载策略,修改策略等。
- 资源对象的跨域问题:
通过定义cors的方式来实现。
对于互联网中的资源对象,浏览器在访问的时候,默认会有跨域的安全限制。
比如"localhost"和"127.0.0.1"浏览器默认并不是同一个主机,尽管ip和域名可以进行相互解析。
如果想要启用域名和ip相同的话,则需要解决跨域问题,这是作为开发的基础知识点。
- 资源对象在浏览器端端缓存机制:
rgw端基本配置定制,因为我们对象存储大多是不经常变动的数据,比如图片,视频,音乐,文件等。
推荐阅读:
https://docs.ceph.com/en/latest/radosgw/
https://docs.ceph.com/en/latest/radosgw/bucketpolicy/
https://docs.ceph.com/en/latest/radosgw/s3/
3.查看存储桶默认策略
[root@ceph141 ~]# swift list
yinzhengjie-rgw
[root@ceph141 ~]#
[root@ceph141 ~]# s3cmd info s3://yinzhengjie-rgw
s3://yinzhengjie-rgw/ (bucket):
Location: default
Payer: BucketOwner
Expiration Rule: none
Policy: none
CORS: none
ACL: 尹正杰: FULL_CONTROL
[root@ceph141 ~]#
[root@ceph141 ~]# swift stat yinzhengjie-rgw
Account: v1
Container: yinzhengjie-rgw
Objects: 3
Bytes: 983
Read ACL:
Write ACL:
Sync To:
Sync Key:
X-Timestamp: 1725035977.26537
X-Container-Bytes-Used-Actual: 12288
X-Storage-Policy: default-placement
X-Storage-Class: STANDARD
Last-Modified: Fri, 30 Aug 2024 16:39:37 GMT
X-Trans-Id: tx00000fdf1f164b67a4cd0-0066d1fa85-12179-default
X-Openstack-Request-Id: tx00000fdf1f164b67a4cd0-0066d1fa85-12179-default
Accept-Ranges: bytes
Content-Type: text/plain; charset=utf-8
Connection: Keep-Alive
[root@ceph141 ~]#
二.定制策略
1.定制访问策略文件
[root@ceph141 ~]# cat yinzhengjie-policy.json
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "*"
}]
}
[root@ceph141 ~]#
相关参数说明:
Statement:
表示定义属性。
Effect:
指定权限,比如: Allow,Deny等。
Principal:
主体人,主要针对哪些用户,此处为指定"*"表示所有用户,看官网的意思是可以指定具体的用户进行策略配置。
Action:
对资源对象可以支持的操作,详情请参考官网。
https://docs.ceph.com/en/latest/radosgw/bucketpolicy/#limitations
Resource:
策略管理等资源对象,其中"*"表示的是所有资源。如果想要匹配部分对象,可以使用列表的方式,比如: ["*.jpg","*.png"]。
2.应用访问策略
1.应用访问策略
[root@ceph141 ~]# cat /root/yinzhengjie-policy.json
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "*"
}]
}
[root@ceph141 ~]#
[root@ceph141 ~]# s3cmd setpolicy /root/yinzhengjie-policy.json s3://yinzhengjie-rgw
s3://yinzhengjie-rgw/: Policy updated
[root@ceph141 ~]#
2.检查访问策略是否生效
[root@ceph141 ~]# s3cmd info s3://yinzhengjie-rgw # 注意观察Policy字段
s3://yinzhengjie-rgw/ (bucket):
Location: default
Payer: BucketOwner
Expiration Rule: none
Policy: {
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "*"
}]
}
CORS: none
ACL: 尹正杰: FULL_CONTROL
[root@ceph141 ~]#
[root@ceph141 ~]# swift stat yinzhengjie-rgw # 通过swift工具观察存储桶状态貌似没啥变化。
Account: v1
Container: yinzhengjie-rgw
Objects: 3
Bytes: 983
Read ACL:
Write ACL:
Sync To:
Sync Key:
X-Timestamp: 1725035977.26537
X-Container-Bytes-Used-Actual: 12288
X-Storage-Policy: default-placement
X-Storage-Class: STANDARD
Last-Modified: Sat, 31 Aug 2024 00:05:26 GMT
X-Trans-Id: tx00000071b010f5f594445-0066d25e64-14897-default
X-Openstack-Request-Id: tx00000071b010f5f594445-0066d25e64-14897-default
Accept-Ranges: bytes
Content-Type: text/plain; charset=utf-8
Connection: Keep-Alive
[root@ceph141 ~]#
3.客户端测试访问,比如在mac终端测试效果如下【浏览器访问的话会直接下载host文件,注意此处我的协议为http哈~】
bogon:~ yinzhengjie$ curl http://ceph142/yinzhengjie-rgw/etc/hosts
127.0.0.1 localhost
127.0.1.1 yinzhengjie
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.0.0.141 ceph141
10.0.0.142 ceph142
10.0.0.143 ceph143
172.30.100.142 www.yinzhengjie.com
bogon:~ yinzhengjie$
3.应用跨域规则【可选操作】
1.定义跨域规则文件
[root@ceph141 ~]# cat > yinzhengjie-rules.xml <<EOF
<CORSConfiguration>
<CORSRule>
<ID>Allow everything</ID>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>30</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
EOF
[root@ceph141 ~]#
2.应用跨域规则
[root@ceph141 ~]# s3cmd setcors yinzhengjie-rules.xml s3://yinzhengjie-rgw
3.查看存储桶信息
[root@ceph141 ~]# s3cmd info s3://yinzhengjie-rgw
s3://yinzhengjie-rgw/ (bucket):
Location: default
Payer: BucketOwner
Expiration Rule: none
Policy: {
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "*"
}]
}
CORS: <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><CORSRule><ID>Allow everything</ID><AllowedMethod>GET</AllowedMethod><AllowedMethod>PUT</AllowedMethod><AllowedMethod>DELETE</AllowedMethod><AllowedMethod>HEAD</AllowedMethod><AllowedMethod>POST</AllowedMethod><AllowedOrigin>*</AllowedOrigin><AllowedHeader>*</AllowedHeader><MaxAgeSeconds>30</MaxAgeSeconds></CORSRule></CORSConfiguration>
ACL: 尹正杰: FULL_CONTROL
[root@ceph141 ~]#
三.对象存储的其他访问方式
1.基于s3cmd方式访问
推挤阅读:
https://developer.aliyun.com/article/1605062#三s3cmd工具上传视频访问验证
2.基于swift方式访问
推荐阅读:
https://developer.aliyun.com/article/1605069
3.基于python程序访问
推挤阅读:
https://developer.aliyun.com/article/1605068