第 8 章 安全性


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

先决条件

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

8.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 客户端会传递加密密钥以及每个请求来读取或写入加密数据。客户负责管理这些密钥。客户必须记住用于加密每个对象的 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 行为。

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

作为存储管理员,您可以为现有 Amazon S3 存储桶设置默认加密,以便在存储在存储桶时加密所有对象。您可以使用 Bucket 加密 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 存储桶的默认加密。在存储桶级别上定义默认加密,上传到此存储桶的所有文件都将具有此加密。

先决条件

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

流程

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

    示例

    [user@client ~]$ vi bucket-encryption.json

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

    示例

    {
    	"Rules": [
            {
    	    "ApplyServerSideEncryptionByDefault": {
                        "SSEAlgorithm": "AES256"
    	    }
           }
        ]
    }

  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_]

    示例

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

验证

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

    语法

    aws --endpoint-url=pass:q[_RADOSGW_ENDPOINT_URL_]:pass:q[_PORT_] s3api get-bucket-encryption --bucket BUCKET_NAME

    示例

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

注意

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

8.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

    示例

    [user@client ~]$ aws --endpoint-url=http://host01:80 s3api delete-bucket-encryption --bucket testbucket

验证

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

    语法

    aws --endpoint-url=RADOSGW_ENDPOINT_URL:PORT s3api get-bucket-encryption --bucket BUCKET_NAME

    示例

    [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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.