產生 GPG 金鑰
由 IBM Cloud DevSecOps 連續整合工具鏈建置並記錄在庫存中的構件必須先簽署,然後才能部署至正式作業。 連續整合管線使用 Skopeo 作為預設工具來提供構件簽署功能。
自動或手動建立並儲存 DevSecOps 連續整合管線所使用的 GPG 金鑰。
自動產生 GPG 金鑰
使用此方法,範本會為您產生 GPG 金鑰。 完成下列步驟,以輸入金鑰產生的 名稱 和 電子郵件:
-
移至 構件簽署,然後按一下 新建。
圖 1. 構件簽署 -
在視窗中,名稱 及 電子郵件 欄位會預先移入工具鏈名稱及電子郵件 ID。 變更名稱及電子郵件 ID,以反映您的 GPG 金鑰需求。 您也可以透過選取方框,將金鑰儲存在密鑰提供者中。
圖 2. 變更名稱及電子郵件 -
產生金鑰之後,您可以複製它供您參照。
圖 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
-
在 {{site.data.keyword.cloud_notm}} 主控台中,選取 {{site.data.keyword.keymanagementserviceshort}} 實例,以儲存從先前步驟產生的 GPG 金鑰。
-
按一下 新增 + 圖示,以將新的金鑰新增至實例。
-
選取 匯入您自己的金鑰 選項。
-
選取 選取金鑰類型 作為 標準金鑰。
-
在 金鑰名稱 欄位中提供適當的名稱。 稍後可以透過此金鑰名稱來擷取儲存的 GPG 金鑰。
-
複製先前在 金鑰資料 欄位中匯出的金鑰。
當您複製金鑰並將它貼到 金鑰資料 欄位時,金鑰尾端不會有額外的一行。
-
選取 選擇金鑰環 選項作為預設值。
-
按一下 新增金鑰,將金鑰新增至 金鑰保護。
圖 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
-
在 {{site.data.keyword.cloud_notm}} 主控台中,選取 {{site.data.keyword.secrets-manager_short}} 實例,以儲存從先前步驟產生的 GPG 金鑰。
-
按一下 新增 + 圖示,以將新的金鑰新增至實例。
-
選取 其他密鑰類型 選項。
圖 5. 其他密鑰類型 -
選取 選取金鑰類型選項的 標準金鑰 類型。
-
在 名稱 欄位中提供適當的名稱。 稍後可以透過此名稱來擷取儲存的 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