產生 GPG 金鑰

由IBM Cloud DevSecOps持續整合工具鏈建置並記錄在清單中的工件必須在部署到生產之前進行簽署。 連續整合管線使用 Skopeo 作為預設工具來提供構件簽署功能。

建立並儲存DevSecOps持續整合管道自動或手動使用的 GPG 金鑰。

自動產生 GPG 金鑰

使用此方法,範本會為您產生 GPG 金鑰。 完成下列步驟,以輸入金鑰產生的 名稱電子郵件:

  1. 移至 構件簽署,然後按一下 新建

    圖像簽名
    工件簽名

  2. 在視窗中,名稱電子郵件 欄位會預先移入工具鏈名稱及電子郵件 ID。 變更名稱及電子郵件 ID,以反映您的 GPG 金鑰需求。 您也可以透過選取方框,將金鑰儲存在密鑰提供者中。

    更改姓名和電子郵件
    更改姓名和電子郵件

  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™

  • 下載並安裝 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™

從 Shell 提示中,執行下列指令:

gpg --pinentry-mode loopback --passphrase='' --generate-key
  • 輸入您的姓名和電子郵件地址。
  • 輸入 O 以起始建立金鑰。
  • 產生金鑰之後,請選取選項 O

Windows™

GPG 版本> 1.4

從 Git Bash 命令提示字元,執行下列指令:

gpg --pinentry-mode loopback --passphrase='' --generate-key
  • 真實姓名欄位中輸入您的姓名。
  • 電子郵件位址中輸入您的電子郵件位址。
  • 輸入 O 以起始金鑰建立。
  • 產生金鑰之後,請選取選項 O

GPG 版本 < 1.4 (或之前的指令有任何失敗)

從 Git Bash 命令提示字元,執行下列指令:

gpg --gen-key
  • 金鑰類型: 選取「預設」選項 (1) RSA 和 RSA (預設值)
  • keysize: 保留預設值 (2048)
  • key validity: 將預設值保留為 0。 這是因為值索引鍵 0 不會到期。
  • 確認您的選擇: 輸入 y
  • 實際名稱 欄位中輸入您的名稱。
  • 電子郵件位址中輸入您的電子郵件位址。
  • 輸入 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 金鑰之前,需要對 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
  1. 在 IBM Cloud 主控台中,選取 Key Protect 實例,以儲存從先前步驟產生的 GPG 金鑰。

  2. 按一下 新增 + 圖示,以將新的金鑰新增至實例。

  3. 選取 匯入您自己的金鑰 選項。

  4. 選取 選取金鑰類型 作為 標準金鑰

  5. 金鑰名稱 欄位中提供適當的名稱。 稍後可以透過此金鑰名稱來擷取儲存的 GPG 金鑰。

  6. 複製先前在 金鑰資料 欄位中匯出的金鑰。

    當您複製金鑰並將它貼到 金鑰資料 欄位時,金鑰尾端不會有額外的一行。

  7. 選取 選擇金鑰環 選項作為預設值。

  8. 按一下 新增金鑰,將金鑰新增至 金鑰保護

    將金鑰加入到金鑰保護
    將金鑰加入到金鑰保護

如需 Key Protect的相關資訊,請參閱 Key Protect 文件

將金鑰儲存在 Secrets Manager 中

需要 GPG 金鑰的單一 base64 編碼,才能將它儲存在 Secrets Manager 實例中。

匯出 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 主控台中,選取 Secrets Manager 實例,以儲存從先前步驟產生的 GPG 金鑰。

  2. 按一下 新增 + 圖示,以將新的金鑰新增至實例。

  3. 選取 其他密鑰類型 選項。

    其他秘密類型
    其他秘密類型

  4. 選取 選取金鑰類型選項的 標準金鑰 類型。

  5. 名稱 欄位中提供適當的名稱。 稍後可以透過此名稱來擷取儲存的 GPG 金鑰。

  6. 選擇選項作為 密鑰值,並在 密鑰值 欄位中貼上先前匯出的金鑰。

    請確保當您複製金鑰並將其貼在 密碼值 欄位中時,金鑰結尾沒有額外的行。

  7. 按一下 新增 圖示,將金鑰新增至 Key Protect 實例。

    新增密鑰
    新增密鑰

如需 Secrets Manager 的相關資訊,請參閱開始使用 Secrets Manager

匯出私密金鑰並直接儲存在 CI 管線中

不建議使用此方法,且應該僅用於實驗。 使用 Key ProtectSecrets 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