GPG 鍵の生成
IBM Cloud DevSecOps 継続的統合ツールチェーンによってビルドされ、インベントリに記録された成果物は、本番環境にデプロイされる前に署名する必要があります。 継続的インテグレーション・パイプラインでは Skopeo をデフォルトのツールとして使用し、アーティファクトの署名機能を提供する。
DevSecOps 継続的インテグレーション・パイプラインが自動または手動で使用する GPG キーを作成し、保存します。
GPG鍵を自動生成する
この方法を使用すると、テンプレートによって GPG 鍵が自動的に生成されます。 以下の手順を実行して、鍵生成の 名前 および E メール を入力します。
-
「成果物の署名」 に移動し、 「新規」 をクリックします。
アーティファクト署名 -
このウィンドウでは、 「名前」 フィールドと 「E メール」 フィールドにツールチェーン名と E メール ID が事前に入力されています。 GPG キーの要件を反映するように、名前と E メール ID を変更します。 ボックスを選択して、秘密プロバイダーに鍵を保管することもできます。
名前とEメールを変更する -
鍵が生成されたら、参照用にコピーすることができます。
図 3 成果物署名証明書
コピーされた鍵は base64 形式です。 キーホルダー にインポートする前に、キーを デコードし てください。 echo <encoded_gpg_key> | base64 --decode
手動でGPG鍵を生成する
GPG コマンド・ライン・ツールのダウンロードとインストール
お使いのオペレーティングシステム用の GPGコマンドラインツールをダウンロードし、インストールする。 GnuPG バイナリリリースのセクションにアクセスして、お使いのオペレーティングシステム用のツールをダウンロードしてください。
Mac OS X
- Mac GPGをダウンロードしてインストールします。
- インストールした GPG のバージョンを確認します。 コマンド・ラインから、次のコマンドを入力します。
$ gpg --version
gpg (GnuPG) 2.3.1
libgcrypt 1.9.3
Copyright (C) 2021 Free Software Foundation, Inc.
- 2.3.1 より前のバージョンのGPGでは、 --passphrase='' オプションを使用できない場合がある。 この場合、プロンプトが出されたら Enter キーを押して、以下のダイアログでパスワードを省略できます。
Windows™
- ダウンロードとインストール GitBash (
base64エンコーディングに必要)。 - インストールした GPG のバージョンを確認します。 Git bash コマンド・プロンプトで以下のコマンドを実行します。
$ gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.8.7
Copyright (C) 2021 g10 Code GmbH
GPG 鍵の生成
generate-key コマンドでパスフレーズを要求するダイアログを開く場合は、パスフレーズとフィールドを空のままにします。 これは、パスフレーズで保護された秘密鍵をパイプラインが受け付けないという、画像署名の (skopeo) ユーティリティの制限である。 作成時にパスフレーズを指定すると、パイプラインは証明書のデコードに失敗し、パイプラインはイメージ署名ステップで失敗します。 これはGITタグの署名にも適用できることに注意してください。
Mac OS X そして Linux™
シェルプロンプトから以下のコマンドを実行する:
gpg --pinentry-mode loopback --passphrase='' --generate-key
- お名前とEメールアドレスを入力してください。
- キー作成を開始するには Oを入力する。
- キーが生成されたら、 O オプションを選択する。
Windows™
GPG バージョン > 1.4
Git bash コマンド・プロンプトで、以下のコマンドを実行します。
gpg --pinentry-mode loopback --passphrase='' --generate-key
- 本名フィールドにあなたの名前を入力してください。
- 「E メール・アドレス」 に E メール・アドレスを入力します。
- Oを入力し、鍵の作成を開始する。
- キーが生成されたら、 O オプションを選択する。
GPGバージョン < 1.4 (または前のコマンドで失敗した場合)
Git bash コマンド・プロンプトで、以下のコマンドを実行します。
gpg --gen-key
- 鍵の種類 :デフォルト・オプション (1)RSAおよびRSA(デフォルト )を選択する
- キーサイズ :デフォルトのまま(2048)
- key validity: デフォルト値を 0 のままにします。 これは、値キー 0 が期限切れにならないためです。
- 選択を確認: yを入力。
- 「実名」 フィールドに自分の名前を入力します。
- 「E メール・アドレス」 に E メール・アドレスを入力します。
- キー作成を開始するには Oを入力する。
- キーが生成されたら、 O オプションを選択する。
鍵の作成の確認
gpg 鍵が作成されたことを確認します。 コマンドプロンプトから以下のコマンドを実行する:
gpg --list-keys
鍵がリストされていることを確認します。 Windows での出力例:
$ gpg --list-keys
/c/Users/FredSmith/.gnupg/pubring.gpg
-------------------------------------
pub 2048R/1BB354B5 2021-06-08
uid Fred Smith <fred@company.com>
sub 2048R/F91C39A6 2021-06-08
鍵のエクスポート
このステップはオプションです。 以下のコマンドを実行して、gpg 鍵がエクスポート可能であることを確認します。
gpg --export-secret-key <Email Address>
エクスポートされたロー鍵を直接コピーしてはなりません。 このステップで生成された鍵は、 Key Protect インスタンスまたは Secrets Manager インスタンスに安全に保管することを推奨する。 詳しくは、次のセクションを参照してください。
鍵の保管
GPG 鍵は、以下のいずれかの方法で CI パイプラインに提供する必要があります。
- IBM® Key Protect for IBM Cloud® に保管
- IBM Cloud® Secrets Manager に保管
- CI ツールチェーンに直接保管
インポートの失敗によって CI パイプラインの署名エラーが発生しないように、鍵は必ず正しいフォーマットでコピーしてください。 以下のコマンドで pbcopy ( Mac OS X ) または clip (Windows Git bash)を使い、キーの内容をクリップボードにコピーする。
Key Protect への鍵の保管
GPG 鍵をエクスポートしてクリップボードにコピーします。
Key Protect インスタンスに保存する前に、GPG キーのダブル base64 エンコーディングが必要です。
OS X
gpg --export-secret-key <Email Address> | base64 | base64 | pbcopy
Windows™
gpg --export-secret-key <Email Address> | base64 -w0 | base64 -w0 | clip
Linux™
gpg --export-secret-key <Email Address> | base64 | base64
-
IBM Cloud コンソールで、前のステップで生成した GPG 鍵を保管する Key Protect インスタンスを選択します。
-
「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。
-
キーをインポートするオプションを選択します。
-
キータイプを 標準キーに選択します。
-
キー名フィールドに適切な名前を付ける。 保存されたGPG鍵は、この鍵名で後で取り出すことができる。
-
先ほどエクスポートしたキーをキーマテリアルフィールドにコピーする。
キーをコピーしてキーマテリアル・フィールドにペーストする際、キーの最後に余分な行がないことを確認してください。
-
デフォルトでキーホルダーを選択します。
-
「鍵の追加」 をクリックして、鍵を 鍵保護に追加します。
キープロテクトにキーを追加する
Key Protect について詳しくは、Key Protect の資料を参照してください。
Secrets Manager への鍵の保管
GPG 鍵を Secrets Manager インスタンスに保管する前に、GPG 鍵の単一 base64 エンコードが必要です。
GPG 鍵をエクスポートしてクリップボードにコピーします。
OS X
gpg --export-secret-key <Email Address> | base64 | pbcopy
Windows™
gpg --export-secret-key <Email Address> | base64 -w0 | clip
Linux™
gpg --export-secret-key <Email Address> | base64
-
IBM Cloud コンソールで、前のステップで生成した GPG 鍵を保管する Secrets Manager インスタンスを選択します。
-
「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。
-
その他の秘密タイプオプションを選択します。
その他の秘密タイプ -
オプション 「Select a key type」 で 「Standard Key」 タイプを選択します。
-
名前フィールドに適切な名前を付ける。 保管された GPG 鍵は、後からこの名前を使用して取り出せます。
-
シークレット値としてオプションを選択し、 シークレット値フィールドに先ほどエクスポートしたキーを貼り付けます。
キーをコピーしてシークレット値フィールドに貼り付ける際、キーの最後に余分な行がないことを確認してください。
-
「追加」 アイコンをクリックして、 Key Protect インスタンスに鍵を追加します。
キーを追加
キーを追加
Secrets Manager について詳しくは、Secrets Manager の概要を参照してください。
秘密鍵をエクスポートして CI パイプラインに直接保管する
この方法は推奨されるものではなく、あくまで実験的なものであるべきだ。 キーの保管には Key Protect または Secrets Manager。 詳しくは、 シークレット・ストアの構成 を参照してください。
GPG 鍵を保護されたパイプライン・プロパティーとして保管する前に、GPG 鍵の単一 base64 エンコードが必要です。
GPG 鍵は Key Protect または Secrets Manager のインスタンスに安全に保管してください。
Mac OS X / Linux™
gpg --export-secret-key <Email Address> | base64
Windows™
gpg --export-secret-key <Email Address> | base64 -w0