注意
本文档适用于 Ceph 开发版本。
身份验证和 ACL
对 RADOS 网关(RGW)的请求可以是经过身份验证的,也可以是没有经过身份验证的。RGW 假设没有经过身份验证的请求是由匿名用户发送的。RGW 支持预定义的 ACL。
身份验证
请求使用 AWS 签名进行身份验证,这些签名是从用户的凭证(S3 访问密钥和密钥)派生的。
大多数 S3 客户端和 AWS SDK 将为您生成这些签名,前提是您提供了必要的凭证。在发出原始 HTTP 请求时,必须手动添加这些签名。
AWS 签名版本 4
请参阅官方文档中的验证请求(AWS 签名版本 4).
以下请求头值受支持:x-amz-content-sha256请求头值:
实际有效载荷校验值
UNSIGNED-PAYLOAD
STREAMING-UNSIGNED-PAYLOAD-TRAILER
STREAMING-AWS4-HMAC-SHA256-PAYLOAD
STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
AWS 签名版本 2
请参阅官方文档中的验证请求(AWS 签名版本 2).
Note
虽然版本 2 的签名在 AWS 中已被弃用,但 RGW 仍然支持它们。
对 OpenStack Keystone 的身份验证
在配置了对 OpenStack Keystone 进行身份验证的 radosgw 实例中,可以将 Keystone 作为 S3 API 身份验证的权威来源。为此,您必须设置:
参数
rgw keystone
文档中解释的配置选项与 OpenStack Keystone 集成,rgw s3 auth use keystone = true
.
此外,希望使用 S3 API 的用户必须获取 AWS 风格的访问密钥和密钥。他们可以通过openstack ec2
credentials create
command:
$ openstack --os-interface public ec2 credentials create
+------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| access | c921676aaabbccdeadbeef7e8b0eeb2c |
| links | {u'self': u'https://auth.example.com:5000/v3/users/7ecbebaffeabbddeadbeefa23267ccbb24/credentials/OS-EC2/c921676aaabbccdeadbeef7e8b0eeb2c'} |
| project_id | 5ed51981aab4679851adeadbeef6ebf7 |
| secret | ******************************** |
| trust_id | None |
| user_id | 7ecbebaffeabbddeadbeefa23267cc24 |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------+
生成的访问密钥和密钥可用于对 radosgw 进行 S3 API 访问。
Note
考虑到大多数对 OpenStack Keystone 进行身份验证的生产 radosgw 部署也配置了RGW多租户,对于 S3 签名 URL 和公共读取 ACL,需要特别考虑。
访问控制列表(ACL)
RGW 支持 S3 兼容的 ACL 功能。ACL 是一个访问授权列表,指定用户可以对存储桶或对象执行哪些操作。当应用于存储桶时,每个授权的含义与应用于对象时不同:
授权 |
桶 |
对象 |
---|---|---|
|
授权者可以列出存储桶中的对象。 |
授权者可以读取对象。 |
|
授权者可以写入或删除存储桶中的对象。 |
N/A |
|
授权者可以读取存储桶 ACL。 |
授权者可以读取对象 ACL。 |
|
授权者可以写入存储桶 ACL。 |
授权者可以写入对象 ACL。 |
|
授权者对存储桶中的对象具有完全权限。 |
授权者可以读取或写入对象 ACL。 |
内部,S3 操作映射到 ACL 授权如下:
操作 |
授权 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一些映射(例如s3:CreateBucket
toWRITE
)不适用于 S3 操作,但在 Swift 和 S3 需要访问相同资源时(例如 Swift 用户 ACL 发生时),需要这些映射。这是您在可能的情况下应使用 S3 存储桶策略而不是 S3 ACL 的许多原因之一。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.