4.4. Image Service (glance) イメージの署名
アップロードされたイメージが改ざんされていないことを確認するように Image Service (glance) を設定する場合、それらのイメージを使用してインスタンスを開始する前に、イメージに署名する必要があります。openssl
コマンドを使用して、barbican に保存されているキーを使用してイメージに署名し、イメージをアップロードして、付随する署名情報を一目で確認します。その結果、各使用前にイメージの署名が検証され、署名が一致しない場合、インスタンスのビルドプロセスに失敗しています。
前提条件
- 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
$ sudo crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf glance verify_glance_signatures
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記イメージおよび Compute サービスのバックエンドに Ceph を使用する場合、CoW クローンが作成されます。したがって、イメージ署名の検証は実行できません。
glance が barbican を使用するように設定されていることを確認します。
sudo crudini --get /var/lib/config-data/puppet-generated/glance_api/etc/glance/glance-api.conf key_manager backend
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書を生成します。
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記後のステップで使用するために、生成された UUID を記録します。以下の例では、証明書の UUID は
5df14c2b-f221-4a02-948e-48a61edd3f5b
です。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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成される
.signature
ファイルを base64 形式に変換します。base64 -w 0 cirros-0.4.0.signature > cirros-0.4.0.signature.b64
$ base64 -w 0 cirros-0.4.0.signature > cirros-0.4.0.signature.b64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 後続のコマンドで base64 値を変数に読み込みます。
cirros_signature_b64=$(cat cirros-0.4.0.signature.b64)
$ cirros_signature_b64=$(cat cirros-0.4.0.signature.b64)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 署名付きイメージを glance にアップロードします。
img_signature_certificate_uuid
の場合、前のステップで barbican にアップロードした署名キーの UUID を指定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow glance のイメージ検証のアクティビティーを次の Compute ログで表示することができます。
/var/log/containers/nova/nova-compute.log
たとえば、インスタンスの起動時に以下のエントリーが表示されるはずです。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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
スナップショットは、Image サービス (glance) イメージとして保存されます。Compute サービス (nova) が署名済みのイメージを確認するように設定する場合には、glance からイメージを手動でダウンロードし、そのイメージに署名してからイメージを再アップロードする必要があります。これは、スナップショットが署名済みイメージで作成されたインスタンスから、または署名済みイメージから作成されたボリュームから起動したインスタンスの場合に該当します。
4.4.1. スナップショットの検証 リンクのコピーリンクがクリップボードにコピーされました!
スナップショットは、Image サービス (glance) イメージとして保存されます。Compute サービス (nova) が署名済みイメージをチェックするように設定した場合には、署名されたイメージを持つインスタンスからスナップショットが作成された場合でも、スナップショットは署名する必要があります。
手順
glance からスナップショットをダウンロードする
openstack image save --file <local-file-name> <image-name>
openstack image save --file <local-file-name> <image-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 署名を生成してスナップショットを検証します。これは、イメージの検証に署名を生成する時に使用するプロセスと同じです。詳細は、Validating Image Service (glance) images を参照してください。
イメージの属性を更新します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) ダウンロードした glance イメージをファイルシステムから削除します。
rm <local-file-name>
rm <local-file-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow