@@ -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
0 commit comments