注意

本文档适用于 Ceph 的开发版本。

身份验证和ACLs

对 RADOS Gateway (RGW) 的请求可以是经过身份验证的,也可以是未经身份验证的。RGW 假定未经身份验证的请求是由匿名用户发送的。RGW 支持预设的 ACL。

认证

请求通过 AWS Signature 进行身份验证,该签名源自用户的凭证(S3 访问密钥和秘密密钥)。

大多数 S3 客户端和 AWS SDK 会为您生成这些签名,前提是提供了必要的凭证。在发出原始 HTTP 请求时,必须手动添加这些签名。

AWS Signature v4

请参阅官方文档 验证请求 (AWS Signature Version 4)

支持以下 x-amz-content-sha256 请求头的值

  • 实际有效载荷校验和值

  • UNSIGNED-PAYLOAD

  • STREAMING-UNSIGNED-PAYLOAD-TRAILER

  • STREAMING-AWS4-HMAC-SHA256-PAYLOAD

  • STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

AWS Signature v2

请参阅官方文档 验证请求 (AWS Signature Version 2)

注意

虽然 AWS 已弃用 v2 签名,但 RGW 继续支持它们。

针对 OpenStack Keystone 的身份验证

在配置了针对 OpenStack Keystone 进行身份验证的 radosgw 实例中,可以将 Keystone 用作 S3 API 身份验证的权威来源。为此,您必须设置

此外,希望使用 S3 API 的用户必须获取 AWS 样式的访问密钥和秘密密钥。他们可以使用 openstack ec2 credentials create 命令来完成此操作

$ 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 访问。

注意

请注意,大多数针对 OpenStack Keystone 进行身份验证的生产 radosgw 部署也设置为 RGW 多租户,这对于 S3 签名 URL 和公共读取 ACL 有特殊的考虑因素。

访问控制列表 (ACLs)

RGW 支持与 S3 兼容的 ACL 功能。ACL 是访问授权的列表,指定用户可以对存储桶或对象执行哪些操作。每个授权在应用于存储桶时与应用于对象时具有不同的含义

Permission

Bucket

对象

READ

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

被授权者可以读取对象。

WRITE

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

N/A

READ_ACP

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

被授权者可以读取对象 ACL。

WRITE_ACP

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

被授权者可以写入对象 ACL。

FULL_CONTROL

被授权者对存储桶中的对象拥有全部权限。

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

在内部,S3 操作被映射到 ACL 权限,如下所示

操作

Permission

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:CreateBucketWRITE)不适用于 S3 操作,但当 Swift 和 S3 访问相同资源时(例如当 Swift 用户 ACL 生效时)是必需的。这是在可能的情况下应使用 S3 存储桶策略而不是 S3 ACL 的众多原因之一。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入