注意

本文档适用于 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 身份验证的权威来源。为此,您必须设置:

此外,希望使用 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 是一个访问授权列表,指定用户可以对存储桶或对象执行哪些操作。当应用于存储桶时,每个授权的含义与应用于对象时不同:

授权

对象

READ

授权者可以列出存储桶中的对象。

授权者可以读取对象。

WRITE

授权者可以写入或删除存储桶中的对象。

N/A

READ_ACP

授权者可以读取存储桶 ACL。

授权者可以读取对象 ACL。

WRITE_ACP

授权者可以写入存储桶 ACL。

授权者可以写入对象 ACL。

FULL_CONTROL

授权者对存储桶中的对象具有完全权限。

授权者可以读取或写入对象 ACL。

内部,S3 操作映射到 ACL 授权如下:

操作

授权

s3:GetObject

READ

s3:GetObjectTorrent

READ

s3:GetObjectVersion

READ

s3:GetObjectVersionTorrent

READ

s3:GetObjectTagging

READ

s3:GetObjectVersionTagging

READ

s3:ListAllMyBuckets

READ

s3:ListBucket

READ

s3:ListBucketMultipartUploads

READ

s3:ListBucketVersions

READ

s3:ListMultipartUploadParts

READ

s3:AbortMultipartUpload

WRITE

s3:CreateBucket

WRITE

s3:DeleteBucket

WRITE

s3:DeleteObject

WRITE

s3:s3DeleteObjectVersion

WRITE

s3:PutObject

WRITE

s3:PutObjectTagging

WRITE

s3:PutObjectVersionTagging

WRITE

s3:DeleteObjectTagging

WRITE

s3:DeleteObjectVersionTagging

WRITE

s3:RestoreObject

WRITE

s3:GetAccelerateConfiguration

READ_ACP

s3:GetBucketAcl

READ_ACP

s3:GetBucketCORS

READ_ACP

s3:GetBucketLocation

READ_ACP

s3:GetBucketLogging

READ_ACP

s3:GetBucketNotification

READ_ACP

s3:GetBucketPolicy

READ_ACP

s3:GetBucketRequestPayment

READ_ACP

s3:GetBucketTagging

READ_ACP

s3:GetBucketVersioning

READ_ACP

s3:GetBucketWebsite

READ_ACP

s3:GetLifecycleConfiguration

READ_ACP

s3:GetObjectAcl

READ_ACP

s3:GetObjectVersionAcl

READ_ACP

s3:GetReplicationConfiguration

READ_ACP

s3:GetBucketEncryption

READ_ACP

s3:DeleteBucketPolicy

WRITE_ACP

s3:DeleteBucketWebsite

WRITE_ACP

s3:DeleteReplicationConfiguration

WRITE_ACP

s3:PutAccelerateConfiguration

WRITE_ACP

s3:PutBucketAcl

WRITE_ACP

s3:PutBucketCORS

WRITE_ACP

s3:PutBucketLogging

WRITE_ACP

s3:PutBucketNotification

WRITE_ACP

s3:PutBucketPolicy

WRITE_ACP

s3:PutBucketRequestPayment

WRITE_ACP

s3:PutBucketTagging

WRITE_ACP

s3:PutPutBucketVersioning

WRITE_ACP

s3:PutBucketWebsite

WRITE_ACP

s3:PutLifecycleConfiguration

WRITE_ACP

s3:PutObjectAcl

WRITE_ACP

s3:PutObjectVersionAcl

WRITE_ACP

s3:PutReplicationConfiguration

WRITE_ACP

s3:PutBucketEncryption

WRITE_ACP

一些映射(例如s3:CreateBuckettoWRITE)不适用于 S3 操作,但在 Swift 和 S3 需要访问相同资源时(例如 Swift 用户 ACL 发生时),需要这些映射。这是您在可能的情况下应使用 S3 存储桶策略而不是 S3 ACL 的许多原因之一。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.