IBM Cloud Docs
產生 GPG 金鑰

產生 GPG 金鑰

由 IBM Cloud DevSecOps 連續整合工具鏈建置並記錄在庫存中的構件必須先簽署,然後才能部署至正式作業。 連續整合管線使用 Skopeo 作為預設工具來提供構件簽署功能。

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

自動產生 GPG 金鑰

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

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

    映像檔簽署
    圖 1. 構件簽署

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

    變更名稱及電子郵件
    圖 2. 變更名稱及電子郵件

  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) 公用程式的限制,其中管線無法接受使用通行詞組保護的私密金鑰。 如果您在建立期間提供通行詞組,則您的管線無法解碼憑證,且您的管線在映像檔簽署步驟中失敗。

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 Version < 1.4 (or any failure with previous command)

從 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>

匯出的原始金鑰不得直接複製。 建議將此步驟中產生的金鑰安全儲存在 {{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 金鑰並複製到剪貼簿。

在 {{site.data.keyword.keymanagementserviceshort}} 實例中儲存 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. 在 {{site.data.keyword.cloud_notm}} 主控台中,選取 {{site.data.keyword.keymanagementserviceshort}} 實例,以儲存從先前步驟產生的 GPG 金鑰。

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

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

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

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

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

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

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

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

    將金鑰新增至金鑰保護
    圖 4. 將金鑰新增至金鑰保護

如需 {{site.data.keyword.keymanagementserviceshort}}的相關資訊,請參閱 {{site.data.keyword.keymanagementserviceshort}} 文件

將金鑰儲存在 {{site.data.keyword.secrets-manager_short}} 中

需要 GPG 金鑰的單一 base64 編碼,才能將它儲存在 {{site.data.keyword.secrets-manager_short}} 實例中。

匯出 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. 在 {{site.data.keyword.cloud_notm}} 主控台中,選取 {{site.data.keyword.secrets-manager_short}} 實例,以儲存從先前步驟產生的 GPG 金鑰。

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

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

    其他密鑰類型
    圖 5. 其他密鑰類型

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

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

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

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

  7. 按一下 新增 圖示,將金鑰新增至 {{site.data.keyword.keymanagementserviceshort}} 實例。

    新增索引鍵
    圖 6. 新增金鑰

如需 {{site.data.keyword.secrets-manager_short}} 的相關資訊,請參閱開始使用 {{site.data.keyword.secrets-manager_short}}

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

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