GPG 鍵の生成
IBM Cloud DevSecOps 継続的統合ツールチェーンによってビルドされ、インベントリーに記録された成果物は、実動にデプロイする前に署名する必要があります。 継続的統合パイプラインは、成果物の署名機能を提供するデフォルト・ツールとして Skopeo を使用します。
DevSecOps 継続的統合パイプラインによって使用される GPG キーを自動または手動で作成して保管します。
GPG 鍵の自動生成
この方法を使用すると、テンプレートによって GPG 鍵が自動的に生成されます。 以下の手順を実行して、鍵生成の 名前 および E メール を入力します。
-
「成果物の署名」 に移動し、 「新規」 をクリックします。
図 1. 成果物の署名 -
このウィンドウでは、 「名前」 フィールドと 「E メール」 フィールドにツールチェーン名と E メール ID が事前に入力されています。 GPG キーの要件を反映するように、名前と E メール ID を変更します。 ボックスを選択して、秘密プロバイダーに鍵を保管することもできます。
図 2. 名前と 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) ユーティリティーによる制限です。このユーティリティーでは、パスフレーズで保護されている秘密鍵をパイプラインが受け入れることができません。 作成時にパスフレーズを指定すると、パイプラインは証明書のデコードに失敗し、パイプラインはイメージ署名ステップで失敗します。
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 (デフォルト) を選択します。
- keysize: デフォルトのまま (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>
エクスポートされたロー鍵を直接コピーしてはなりません。 このステップで生成された鍵は、 {{site.data.keyword.keymanagementserviceshort}} インスタンスまたは {{site.data.keyword.secrets-manager_short}} インスタンスに安全に保管することをお勧めします。 詳しくは、次のセクションを参照してください。
鍵の保管
GPG 鍵は、以下のいずれかの方法で CI パイプラインに提供する必要があります。
- {{site.data.keyword.keymanagementservicefull}} に保管
- {{site.data.keyword.secrets-manager_full}} に保管
- CI ツールチェーンに直接保管
インポートの失敗によって CI パイプラインの署名エラーが発生しないように、鍵は必ず正しいフォーマットでコピーしてください。 以下のコマンドで pbcopy
(Mac OS X) または clip
(Windows Git bash) を使用して、キーの内容をクリップボードにコピーします。
{{site.data.keyword.keymanagementserviceshort}} への鍵の保管
GPG 鍵をエクスポートしてクリップボードにコピーします。
GPG 鍵を {{site.data.keyword.keymanagementserviceshort}} インスタンスに保管する前に、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
-
{{site.data.keyword.cloud_notm}} コンソールで、前のステップで生成した GPG 鍵を保管する {{site.data.keyword.keymanagementserviceshort}} インスタンスを選択します。
-
「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。
-
「独自の鍵のインポート」 オプションを選択します。
-
「Select a key type」 を 「Standard Key」 として選択します。
-
「キー名」 フィールドに適切な名前を指定します。 保管された GPG 鍵は、後でこの鍵名で取得できます。
-
前に 「鍵素材」 フィールドでエクスポートした鍵をコピーします。
鍵をコピーして 「鍵素材」 フィールドに貼り付けるときに、鍵の末尾に追加の行がないことを確認してください。
-
デフォルトとして 「Choose a key ring」 オプションを選択します。
-
「鍵の追加」 をクリックして、鍵を 鍵保護に追加します。
図 4. Key Protect への鍵の追加
{{site.data.keyword.keymanagementserviceshort}} について詳しくは、{{site.data.keyword.keymanagementserviceshort}} の資料を参照してください。
{{site.data.keyword.secrets-manager_short}} への鍵の保管
GPG 鍵を {{site.data.keyword.secrets-manager_short}} インスタンスに保管する前に、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
-
{{site.data.keyword.cloud_notm}} コンソールで、前のステップで生成した GPG 鍵を保管する {{site.data.keyword.secrets-manager_short}} インスタンスを選択します。
-
「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。
-
「その他のシークレット・タイプ」 オプションを選択します。
図 5. その他のシークレット・タイプ -
オプション 「Select a key type」 で 「Standard Key」 タイプを選択します。
-
「名前」 フィールドに適切な名前を指定します。 保管された GPG 鍵は、後からこの名前を使用して取り出せます。
-
オプションとして 「シークレット値」 を選択し、前にエクスポートしたキーを 「シークレット値」 フィールドに貼り付けます。
キーをコピーして 「シークレットの値」 フィールドに貼り付けるときに、キーの末尾に余分な行がないことを確認してください。
-
「追加」 アイコンをクリックして、 {{site.data.keyword.keymanagementserviceshort}} インスタンスに鍵を追加します。
図 6. キー
{{site.data.keyword.secrets-manager_short}} について詳しくは、{{site.data.keyword.secrets-manager_short}} の概要を参照してください。
秘密鍵をエクスポートして CI パイプラインに直接保管する
この方法は推奨されておらず、実験にのみ使用する必要があります。 鍵を保管するには、 Key Protect
または Secrets Manager
を使用します。 詳しくは、 シークレット・ストアの構成 を参照してください。
GPG 鍵を保護されたパイプライン・プロパティーとして保管する前に、GPG 鍵の単一 base64
エンコードが必要です。
GPG 鍵は {{site.data.keyword.keymanagementserviceshort}} または {{site.data.keyword.secrets-manager_short}} のインスタンスに安全に保管してください。
Mac OS X/ Linux™
gpg --export-secret-key <Email Address> | base64
Windows™
gpg --export-secret-key <Email Address> | base64 -w0