4.4. Image 서비스(glance) 이미지에 서명
업로드된 이미지가 변조되지 않았는지 확인하도록 Image 서비스(glance)를 구성할 때 해당 이미지를 사용하여 인스턴스를 시작하기 전에 이미지에 서명해야 합니다. openssl 명령을 사용하여 barbican에 저장된 키로 이미지에 서명한 다음 관련 서명 정보를 사용하여 이미지를 Glance에 업로드합니다. 결과적으로 매번 사용하기 전에 이미지의 서명을 확인하고 서명이 일치하지 않으면 인스턴스 빌드 프로세스가 실패합니다.
사전 요구 사항
- OpenStack Key Manager가 설치 및 활성화됨
프로세스
-
환경 파일에서
VerifyGlanceSignatures: True설정을 사용하여 이미지 확인을 활성화합니다. 이 설정을 적용하려면openstack overcloud deploy명령을 다시 실행해야 합니다. Glance 이미지 검증이 활성화되었는지 확인하려면 오버클라우드 컴퓨팅 노드에서 다음 명령을 실행합니다.
$ sudo crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf glance verify_glance_signatures참고Ceph를 Image 및 Compute 서비스의 백엔드로 사용하면 CoW 복제가 생성됩니다. 따라서 이미지 서명 확인을 수행할 수 없습니다.
glance가 barbican을 사용하도록 구성되어 있는지 확인합니다.
$ sudo crudini --get /var/lib/config-data/puppet-generated/glance_api/etc/glance/glance-api.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager인증서를 생성합니다.
openssl genrsa -out private_key.pem 1024 openssl rsa -pubout -in private_key.pem -out public_key.pem openssl req -new -key private_key.pem -out cert_request.csr openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out x509_signing_cert.crtbarbican 시크릿 저장소에 인증서를 추가합니다.
$ source ~/overcloudrc $ openstack secret store --name signing-cert --algorithm RSA --secret-type certificate --payload-content-type "application/octet-stream" --payload-content-encoding base64 --payload "$(base64 x509_signing_cert.crt)" -c 'Secret href' -f value https://192.168.123.170:9311/v1/secrets/5df14c2b-f221-4a02-948e-48a61edd3f5b참고이후 단계에서 사용할 결과 UUID를 기록합니다. 이 예에서 인증서의 UUID는
5df14c2b-f221-4a02-948e-48a61ed3f5b입니다.private_key.pem을 사용하여 이미지에 서명하고.signature파일을 생성합니다. 예를 들면 다음과 같습니다.$ openssl dgst -sha256 -sign private_key.pem -sigopt rsa_padding_mode:pss -out cirros-0.4.0.signature cirros-0.4.0-x86_64-disk.img생성된
.signature파일을 base64 형식으로 변환합니다.$ base64 -w 0 cirros-0.4.0.signature > cirros-0.4.0.signature.b64base64 값을 변수에 로드하여 후속 명령에서 사용합니다.
$ cirros_signature_b64=$(cat cirros-0.4.0.signature.b64)서명된 이미지를 Glance에 업로드합니다.
img_signature_certificate_uuid의 경우 이전에 barbican에 업로드한 서명 키의 UUID를 지정해야 합니다.openstack image create \ --container-format bare --disk-format qcow2 \ --property img_signature="$cirros_signature_b64" \ --property img_signature_certificate_uuid="5df14c2b-f221-4a02-948e-48a61edd3f5b"\ --property img_signature_hash_method="SHA-256" \ --property img_signature_key_type="RSA-PSS" cirros_0_4_0_signed \ --file cirros-0.4.0-x86_64-disk.img +--------------------------------+----------------------------------------------------------------------------------+ | Property | Value | +--------------------------------+----------------------------------------------------------------------------------+ | checksum | None | | container_format | bare | | created_at | 2018-01-23T05:37:31Z | | disk_format | qcow2 | | id | d3396fa0-2ea2-4832-8a77-d36fa3f2ab27 | | img_signature | lcI7nGgoKxnCyOcsJ4abbEZEpzXByFPIgiPeiT+Otjz0yvW00KNN3fI0AA6tn9EXrp7fb2xBDE4UaO3v | | | IFquV/s3mU4LcCiGdBAl3pGsMlmZZIQFVNcUPOaayS1kQYKY7kxYmU9iq/AZYyPw37KQI52smC/zoO54 | | | zZ+JpnfwIsM= | | img_signature_certificate_uuid | ba3641c2-6a3d-445a-8543-851a68110eab | | img_signature_hash_method | SHA-256 | | img_signature_key_type | RSA-PSS | | min_disk | 0 | | min_ram | 0 | | name | cirros_0_4_0_signed | | owner | 9f812310df904e6ea01e1bacb84c9f1a | | protected | False | | size | None | | status | queued | | tags | [] | | updated_at | 2018-01-23T05:37:31Z | | virtual_size | None | | visibility | shared | +--------------------------------+----------------------------------------------------------------------------------+Compute log:
/var/log/containers/nova/nova-compute.log에서 Glance의 이미지 검증 활동을 볼 수 있습니다. 예를 들어 인스턴스가 부팅될 때 다음 항목을 기대할 수 있습니다.2018-05-24 12:48:35.256 1 INFO nova.image.glance [req-7c271904-4975-4771-9d26-cbea6c0ade31 b464b2fd2a2140e9a88bbdacf67bdd8c a3db2f2beaee454182c95b646fa7331f - default default] Image signature verification succeeded for image d3396fa0-2ea2-4832-8a77-d36fa3f2ab27
스냅샷은 Image 서비스(glance) 이미지로 저장됩니다. 서명된 이미지를 확인하도록 Compute 서비스(nova)를 구성하는 경우 Glance에서 이미지를 수동으로 다운로드하고 이미지에 서명한 다음 이미지를 다시 업로드해야 합니다. 이는 스냅샷이 서명된 이미지로 생성된 인스턴스인지 아니면 서명된 이미지에서 생성된 볼륨에서 부팅되었는지 여부입니다.
4.4.1. 스냅샷 검증 링크 복사링크가 클립보드에 복사되었습니다!
스냅샷은 Image 서비스(glance) 이미지로 저장됩니다. 서명된 이미지를 확인하도록 Compute 서비스(nova)를 구성하는 경우 서명된 이미지가 있는 인스턴스에서 생성된 경우에도 스냅샷은 서명해야 합니다.
절차
Glance에서 스냅샷 다운로드
openstack image save --file <local-file-name> <image-name>- 스냅샷을 검증하기 위해 서명을 생성합니다. 이 프로세스는 서명을 생성하여 이미지의 유효성을 검사할 때 사용하는 프로세스와 동일합니다. 자세한 내용은 Image 서비스(glance) 이미지 검증을 참조하십시오.
이미지 속성을 업데이트합니다.
openstack image set \ --property img_signature="$cirros_signature_b64" \ --property img_signature_certificate_uuid="5df14c2b-f221-4a02-948e-48a61edd3f5b" \ --property img_signature_hash_method="SHA-256" \ --property img_signature_key_type="RSA-PSS" \ <image_id_of_the_snapshot>선택 사항: 파일 시스템에서 다운로드한 Glance 이미지를 제거합니다.
rm <local-file-name>