11.8. Image サービス (glance) イメージの署名
イメージを検証するように Image サービス (glance) を設定する場合は、イメージをアップロードする前に署名する必要があります。openssl コマンドを使用して、Key Manager サービス (barbican) に保存されている鍵でイメージに署名し、付随するイメージプロパティーとともにイメージを Image サービスにアップロードします。イメージの署名は使用前に毎回検証されます。署名が一致しない場合は、インスタンスのビルドプロセスが失敗します。
制限事項
-
署名の検証は
openSSL _rsa_sig_verify()に基づいています。現在、鍵長が 1024 でない場合、Image サービスでInvalidSignature例外が発生します。この問題は、OpenSSL 3.0.7 のリグレッションが原因で発生します。署名の検証は、鍵長が 2048 で OpenSSL 3.0.2 の場合に正しく機能します。 - OpenSSL は SHA256 アルゴリズムをサポートしていません。署名されたイメージを作成するには、SHA512 以上を使用する必要があります。
手順
opensslコマンドを使用して鍵と証明書を作成します。秘密鍵を作成します。
$ 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 new_cert.crt
証明書を Key Manager サービスにアップロードします。証明書はサービスの
secret storeに保存されます。$ openstack secret store --name test --algorithm RSA --secret-type certificate \ --payload-content-type "application/octet-stream" \ --payload-content-encoding base64 \ --payload "$(base64 new_cert.crt)"出力例:
+---------------+-----------------------------------------------------------------------+ | Field | Value | +---------------+-----------------------------------------------------------------------+ | Secret href | http://127.0.0.1:9311/v1/secrets/cd7cc675-e573-419c-8fff-33a72734a243 | +---------------+-----------------------------------------------------------------------+注記後の手順で使用するため、証明書の UUID を記録しておいてください。この例では、UUID は
cd7cc675-e573-419c-8fff-33a72734a243です。イメージを取得して署名を作成します。
イメージを取得します。
$ echo <This is my image> > <myimage>private_key.pemを使用してイメージに署名し、.signatureファイルを生成します。以下に例を示します。$ openssl dgst -sha512 -sign private_key.pem -sigopt rsa_padding_mode:pss -out myimage.signature myimage.signatureファイルを Base64 形式に変換します。$ base64 -w 0 myimage.signature > myimage.signature.b64イメージをアップロードするときに使用する変数に Base64 値をロードします。
$ image_signature=$(cat myimage.signature.b64)
有効な署名プロパティーを持つイメージを Image サービスにアップロードします。
$ openstack image-create \ --name <my_signed_image> \ --container-format bare \ --disk-format qcow2 \ --property img_signature="$image_signature" \ --property img_signature_certificate_uuid="$cert_uuid" \ --property img_signature_hash_method='SHA-512' \ --property img_signature_key_type='RSA-PSS' < myimage