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.crt
barbican 시크릿 저장소에 인증서를 추가합니다.
$ 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.b64
base64 값을 변수에 로드하여 후속 명령에서 사용합니다.
$ 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