第 7 章 安全性


作为存储管理员,保护存储集群环境非常重要。Red Hat Ceph Storage 提供加密和密钥管理,以保护 Ceph 对象网关访问点的安全。

先决条件

  • 一个正常运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph 对象网关软件.

7.1. 服务器侧加密(SSE)

Ceph 对象网关支持为 S3 应用编程接口(API)上传对象的服务器端加密。服务器端加密意味着 S3 客户端以未加密的形式通过 HTTP 发送数据,而 Ceph 对象网关以加密的形式将数据存储在 Red Hat Ceph Storage 集群中。

注意
  • 红帽不支持静态大型对象(SLO)或动态大对象(DLO)的 S3 对象加密。
  • 目前,没有 Server-Side 加密(SSE)模式支持 CopyObject。它目前正在开发 [BZ#2149450]
重要

由于一个已知问题,服务器端加密与多站点复制不兼容。此问题将在以后的发行版本中解决。如需了解更多详细信息,请参阅 已知问题- Mult-site Object Gateway

重要

若要使用加密,客户端请求需要通过 SSL 连接发送请求。除非 Ceph 对象网关使用 SSL,否则红帽不支持从客户端进行 S3 加密。但是,出于测试目的,管理员可以使用 ceph config set client.rgw 命令,在测试期间禁用 SSL,在运行时将 rgw_crypt_require_ssl 配置设置设置为 false,然后重新启动 Ceph 对象网关实例。

在生产环境中,可能无法通过 SSL 发送加密的请求。在这种情况下,使用 HTTP 和服务器端加密发送请求。

有关如何使用服务器端加密配置 HTTP 的详情,请参考下面的附加资源部分。

S3 多部分使用服务器端加密上传现在在多站点中正确复制。在以前的版本中,此类对象的副本通过解密损坏,您可以使用 radosgw-admin bucket resync encrypted multipart --bucket-name BUCKET_NAME 命令来识别多部分上传。此命令扫描加密多部分对象的主要非复制副本。对于每个对象,任何识别对象的 LastModified 时间戳都会被 1ns 递增,以便对等区再次复制它。对于使用 SSE 的多站点部署,请在升级所有区域后针对每个区域中的每个存储桶运行这个命令。这样可确保使用 SSE 在多站点中正确复制 S3 多部分上传。

管理加密密钥有三个选项:

客户提供的键

在使用客户提供的密钥时,S3 客户端会传递加密密钥以及每个请求来读取或写入加密数据。客户负责管理这些密钥。客户必须记住用于加密每个对象的 Ceph 对象网关的关键是什么。

Ceph 对象网关根据 Amazon SSE-C 规范在 S3 API 中实施客户提供的关键行为。

由于客户处理密钥管理,并且 S3 客户端将密钥传递到 Ceph 对象网关,因此 Ceph 对象网关不需要特殊配置来支持这种加密模式。

密钥管理服务

在使用密钥管理服务时,安全密钥管理服务存储密钥,Ceph 对象网关则按需检索密钥,为数据加密或解密请求提供服务。

Ceph 对象网关根据 Amazon SSE-KMS 规范在 S3 API 中实施关键管理服务行为。

重要

目前,唯一测试的关键管理实施是 HashiCorp Vault 和 OpenStack Barbican。但是,OpenStack Barbican 是一个技术预览,不支持在生产环境中使用。

SSE-S3

在使用 SSE-S3 时,密钥存储在密码库中,但会 Ceph 自动创建和删除,并根据需要检索它们,以提供加密或解密数据的请求。

Ceph 对象网关根据 Amazon SSE-S3 规范在 S3 API 中实施 SSE-S3 行为。

7.1.1. 为现有 S3 存储桶设置默认加密

作为存储管理员,您可以为现有 Amazon S3 存储桶设置默认加密,以便在存储桶中存储所有对象时加密。您可以使用 Bucket Encryption API 支持使用 Amazon S3-managed 密钥(SSE-S3)或 Amazon KMS 客户主密钥(SSE-KMS)进行服务器端加密。

注意

SSE-KMS 仅支持 Red Hat Ceph Storage 5.x,不支持 Red Hat Ceph Storage 4.x。

您可以使用 PutBucketEncryption API 管理现有 Amazon S3 存储桶的默认加密。上传到此 bucket 的所有文件都将通过在 bucket 级别定义默认加密来拥有此加密。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph 对象网关.
  • 已创建一个 S3 存储桶。
  • 创建的用户具有访问权限的 S3 用户。
  • 使用安装的 AWS CLI 软件包访问 Ceph 对象网关客户端。

流程

  1. 为加密配置创建 JSON 文件:

    示例

    [user@client ~]$ vi bucket-encryption.json
    Copy to Clipboard Toggle word wrap

  2. 在文件中添加加密配置规则:

    示例

    {
    	"Rules": [
            {
    	    "ApplyServerSideEncryptionByDefault": {
                        "SSEAlgorithm": "AES256"
    	    }
           }
        ]
    }
    Copy to Clipboard Toggle word wrap

  3. 为存储桶设置默认加密:

    语法

    aws --endpoint-url=pass:q[_RADOSGW_ENDPOINT_URL_]:pass:q[_PORT_] s3api put-bucket-encryption --bucket pass:q[_BUCKET_NAME_] --server-side-encryption-configuration pass:q[_file://PATH_TO_BUCKET_ENCRYPTION_CONFIGURATION_FILE/BUCKET_ENCRYPTION_CONFIGURATION_FILE.json_]
    Copy to Clipboard Toggle word wrap

    示例

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api put-bucket-encryption --bucket testbucket --server-side-encryption-configuration file://bucket-encryption.json
    Copy to Clipboard Toggle word wrap

验证

  • 检索存储桶的存储桶加密配置:

    语法

    aws --endpoint-url=pass:q[_RADOSGW_ENDPOINT_URL_]:pass:q[_PORT_] s3api get-bucket-encryption --bucket BUCKET_NAME
    Copy to Clipboard Toggle word wrap

    示例

    [user@client ~]$  aws --profile ceph --endpoint=http://host01:80 s3api get-bucket-encryption --bucket testbucket
    
    {
        "ServerSideEncryptionConfiguration": {
            "Rules": [
                {
                    "ApplyServerSideEncryptionByDefault": {
                        "SSEAlgorithm": "AES256"
                    }
                }
            ]
        }
    }
    Copy to Clipboard Toggle word wrap

注意

如果存储桶没有默认加密配置,get-bucket-encryption 命令会返回 ServerSideEncryptionConfigurationNotFoundError

7.1.2. 删除默认存储桶加密

您可以使用 s3api delete-bucket-encryption 命令删除指定存储桶的默认存储桶加密。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph 对象网关.
  • 已创建一个 S3 存储桶。
  • 创建的用户具有访问权限的 S3 用户。
  • 使用安装的 AWS CLI 软件包访问 Ceph 对象网关客户端。

流程

  • 删除存储桶加密配置:

    语法

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api delete-bucket-encryption --bucket BUCKET_NAME
    Copy to Clipboard Toggle word wrap

    示例

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api delete-bucket-encryption --bucket testbucket
    Copy to Clipboard Toggle word wrap

验证

  • 检索存储桶的存储桶加密配置:

    语法

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api get-bucket-encryption --bucket BUCKET_NAME
    Copy to Clipboard Toggle word wrap

    示例

    [user@client ~]$  aws --endpoint=http://host01:80 s3api get-bucket-encryption --bucket testbucket
    
    An error occurred (ServerSideEncryptionConfigurationNotFoundError) when calling the GetBucketEncryption operation:
    The server side encryption configuration was not found
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat