8장. 보안
스토리지 관리자는 스토리지 클러스터 환경을 보호하는 것이 중요합니다. Red Hat Ceph Storage는 Ceph Object Gateway 액세스 지점을 보호하는 암호화 및 키 관리를 제공합니다.
사전 요구 사항
- 정상 실행 Red Hat Ceph Storage 클러스터.
- Ceph Object Gateway 소프트웨어 설치.
8.1. SSE(Server-Side Encryption)
Ceph Object Gateway는 S3 API(애플리케이션 프로그래밍 인터페이스)에 대해 업로드된 오브젝트의 서버 측 암호화를 지원합니다. 서버 측 암호화는 S3 클라이언트가 암호화되지 않은 형식으로 HTTP를 통해 데이터를 전송하고 Ceph Object Gateway는 해당 데이터를 Red Hat Ceph Storage 클러스터에 암호화된 형식으로 저장합니다.
- Red Hat은 SLO(Dynamic Large Object) 또는 DLO(Dynamic Large Object)의 S3 개체 암호화를 지원하지 않습니다.
-
현재 SSE(Server-Side Encryption) 모드 중 어느 것도
CopyObject
에 대한 지원을 구현하지 않았습니다. 현재 개발 중입니다 [BZ#2149450].
서버 측 암호화는 알려진 문제로 인해 다중 사이트 복제와 호환되지 않습니다. 이 문제는 향후 릴리스에서 해결될 예정입니다. 자세한 내용은 알려진 문제-Mult-site Object Gateway 를 참조하십시오.
암호화를 사용하려면 클라이언트 요청이 SSL 연결을 통해 요청을 보내야 합니다. Ceph Object Gateway에서 SSL을 사용하지 않는 한 Red Hat은 클라이언트의 S3 암호화를 지원하지 않습니다. 그러나 테스트를 위해 관리자는 ceph config set client.rgw
명령을 사용하여 rgw_crypt_require_ssl
구성 설정을 false
로 설정한 다음 Ceph Object Gateway 인스턴스를 다시 시작하여 테스트 중에 SSL을 비활성화할 수 있습니다.
프로덕션 환경에서는 SSL을 통해 암호화된 요청을 보내지 못할 수 있습니다. 이러한 경우 서버 측 암호화와 함께 HTTP를 사용하여 요청을 보냅니다.
서버 측 암호화를 사용하여 HTTP를 구성하는 방법에 대한 자세한 내용은 아래의 추가 리소스 섹션을 참조하십시오.
암호화 키 관리를 위한 세 가지 옵션이 있습니다.
고객 제공 키
S3 클라이언트는 고객 제공 키를 사용할 때 암호화된 데이터를 읽거나 쓰기 위한 각 요청과 함께 암호화 키를 전달합니다. 이러한 키를 관리하는 것은 고객의 책임이 있습니다. 고객은 각 오브젝트를 암호화하는 데 사용되는 Ceph Object Gateway를 기억할 수 있어야 합니다.
Ceph Object Gateway는 Amazon SSE-C 사양에 따라 S3 API에서 고객 제공 키 동작을 구현합니다.
고객이 키 관리를 처리하고 S3 클라이언트가 키를 Ceph Object Gateway에 전달하므로 Ceph Object Gateway는 이 암호화 모드를 지원하기 위해 특별한 구성이 필요하지 않습니다.
키 관리 서비스
키 관리 서비스를 사용하는 경우 보안 키 관리 서비스는 키를 저장하고 Ceph Object Gateway는 필요에 따라 데이터를 암호화하거나 암호 해독하는 요청을 처리하기 위해 해당 키를 검색합니다.
Ceph Object Gateway는 Amazon SSE-KMS 사양에 따라 S3 API에서 키 관리 서비스 동작을 구현합니다.
현재 테스트된 유일한 키 관리 구현은 HashiCorp Vault 및 OpenStack Barbican입니다. 그러나 OpenStack Barbican은 기술 프리뷰이며 프로덕션 시스템에서 사용할 수 없습니다.
SSE-S3
SSE-S3을 사용하는 경우 키는 vault에 저장되지만 Ceph에서 자동으로 생성 및 삭제하고 데이터를 암호화하거나 암호 해독하기 위한 요청을 처리하는 데 필요한 대로 검색됩니다.
Ceph Object Gateway는 Amazon SSE-S3 사양에 따라 S3 API에서 SSE-S3 동작을 구현합니다.
8.1.1. 기존 S3 버킷의 기본 암호화 설정
스토리지 관리자는 기존 Amazon S3 버킷의 기본 암호화를 설정하여 모든 오브젝트가 버킷에 저장될 때 암호화되도록 할 수 있습니다. Bucket Encryption API를 사용하여 Amazon S3 관리 키(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 Object Gateway 설치
- S3 버킷이 생성되었습니다.
- 사용자 액세스 권한이 있는 S3 사용자
- AWS CLI 패키지가 설치된 Ceph Object Gateway 클라이언트에 액세스할 수 있습니다.
프로세스
암호화 구성에 대한 JSON 파일을 생성합니다.
예
[user@client ~]$ vi bucket-encryption.json
암호화 구성 규칙을 파일에 추가합니다.
예
{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }
버킷의 기본 암호화를 설정합니다.
구문
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 Object Gateway 설치
- S3 버킷이 생성되었습니다.
- 사용자 액세스 권한이 있는 S3 사용자
- AWS CLI 패키지가 설치된 Ceph Object Gateway 클라이언트에 액세스할 수 있습니다.
프로세스
버킷 암호화 구성을 삭제합니다.
구문
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