Skip to content

Commit 1d52a90

Browse files
committed
docs: document process for deploying RGW SSE-KMS
Signed-off-by: Jack Hodgkiss <jack@stackhpc.com>
1 parent 3124044 commit 1d52a90

2 files changed

Lines changed: 100 additions & 0 deletions

File tree

doc/source/configuration/cephadm.rst

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,102 @@ RGWs to use the Kolla-deployed haproxy. Set the following in Kolla
510510
511511
enable_ceph_rgw_loadbalancer: false
512512
513+
514+
SSE KMS
515+
~~~~~~~
516+
517+
SSE KMS (Server-Side Encryption with Key Management Service) allows RADOS
518+
Gateway to encrypt object data at rest while keeping encryption keys managed
519+
outside Ceph in a dedicated KMS backend. When enabled, data is encrypted and
520+
decrypted transparently by RGW during write and read operations.
521+
522+
SSE KMS should be implemented with the use of OpenStack Barbican. Steps for
523+
implementing are as follows;
524+
525+
Create a dedicate project for RGW and Barbican integration.
526+
527+
.. code:: bash
528+
529+
(openstack) $ openstack project create --domain default rgwcrypt
530+
531+
Create a dedicated user for RGW to use when interacting with Barbican.
532+
533+
.. code:: bash
534+
535+
(openstack) $ PASSWORD=$(openssl rand -base64 24); openstack user create --domain default --project rgwcrypt --password "$PASSWORD" rgwcrypt && echo "Password: $PASSWORD"
536+
537+
Make sure to store the password in `secrets.yml` as `ceph_rgw_rgwcrypt_password`
538+
539+
Provide rgwcrypt user the appropriate roles within the rgwcrypt project
540+
541+
.. code:: bash
542+
543+
(openstack) $ openstack role add --user rgwcrypt --project rgwcrypt member
544+
(openstack) $ openstack role add --user rgwcrypt --project rgwcrypt creator
545+
546+
As the rgwcrypt user create a secret that will act as the symmetric AES-256 key. Make sure to make note of the UUID contained within the secret href.
547+
548+
.. code:: bash
549+
550+
(openstack) $ openstack secret store \
551+
--name rgw-sse-key \
552+
--payload-content-type application/octet-stream \
553+
--payload-content-encoding base64 \
554+
--algorithm aes \
555+
--bit-length 256 \
556+
--mode cbc \
557+
--secret-type symmetric \
558+
--payload "$(openssl rand -base64 32)"
559+
560+
In `cephadm.yml` ensure the following is present;
561+
562+
.. code:: yaml
563+
564+
# Append the following to cephadm_commands_post:
565+
- config set client.rgw rgw_barbican_url "{{ 'https' if kolla_enable_tls_internal | bool else 'http' }}://{{ kolla_internal_fqdn }}:9311"
566+
- config set client.rgw rgw_keystone_barbican_domain Default
567+
- config set client.rgw rgw_keystone_barbican_project rgwcrypt
568+
- config set client.rgw rgw_keystone_barbican_password {{ (lookup('file', kayobe_env_config_path ~ '/kolla/passwords.yml') | from_yaml).ceph_rgw_rgwcrypt_password }}"
569+
- config set client.rgw rgw_keystone_barbican_user rgwcrypt
570+
- config set client.rgw rgw_crypt_s3_kms_backend barbican
571+
572+
Either deploy Ceph with `cephadm.yml` playbook or if Ceph and RGW are already deployed then just run `cephadm-commands-post.yml`
573+
574+
.. code:: bash
575+
576+
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/ceph/cephadm.yml
577+
578+
or
579+
580+
.. code:: bash
581+
582+
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/ceph/cephadm-commands-post.yml
583+
584+
Make sure to schedule a restart RGW services using `ceph orch restart RGW_SERVICE_NAME`
585+
586+
Attempt to upload a file using s3cmd with server side encryption requested.
587+
588+
.. code:: bash
589+
590+
s3cmd put foo.txt s3://bar --server-side-encryption --server-side-encryption-kms-id=UUID-FROM-SECRET-HREF
591+
592+
Use `s3cmd info` to check SSE is present
593+
594+
.. code:: bash
595+
596+
s3cmd info s3://bar/foo.txt
597+
s3://bar/foo.txt (object):
598+
File size: 14
599+
Last mod: Fri, 29 May 2026 17:16:33 GMT
600+
MIME type: text/plain
601+
Storage: STANDARD
602+
MD5 sum: 3223203c6b8bf5e61123044f99eb7a8c
603+
SSE: aws:kms
604+
Policy: none
605+
CORS: none
606+
ACL: admin: FULL_CONTROL
607+
x-amz-meta-s3cmd-attrs: atime:1780071502/ctime:1780071462/gid:1000/gname:cloud-user/md5:3223203c6b8bf5e61123044f99eb7a8c/mode:33188/mtime:1780071462/uid:1000/uname:cloud-user
608+
513609
Deployment
514610
==========
515611

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Document process for deploying RGW with SSE KMS support

0 commit comments

Comments
 (0)