Ceph Reef(18.2.X)之对象访问策略配置

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 这篇文章讲述了对象存储的多种访问方式,包括HTTP、S3cmd、Swift和Python程序访问,并介绍了如何定制存储桶的访问策略和跨域规则。

                                              作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.对象存储概述

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
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
2月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
110 1
|
1月前
|
Shell 容器
Ceph Reef(18.2.X)访问ceph集群的方式及管理员节点配置案例
这篇文章是关于Ceph Reef(18.2.X)版本中访问ceph集群的方式和管理员节点配置的案例,介绍了使用cephadm shell的不同方式访问集群和如何配置管理节点以方便集群管理。
42 5
|
1月前
|
存储 关系型数据库 块存储
Ceph Reef(18.2.X)集群的状态管理实战
这篇文章是关于Ceph Reef(18.2.X)集群的状态管理实战,包括如何检查集群状态、OSD状态、MON监视器映射、PG和OSD存储对应关系,以及如何通过套接字管理集群和修改集群配置的详细指南。
44 4
|
2月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
5月前
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
485 0
|
存储 固态存储 Windows
带你读《存储漫谈:Ceph原理与实践》——3.3.2 CephFS 访问方式
带你读《存储漫谈:Ceph原理与实践》——3.3.2 CephFS 访问方式
带你读《存储漫谈:Ceph原理与实践》——3.3.2 CephFS 访问方式
|
存储 缓存 Linux
带你读《存储漫谈:Ceph原理与实践》——3.1.4 RBD Cache
带你读《存储漫谈:Ceph原理与实践》——3.1.4 RBD Cache
带你读《存储漫谈:Ceph原理与实践》——3.1.4 RBD Cache
|
安全 数据可视化 测试技术
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
# 0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流、索引生命周期、可搜索快照、跨集群搜索、跨集群复制进行讲解
318 0
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
|
Kubernetes 时序数据库 容器
从集群外访问k8s的pod 的几种方式--hostNetwork
前言 有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们详细讨论Kubernetes的hostNetwork,hostPort,NodePort,LoadBalancer和Ingress功能。
2597 0