IBM Cloud Docs
GPG 鍵の生成

GPG 鍵の生成

IBM Cloud DevSecOps 継続的インテグレーション・ツールチェーンによって作成され、インベントリに記録された成果物は、本番環境にデプロイする前に署名する必要があります。 継続的インテグレーションパイプラインでは、 Skopeo デフォルトのツールとして、アーティファクト署名機能を提供します。

DevSecOps 継続的インテグレーション・パイプラインが自動または手動で使用する GPG キーを作成し、保存します。

GPG 鍵を自動生成する

この方法を使用すると、テンプレートによって GPG 鍵が自動的に生成されます。 以下の手順を実行して、鍵生成の 名前 および E メール を入力します。

  1. 「成果物の署名」 に移動し、 「新規」 をクリックします。

    画像署名
    アーティファクト署名

  2. このウィンドウでは、 「名前」 フィールドと 「E メール」 フィールドにツールチェーン名と E メール ID が事前に入力されています。 GPG キーの要件を反映するように、名前と E メール ID を変更します。 ボックスを選択して、秘密プロバイダーに鍵を保管することもできます。

    名前とEメールを変更する
    名前とEメールを変更する

  3. 鍵が生成されたら、参照用にコピーすることができます。

    イメージ署名証明書
    図 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™

  • ダウンロードしてインストールする GitBashbase64 エンコーディングに必要)。
  • インストールした 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
  • お名前とメールアドレスを入力してください。
  • O を入力してキーの作成を開始します。
  • キーが生成されたら、 オプションO を選択します。

Windows™

GPG バージョン > 1.4

Git bash コマンド・プロンプトで、以下のコマンドを実行します。

gpg --pinentry-mode loopback --passphrase='' --generate-key
  • 「本名」の欄に名前を入力してください。
  • 「E メール・アドレス」 に E メール・アドレスを入力します。
  • O を入力してキーの作成を開始します。
  • キーが生成されたら、 オプションO を選択します。

GPG Version < 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 によるエンコードを2回行う必要があります。

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
  1. IBM Cloud コンソールで、前のステップで生成した GPG 鍵を保管する Key Protect インスタンスを選択します。

  2. 「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。

  3. 「独自のキーをインポート 」オプションを選択します。

  4. キータイプとして 「標準キー」 を選択します。

  5. 「キー名」フィールドに適切な名前を入力します。 保存されたGPGキーは、このキー名で後から取得できます。

  6. キー素材フィールドに以前エクスポートしたキーをコピーします。

    キーをコピーしてキー素材フィールドに貼り付ける際には、キーの末尾に余分な行がないことを確認してください。

  7. キーリングを選択するオプションをデフォルトとして選択します。

  8. 「鍵の追加」 をクリックして、鍵を 鍵保護に追加します。

    キープロテクトにキーを追加する
    キープロテクトにキーを追加する

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
  1. IBM Cloud コンソールで、前のステップで生成した GPG 鍵を保管する Secrets Manager インスタンスを選択します。

  2. 「追加 + (Add +)」 アイコンをクリックして、新しい鍵をインスタンスに追加します。

  3. 他の秘密のタイプのオプションを選択します。

    その他の秘密タイプ
    その他の秘密タイプ

  4. オプション 「Select a key type」「Standard Key」 タイプを選択します。

  5. 名前の欄に適切な名前を入力してください。 保管された GPG 鍵は、後からこの名前を使用して取り出せます。

  6. オプションを 「シークレット値」 として選択し、先にエクスポートしたキーを 「シークレット値」フィールドに貼り付けます。

    キーをコピーして 「Secret value」フィールドに貼り付ける際には、キーの末尾に余分な行がないことを確認してください。

  7. 「追加」 アイコンをクリックして、 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