5장. Cinder 볼륨 암호화


barbican을 사용하여 Block Storage(cinder) 암호화 키를 관리할 수 있습니다. 이 구성에서는 LUKS를 사용하여 부팅 디스크를 포함하여 인스턴스에 연결된 디스크를 암호화합니다. 키 관리는 사용자에게 투명합니다. luks 를 암호화 유형으로 사용하여 새 볼륨을 생성하면 cinder는 볼륨에 대한 대칭 키 시크릿을 생성하고 barbican에 저장합니다. 인스턴스를 부팅하거나 암호화된 볼륨을 연결할 때 nova는 barbican에서 키를 검색하고 해당 시크릿을 Compute 노드에 Libvirt 시크릿으로 로컬로 저장합니다.

중요

암호화되지 않은 경우 처음 사용하는 동안 Nova 형식이 암호화된 볼륨입니다. 그런 다음 결과 블록 장치가 컴퓨팅 노드에 제공됩니다.

참고

구성 파일을 업데이트하려면 특정 OpenStack 서비스가 컨테이너 내에서 실행됩니다. 이 서비스는 keystone, nova, cinder에 적용됩니다. 따라서 다음을 고려해야 할 관리 사례가 있습니다.

  • 물리적 노드의 호스트 운영 체제(예: /etc/cinder/cinder.conf )에 있는 구성 파일을 업데이트하지 마십시오. 컨테이너화된 서비스는 이 파일을 참조하지 않습니다.
  • 컨테이너 내에서 실행 중인 구성 파일을 업데이트하지 마십시오. 컨테이너를 다시 시작하면 변경 사항이 손실됩니다.

    대신 컨테이너화된 서비스를 변경해야 하는 경우 컨테이너를 생성하는 데 사용되는 /var/lib/config-data/puppet-generated/ 에서 구성 파일을 업데이트합니다.

    예를 들면 다음과 같습니다.

  • keystone: /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
  • cinder: /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf
  • nova: /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf

    변경 사항은 컨테이너를 재시작한 후 적용됩니다.

  1. cinder-volumenova-compute 서비스를 실행하는 노드에서 nova 및 cinder가 모두 키 관리에 barbican을 사용하도록 구성되어 있는지 확인합니다.

    $ crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf key_manager backend
    castellan.key_manager.barbican_key_manager.BarbicanKeyManager
    
    $ crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf key_manager backend
    castellan.key_manager.barbican_key_manager.BarbicanKeyManager
    Copy to Clipboard Toggle word wrap
  2. 암호화를 사용하는 볼륨 템플릿을 생성합니다. 새 볼륨을 만들 때 여기에 정의된 설정을 모델링할 수 있습니다.

    $ 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 LuksEncryptor-Template-256
    +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Field       | Value                                                                                                                                                                              |
    +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | description | None                                                                                                                                                                               |
    | encryption  | cipher='aes-xts-plain64', control_location='front-end', encryption_id='9df604d0-8584-4ce8-b450-e13e6316c4d3', key_size='256', provider='nova.volume.encryptors.luks.LuksEncryptor' |
    | id          | 78898a82-8f4c-44b2-a460-40a5da9e4d59                                                                                                                                               |
    | is_public   | True                                                                                                                                                                               |
    | name        | LuksEncryptor-Template-256                                                                                                                                                         |
    +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    Copy to Clipboard Toggle word wrap
  3. 새 볼륨을 생성하고 LuksEncryptor-Template-256 설정을 사용하도록 지정합니다.

    참고

    암호화된 볼륨을 생성하는 사용자에게 프로젝트에 대한 작성자 바bican 역할이 있는지 확인합니다. 자세한 내용은 creator 역할에 대한 사용자 액세스 권한 부여 섹션을 참조하십시오.

    $ openstack volume create --size 1 --type LuksEncryptor-Template-256 'Encrypted-Test-Volume'
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | attachments         | []                                   |
    | availability_zone   | nova                                 |
    | bootable            | false                                |
    | consistencygroup_id | None                                 |
    | created_at          | 2018-01-22T00:19:06.000000           |
    | description         | None                                 |
    | encrypted           | True                                 |
    | id                  | a361fd0b-882a-46cc-a669-c633630b5c93 |
    | migration_status    | None                                 |
    | multiattach         | False                                |
    | name                | Encrypted-Test-Volume                |
    | properties          |                                      |
    | replication_status  | None                                 |
    | size                | 1                                    |
    | snapshot_id         | None                                 |
    | source_volid        | None                                 |
    | status              | creating                             |
    | type                | LuksEncryptor-Template-256           |
    | updated_at          | None                                 |
    | user_id             | 0e73cb3111614365a144e7f8f1a972af     |
    +---------------------+--------------------------------------+
    Copy to Clipboard Toggle word wrap

    결과 시크릿은 barbican 백엔드에 자동으로 업로드됩니다.

  4. barbican을 사용하여 디스크 암호화 키가 있는지 확인합니다. 이 예제에서 타임스탬프는 LUKS 볼륨 생성 시간과 일치합니다.

    $ openstack secret list
    +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+
    | Secret href                                                                        | Name | Created                   | Status | Content types                             | Algorithm | Bit length | Secret type | Mode | Expiration |
    +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+
    | https://192.168.123.169:9311/v1/secrets/24845e6d-64a5-4071-ba99-0fdd1046172e | None | 2018-01-22T02:23:15+00:00 | ACTIVE | {u'default': u'application/octet-stream'} | aes       |        256 | symmetric   | None | None       |
    +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+
    Copy to Clipboard Toggle word wrap
  5. 기존 인스턴스에 새 볼륨을 연결합니다. 예를 들면 다음과 같습니다.

    $ openstack server add volume testInstance Encrypted-Test-Volume
    Copy to Clipboard Toggle word wrap

    그런 다음 볼륨이 게스트 운영 체제에 표시되고 내장 툴을 사용하여 마운트할 수 있습니다.

5.1. 기존 볼륨 키를 Barbican으로 마이그레이션

이전에는 배포에서 ConfKeyManager 를 사용하여 디스크 암호화 키를 관리할 수 있었습니다. 이는 고정된 키가 생성되었으며 nova 및 cinder 구성 파일에 저장되었습니다. 다음 절차를 사용하여 키 ID를 barbican으로 마이그레이션할 수 있습니다. 이 유틸리티는 barbican으로 마이그레이션을 위해 범위 내에서 encryption_key_id 항목의 데이터베이스를 스캔하여 작동합니다. 각 항목은 새 barbican 키 ID를 가져오고 기존 ConfKeyManager 시크릿은 유지됩니다.

참고

이전에는 ConfKeyManager 를 사용하여 암호화된 볼륨의 소유권을 다시 할당할 수 있었습니다. barbican으로 관리하는 볼륨은 사용할 수 없습니다.

참고

barbican을 활성화하면 기존 keymgr 볼륨이 손상되지 않습니다.

마이그레이션 프로세스가 활성화되면 마이그레이션 프로세스가 자동으로 실행되지만 다음 섹션에 설명된 일부 구성이 필요합니다. 실제 마이그레이션은 cinder-volumecinder-backup 프로세스에서 실행되며 cinder 로그 파일의 진행 상황을 추적할 수 있습니다.

  • Cinder-volume - cinder 의 볼륨 및 스냅샷 테이블에 저장된 키를 마이그레이션합니다.
  • cinder-backup - Backups 테이블에서 키를 마이그레이션합니다.

5.1.1. 마이그레이션 단계 개요

  1. barbican 서비스를 배포합니다.
  2. cinder 서비스에 creator 역할을 추가합니다. 예를 들면 다음과 같습니다.

    #openstack role create creator
    #openstack role add --user cinder creator  --project service
    Copy to Clipboard Toggle word wrap
  3. cinder-volumecinder-backup 서비스를 다시 시작합니다.
  4. cinder-volumecinder-backup 은 마이그레이션 프로세스를 자동으로 시작합니다.
  5. 마이그레이션이 완료되었음을 나타내는 메시지의 로그를 모니터링하고 ConfKeyManager all-zeros 암호화 키 ID를 더 이상 사용하지 않는지 확인합니다.
  6. cinder.confnova.conf 에서 fixed_key 옵션을 제거합니다. 이 설정이 구성되어 있는 노드를 확인해야 합니다.
  7. cinder 서비스에서 creator 역할을 제거합니다.

5.1.2. 동작 차이점

Barbican-managed 암호화된 볼륨은 ConfKeyManager 를 사용하는 볼륨과 다르게 동작합니다.

  • 현재 barbican 시크릿의 소유권을 양도할 수 없기 때문에 암호화된 볼륨에 대한 소유권을 양도할 수 없습니다.
  • Barbican은 일부 cinder 볼륨 작업에 영향을 줄 수 있는 시크릿을 읽고 삭제할 수 있는 사람을 더욱 제한적입니다. 예를 들어 사용자는 다른 사용자의 볼륨을 연결, 분리 또는 삭제할 수 없습니다.

5.1.3. 마이그레이션 프로세스 검토

이 섹션에서는 마이그레이션 작업의 상태를 확인하는 방법에 대해 설명합니다. 프로세스를 시작하면 이러한 항목 중 하나가 로그에 표시됩니다. 이는 마이그레이션이 올바르게 시작되었는지 또는 발생한 문제를 식별하는지 여부를 나타냅니다.

  • ConfKeyManager가 여전히 사용 중이므로 암호화 키를 마이그레이션하지 않습니다.
  • ConfKeyManager의 fixed_key가 사용되지 않기 때문에 암호화 키를 마이그레이션하지 않습니다.
  • 'XXX' key_manager 백엔드로 마이그레이션이 지원되지 않으므로 암호화 키를 마이그레이션하지 않습니다. - 이 메시지는 나타나지 않습니다. 이 메시지는 barbican 이외의 다른 Key Manager 백엔드가 발생하는 코드를 처리하는 안전한 검사입니다. 이는 코드가 하나의 마이그레이션 시나리오만 지원하기 때문입니다. ConfKeyManager 에서 b arbican에 있습니다.
  • 이 호스트와 연결된 볼륨이 없기 때문에 암호화 키를 마이그레이션하지 않습니다. - cinder-volume 이 여러 호스트에서 실행되고 있을 때 발생할 수 있으며 특정 호스트에 해당 볼륨이 연결되어 있지 않습니다. 이는 모든 호스트가 자체 볼륨을 처리하므로 이러한 문제가 발생합니다.
  • ConfKeyManager 키의 마이그레이션을 시작합니다.
  • 볼륨 <UUID> 암호화 키를 Barbican로 마이그레이션 - 마이그레이션 중에 호스트의 모든 볼륨이 검사되고 볼륨이 여전히 ConfKeyManager의 키 ID(00000000-0000-0000-000000000000)임을 확인하면 이 메시지가 표시됩니다.

    • cinder-backup 의 경우 이 메시지는 약간 다른 대문자를 사용합니다. 볼륨 마이그레이션 [...]
  • 각 호스트에서 모든 볼륨을 검사하면 호스트에 요약 상태 메시지가 표시됩니다.

    `No volumes are using the ConfKeyManager's encryption_key_id.`
    `No backups are known to be using the ConfKeyManager's encryption_key_id.`
    Copy to Clipboard Toggle word wrap

    다음 항목도 볼 수 있습니다.

    ConfKeyManager의 모든 0 암호화 키 ID를 사용하는%d 볼륨이 여전히 있습니다.ConfKeyManager의 모든 0s 암호화 키 ID를 사용하는 %d 백업이 여전히 있습니다. 이러한 두 메시지 모두 cinder-volumecinder-backup 로그에 표시될 수 있습니다. 각 서비스는 자체 항목의 마이그레이션만 처리하는 반면, 서비스는 다른 항목의 상태를 확인합니다. 그 결과 cinder-volume cinder-backup 이 여전히 마이그레이션할 백업이 있는지 알고 있으며 cinder-volume 서비스에 마이그레이션할 볼륨이 있는지 여부를 알고 있습니다.

    각 호스트는 자체 볼륨만 마이그레이션하지만 요약 메시지는 여전히 마이그레이션이 필요한지 여부에 대한 글로벌 평가를 기반으로 하므로 모든 볼륨에 대한 마이그레이션이 완료되었는지 확인할 수 있습니다. 확인이 수신되면 cinder.confnova.conf 에서 fixed_key 설정을 제거하십시오. 자세한 내용은 아래 고정된 키 정리 섹션을 참조하십시오.

5.1.4. 마이그레이션 프로세스 문제 해결

5.1.4.1. 역할 할당

barbican 시크릿은 요청자에게 create 역할이 있는 경우에만 생성할 수 있습니다. 즉, cinder 서비스 자체에 생성자 역할이 필요합니다. 그렇지 않으면 다음과 유사한 로그 시퀀스가 발생합니다.

  1. ConfKeyManager 키의 마이그레이션을 시작합니다.
  2. 볼륨 <UUID> 암호화 키를 Barbican으로 마이그레이션
  3. error migrating encryption key: Forbidden: Secret creation attempt not allowed - 사용자/프로젝트 권한을 검토하십시오.
  4. ConfKeyManager의 all-zeros 암호화 키 ID를 사용하여 여전히 %d 볼륨이 있습니다.

키 메시지는 세 번째: 시크릿 생성 시도가 허용되지 않습니다. 이 문제를 해결하려면 cinder 계정의 권한을 업데이트합니다.

  1. openstack role add --project service --user cinder creator를 실행합니다.
  2. cinder-volumecinder-backup 서비스를 다시 시작합니다.

따라서 마이그레이션 시 다음 시도가 성공해야 합니다.

5.1.5. 수정된 키를 정리합니다.

중요

encryption_key_id 는 Queens 릴리스의 일부로 최근 백업 테이블에 추가되었습니다. 결과적으로 암호화된 볼륨의 기존 백업이 존재할 가능성이 높습니다. all-zeros encryption_key_id 는 백업 자체에 저장되지만 Backup 데이터베이스에는 표시되지 않습니다. 따라서 암호화된 볼륨의 백업이 모두 0인 ConfKeyMgr 키 ID에 의존하는 암호화된 볼륨의 백업이 존재하는지에 대해 마이그레이션 프로세스에서는 알 수 없습니다.

키 ID를 barbican로 마이그레이션한 후 고정 키는 구성 파일에 유지됩니다. fixed_key 값이 .conf 파일에서 암호화되지 않으므로 일부 사용자에게 보안 문제가 표시될 수 있습니다. 이 문제를 해결하려면 nova 및 cinder 구성에서 fixed_key 값을 수동으로 제거할 수 있습니다. 그러나 이 값에 종속된 디스크는 여전히 액세스할 수 없기 때문에 먼저 완료하여 로그 파일의 출력을 검토합니다.

  1. 기존 fixed_key 값을 검토합니다. 두 서비스 모두의 값과 일치해야 합니다.

    crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key
    crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key
    Copy to Clipboard Toggle word wrap
  2. 중요: 기존 fixed_key 값을 백업하십시오. 이렇게 하면 문제가 발생 하는 경우 값을 복원 하거나 이전 암호화 키를 사용 하는 백업을 복원 해야 합니다.This allows you to restore the value if something goes wrong, or if you need to restore a backup that uses the old encryption key.
  3. fixed_key 값을 삭제합니다.

    crudini --del /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key
    crudini --del /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat