3.2. 使用 S3 API 访问 Ceph 对象网关
作为开发者,您必须配置对 Ceph 对象网关和安全令牌服务(STS)的访问权限,然后才能开始使用 Amazon S3 API。 一个正在运行的 Red Hat Ceph Storage 集群。 正在运行的 Ceph 对象网关. RESTful 客户端。
3.2.1. S3 身份验证
对 Ceph 对象网关的请求可以是经过身份验证的用户或未经身份验证的请求。Ceph 对象网关假定匿名用户发送了未经身份验证的请求。Ceph 对象网关支持 ACL。
对于大多数用例,客户端使用现有开源库,如 Amazon SDK 的
AmazonS3Client
用于 Java 和 Python Boto。使用开源库,只需传递访问密钥和密钥,库会为您构建请求标头和身份验证签名。但是,您可以创建请求并签署它们。
在向 Ceph 对象网关服务器发送前,在请求中包括访问密钥和基于 64 编码的消息身份验证代码(HMAC)的要求。Ceph 对象网关使用兼容 S3 的身份验证方法。
HTTP/1.1 PUT /buckets/bucket/object.mpeg Host: cname.domain.com Date: Mon, 2 Jan 2012 00:01:01 +0000 Content-Encoding: mpeg Content-Length: 9999999 Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET在上例中,将
ACCESS_KEY
替换为 access key ID 的值,后跟一个冒号(
:
)。将
HASH_OF_HEADER_AND_SECRET
替换为一个规范标头字符串的哈希值,以及与访问密钥 ID 对应的 secret。
生成标头字符串和 secret 的哈希值
生成标头字符串和 secret 的哈希值:
获取标头字符串的值。
将请求标头字符串规范化为规范形式。
使用 SHA-1 哈希算法生成 HMAC。
将
hmac
结果编码为 base-64。
规范化标头
将标头规范化为规范形式:
获取
所有内容
标头。
删除除
content-type
和
content-md5
外的所有
content-
标头。
确保
content-
标头名称是小写。
以字典顺序对
content-
标题排序。
确保带有
Date
标头,并确保指定的日期使用 GMT 而不是偏移量。
获取以
x-amz-
开头的所有标题。
确保
x-amz-
标头都是小写。
以字典顺序对
x-amz-
标头排序。
将同一字段名称的多个实例合并到一个字段中,并使用逗号分隔字段值。
使用单个空格替换标题值中的空格和换行符。
在冒号前后删除空格。
在每个标头后面添加一个新行。
将标头合并回请求标头。
将
HASH_OF_HEADER_AND_SECRET
替换为 base-64 编码的 HMAC 字符串。
如需了解更多详细信息,请参阅 Amazon Simple Storage Service 文档中的
签名和授权 REST Requests
部分。
3.2.2. S3-server-side encryption
Ceph 对象网关支持为 S3 应用编程接口(API)上传对象的服务器端加密。服务器端加密意味着 S3 客户端以未加密的形式通过 HTTP 发送数据,而 Ceph 对象网关以加密的形式将数据存储在 Red Hat Ceph Storage 集群中。
红帽不支持静态大型对象(SLO)或动态大对象(DLO)的 S3 对象加密。
若要使用加密,客户端请求
需要
通过 SSL 连接发送请求。除非 Ceph 对象网关使用 SSL,否则红帽不支持从客户端进行 S3 加密。但是,出于测试目的,管理员可以使用
ceph config set client.rgw
命令,在测试期间禁用 SSL,在运行时将
rgw_crypt_require_ssl
配置设置设置为
false
,然后重新启动 Ceph 对象网关实例。
在生产环境中,可能无法通过 SSL 发送加密的请求。在这种情况下,使用 HTTP 和服务器端加密发送请求。
有关如何使用服务器端加密配置 HTTP 的详情,请参考下面的
附加资源
部分。
管理加密密钥有两个选项:
客户提供的键
在使用客户提供的密钥时,S3 客户端会传递加密密钥以及每个请求来读取或写入加密数据。客户负责管理这些密钥。客户必须记住用于加密每个对象的 Ceph 对象网关的关键是什么。 Ceph 对象网关根据 Amazon SSE-C 规范在 S3 API 中实施客户提供的关键行为。 由于客户处理密钥管理,并且 S3 客户端将密钥传递到 Ceph 对象网关,因此 Ceph 对象网关不需要特殊配置来支持这种加密模式。
密钥管理服务
在使用密钥管理服务时,安全密钥管理服务存储密钥,Ceph 对象网关则按需检索密钥,为数据加密或解密请求提供服务。 Ceph 对象网关根据 Amazon SSE-KMS 规范在 S3 API 中实施关键管理服务行为。 目前,唯一测试的关键管理实施是 HashiCorp Vault 和 OpenStack Barbican。但是,OpenStack Barbican 是一个技术预览,不支持在生产环境中使用。 Amazon SSE-C Amazon SSE-KMS 配置服务器端加密 HashiCorp Vault
3.2.3. S3 访问控制列表
Ceph 对象网关支持 S3 兼容访问控制列表(ACL)功能。ACL 是访问权限列表,可指定用户可以对存储桶或对象执行的操作。在应用到存储桶而不是应用到对象时,每个授权都有不同的意义:
权限 | Bucket | Object |
---|---|---|
Grantee 可以列出存储桶中的对象。
Grantee 可以读取对象。
Grantee 可以编写或删除存储桶中的对象。
|
3.2.4. 使用 S3 准备对 Ceph 对象网关的访问
在尝试访问网关服务器前,您必须在 Ceph 对象网关节点上遵循一些前提条件。
安装 Ceph 对象网关软件.
Ceph 对象网关节点的根级别访问权限.
以
root
用户身份,在防火墙上打开端口
8080
:
[root@rgw ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent [root@rgw ~]# firewall-cmd --reload
如
对象网关配置和管理指南
中所述,为网关使用的 DNS 服务器添加通配符。
您还可以为本地 DNS 缓存设置网关节点。要做到这一点,请执行以下步骤:
以
root
用户身份,安装和设置
dnsmasq
:
[root@rgw ~]# yum install dnsmasq [root@rgw ~]# echo "address=/.FQDN_OF_GATEWAY_NODE/IP_OF_GATEWAY_NODE" | tee --append /etc/dnsmasq.conf [root@rgw ~]# systemctl start dnsmasq [root@rgw ~]# systemctl enable dnsmasq
将
IP_OF_GATEWAY_NODE
和
FQDN_OF_GATEWAY_NODE
替换为网关节点的 IP 地址和 FQDN。
作为
root
用户,停止 NetworkManager:
[root@rgw ~]# systemctl stop NetworkManager [root@rgw ~]# systemctl disable NetworkManager
以
root
用户身份,将网关服务器的 IP 设置为名称服务器:
[root@rgw ~]# echo "DNS1=IP_OF_GATEWAY_NODE" | tee --append /etc/sysconfig/network-scripts/ifcfg-eth0 [root@rgw ~]# echo "IP_OF_GATEWAY_NODE FQDN_OF_GATEWAY_NODE" | tee --append /etc/hosts [root@rgw ~]# systemctl restart network [root@rgw ~]# systemctl enable network [root@rgw ~]# systemctl restart dnsmasq
将
IP_OF_GATEWAY_NODE
和
FQDN_OF_GATEWAY_NODE
替换为网关节点的 IP 地址和 FQDN。
验证子域请求:
[user@rgw ~]$ ping mybucket.FQDN_OF_GATEWAY_NODE
将
FQDN_OF_GATEWAY_NODE
替换为网关节点的 FQDN。
为本地 DNS 缓存设置网关服务器仅用于测试目的。执行此操作后,您将无法访问外部网络。
强烈建议您为 Red Hat Ceph Storage 集群和网关节点使用正确的 DNS 服务器。
如
对象网关配置和管理指南中所述,为
S3
访问创建
radosgw
用户,
并复制生成的
access_key
和
secret_key
。您需要这些密钥进行
S3
访问和随后的 bucket 管理任务。