AOC55

Cloud, Devops, Backend, Kubernetes, Openstack, ...

Cloud/Openstack

Openstack :: barbican 이란?

aoc55.soft@gmail.com 2025. 2. 8. 21:38

개인적으로 공부하는 관점에서 작성한 내용이라, 잘못된 부분이 있을 수 있습니다. 잘못된 부분은 말씀주시면 감사하겠습니다


본 내용은 아래 자료를 기반으로 학습하면서 작성했습니다.


Barbican 이란?

개요

Barbican - "Openstack Key Manager"로 시크릿 관리자 역할로 Opensatck 서비스에서 사용하는 인증서, Key 등을 중앙에서 관리할 수 있음

여기서 Secret 이란? 인증서, API 키, 암호화 등 모두 지칭 하는 용어


저장하는 Secret 예시

  • 대칭 암호화키 (Symmetric)
  • 비대칭 키 (Asymmetric)
  • 인증서 ... 등

활용 예시

  • 대칭 암호화키를 통한 Block Storage / Ephemeral Disk / Object Storage 암호화
  • 비대칭키와 인증서를 사용한 Glance 이미지 서명 및 확인

Barbican 구성

barbican-api

  • Openstack Native 한 Restful API 서비스 제공의 역할
  • 즉, User or 다른 Service 에게 API를 통해 Secret 생성, 조회, 삭제 등등.. 의 기능을 제공
  • 예를 들어, Cinder 볼륨 암호화에 사용하는 경우 Cinder 서비스와 연동해서 관련 Secret 정보 등 제공
  • 내부적으로 메세지 큐와 연계해서 요청 처리

barbican-worker

  • barbican-api 와 함께 동작하며 주로 비동기적인 작업을 담당함
  • Openstack RPC 인터페이스 제공을 통해 barbican-api으로부터 수신한 요청을 처리

barbican-api ~ barbican-worker 연계 흐름

  1. barbican-api가 암호화 키를 요청하면→ RabbitMQ에 작업 메시지를 추가
  2. barbican-worker가 메시지 큐에서 요청을 읽음
  3. 암호화 키를 생성 & 백엔드(HSM, Vault 등)에서 저장
  4. 결과를 barbican-api에 전달하여 사용자가 조회 가능하도록 처리

barbican-keystone-listener

  • Keystone 에서 발생하는 프로젝트 관련 이벤트 감지를 해서 Barbican DB 를 자동으로 업데이트
  • 즉, Keystone과 Barbaican 과의 데이터 동기화 역할 수행
  • ex. Keystone 에서 프로젝트 삭제 시 Barbican 에서 관련 데이터 정리 수행
  • 아마.. 프로젝트 삭제 시 관련된 암호화 데이터도 삭제를 보장하기 위해서 있는 듯 (보안 문제 방지를 위해서)

Barbiacn 백엔드

Barbican의 백엔드 구성으로 (1) 데이터베이스에 BLOB 타입으로 저장하는 방식과, (2) 실제 보안 스토리지 시스템에 직접 저장하는 방식 등이 있음

BLOB(Binary Large Object) - 데이터베이스에서 대용량 바이너리 데이터를 저장하는 데이터 타입으로 주로 이미지, 오디오, 비디오, PDF, ZIP 파일 등의 비정형 데이터를 저장할 때 사용됩니다

Brabican 암호화 플러그인

데이터베이스에 암호화된 BLOB으로 저장할 때 어떤 플러그인을 사용하냐이고 아래와 같은 플러그인 이 있음

  • simple_crypto
  • p11_crypto
  • kmip_plugin 등..

자세한 플러그인은 아래 링크에서 확인할 수 있음

Barbical CLI Hands-On

openstack secret list

openstack secret store --name test-secret --payload 'test-playload'


openstack secret get http://barbican-api.openstack.svc.cluster.local:9311/v1/secrets/f7410d6d-0483-44f6-b8f8-99cfeadce3d1

  • 조회 시 이름이 아닌 Secret href 기반으로 CLI 수행


openstack secret get http://barbican-api.openstack.svc.cluster.local:9311/v1/secrets/f7410d6d-0483-44f6-b8f8-99cfeadce3d1 --payload

  • Payload 내용 조회


openstack secret delete http://barbican-api.openstack.svc.cluster.local:9311/v1/secrets/b051a1fc-0879-4d17-a8d0-8e303c5f63f0

  • 조회 시 이름이 아닌 Secret href 기반으로 삭제


openstack secret order create --name swift\_key --algorithm aes --mode ctr --bit-length 256 --payload-content-type=application/octet-stream key\

  • 대칭키 생성


openstack secret order create --name swift_key --algorithm aes --mode ctr --bit-length 256 --payload-content-type=application/octet-stream key

  • 대칭키 조회

 

Barbican 활용한 Cinder 암호화

Barbican 을 통한 Cinder 암호화 목적

from ChatGPT

Cloud 환경에서는 여러 사용자가 동일한 디스크 인프라 사용함에 따라 데이터 유출 위험이 있을 수 있음

암호화 수행을 통해서 물리적 혹은 논리적으로 직접 접근하더라도 저장된 데이터 직접 읽을 수 없으므로 기밀성이 유지

따라서 이는 다중 테넌트 환경에서 특히 중요

Nova ~ Cinder 간 주요 흐름

from ChatGPT

① Nova → Cinder에 루트 볼륨 요청
② Cinder → 암호화된 볼륨 생성 (LUKS)
③ Cinder → Barbican에서 암호화 키 요청
④ Barbican → 키 반환
⑤ Cinder → Compute 노드로 볼륨 전달
⑥ Nova → OS-Brick을 통해 암호화된 볼륨 마운트 및 해독
⑦ Nova → 인스턴스 부팅

실습

암호화를 지원하는 Volume Type 생성

openstack volume type create --encryption-provider nova.volume.encryptors.luks.LuksEncryptor   --encryption-cipher aes-xts-plain64 --encryption-key-size 256 --encryption-control-location front-end LUKS

Skyline 에서 Volume Type 조회

  • Encyiption Info 확인 가능

암호화 Volume 생성

# Volume 생성
# 위에서 지정한 Volume Type 지정
openstack volume create --type LUKS --size=10 encrypt-vol-test-1
# 조회
openstack volume show encrypt-vol-test-1

+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | az1                                  |
| bootable                       | false                                |
| consistencygroup_id            | None                                 |
| created_at                     | 2025-02-07T13:34:14.000000           |
| description                    | None                                 |
| encrypted                      | True                                 |
| id                             | fa7e4f73-eeec-4be1-b1d5-14c93927573d |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | encrypt-vol-test-1                   |
| os-vol-host-attr:host          | cinder-volume-worker@rbd1#rbd1       |
| os-vol-mig-status-attr:migstat | None                                 |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | 98cbfc7aace14b9bad37d523d655cf5c     |
| properties                     |                                      |
| replication_status             | None                                 |
| size                           | 10                                   |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | available                            |
| type                           | LUKS                                 |
| updated_at                     | 2025-02-07T13:34:28.000000           |
| user_id                        | 8343471505f6457786f301635c5bd26f     |
+--------------------------------+--------------------------------------+

Skyline 에서 Volume 조회

참고 - 암호화한 Volume 은 Transfer 를 지원하지 않음

openstack volume transfer request create encrypt-vol-test-1

Invalid volume: transferring encrypted volume is not supported (HTTP 400) (Request-ID: req-ff472f33-9683-403e-be15-ead7a52ac6b2)

Secret 조회

Volume 생성 이후 Barbican 조회 시,신규 Symmetric 타입의 Secret 생성되어 있음을 확인