使用密鑰
瞭解如何在 Code Engine中使用密鑰。 在 Code Engine中,您可以使用環境變數,將資訊儲存為函數、工作或應用程式可以使用的密鑰中的鍵值組。
什麼是秘密,我為什麼要使用它們?
在 Code Engine中,密碼 (及 configmap) 是鍵值組的集合。 當對映至環境變數時,會設定 NAME=VALUE 關係,以便環境變數的名稱對應於那些對映中每一個項目的「索引鍵」,且環境變數的值是該索引鍵的「值」。
秘密提供一種方法,可將密碼或 SSH 金鑰等敏感組態資訊納入您的部署。 透過參照密鑰中的值,您可以將機密性資訊與部署取消連結,以保持應用程式、功能或工作的可攜性。 授權給您專案的任何人也可以檢視您的密鑰; 請確定您知道密鑰資訊可以與那些使用者共用。 密鑰包含鍵值組中的資訊。
因為密鑰及 configmap 是類似的實體 (除了密鑰會更安全地儲存),所以您與密鑰及 configmap 互動及使用的方式也會類似。 若要進一步瞭解配置對映,請參閱 使用配置對映。
我可以在 Code Engine中建立何種密鑰?
Code Engine 支援各種密鑰,並提供用於建立及使用密鑰的選項。
下表彙總 Code Engine中支援的密鑰。
| 名稱 | 說明 |
|---|---|
| 基本鑑別 | 包含 username 及 password 金鑰的密鑰。當您存取需要基本 HTTP 驗證的服務時,請使用基本驗證機密。 |
| 一般 | 儲存簡式鍵值組及 Code Engine 的密鑰不會對已定義的鍵值組或密鑰的預期用途做出任何假設。 當您想要定義自己的鍵值組來存取服務時,請使用一般密碼。 |
| HMAC | 包含 access_key_id 和 secret_access_key 金鑰的秘密。使用 HMAC 認證使用 S3-compatible 工具和函式庫,這些工具和函式庫需要驗證,但不支援 IBM Cloud® Identity and Access Management API 金鑰。 |
| 登錄 | 儲存認證以存取儲存器登錄的密鑰。 當您使用 Code Engine 應用程式或工作來存取容器映像檔時,請使用登錄密碼。 或者,您使用 Code Engine 來建置容器映像檔,且 Code Engine 會使用登錄密碼來存取登錄以儲存建置的容器映像檔。 在 CLI 中,此密鑰也稱為 Registry access secret。 |
| 服務存取權 | 儲存認證以存取 IBM Cloud 服務實例的密鑰。 當您在 Code Engine 中使用 服務綁定 時,請使用服務存取秘訣。Code Engine 可以自動產生此秘訣,您也可以建立自己的自訂服務存取秘訣。 |
| SSH | 儲存認證以使用 SSH 金鑰向服務進行鑑別 (例如向 Git 儲存庫進行鑑別,例如 GitHub 或 GitLab) 的密鑰。 當您想要 Code Engine 為您建置容器映像檔時,請使用 SSH 密碼。Code Engine 使用此密鑰來存取程式碼儲存庫中的原始碼。 例如,搭配使用此密鑰與建置執行,以存取儲存庫中的原始碼,例如 GitHub 或 GitLab。 此密鑰也在 CLI 中用作 Git repository access secret,在主控台中用作
Code repo access。 |
| 傳輸層安全 (TLS) | 包含已簽署 TLS 憑證 (包括其所有中繼憑證) 及其來自憑證管理中心 (CA) 的對應私密金鑰的密鑰。 當您在 Code Engine中使用 自訂網域對映 時,請使用 TLS 密鑰。 |
建立 Secret
使用密鑰將機密性資訊提供給應用程式、工作或功能。 密鑰定義在鍵值組中,並對儲存在密鑰中的資料進行編碼。
從主控台建立密鑰
瞭解如何從 Code Engine 主控台建立密鑰。
瞭解如何從主控台建立下列類型的密鑰。
從主控台建立一般密鑰
瞭解如何從 Code Engine 主控台建立一般密鑰,這些密鑰可由函數、工作或應用程式作為環境變數使用。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 一般密鑰,然後按 下一步。
- 提供名稱; 例如
mysecret-generic。 - 按一下新增鍵值對。 指定此密鑰的一或多個鍵值組。 例如,將一個索引鍵指定為
secret1,值為mysecret1,並將另一個索引鍵指定為secret2,值為target-secret。 您為金鑰選擇的名稱不需要與環境變數的名稱相同。 請注意,索引鍵的值是隱藏的,但必要的話可以檢視它。 - 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
從控制台建立 HMAC 秘書
瞭解如何從 Code Engine 主控台建立 HMAC 秘密,這些秘密可以作為環境變數被函式、工作或應用程式使用。 它們與需要驗證但不支援 IBM Cloud® Identity and Access Management API 金鑰的 S3-compatible 工具和函式庫一起使用。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 HMAC 秘 密,然後按一下下一步。
- 提供名稱; 例如
mysecret-hmac。 - 指定存取金鑰 ID。
- 指定秘密存取金鑰。 請注意,索引鍵的值是隱藏的,但必要的話可以檢視它。
- 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
有關 HMAC 秘訣的詳細資訊,請參閱 IBM Cloud Object Storage- API 金鑰 vs HMAC。
從主控台建立登錄密鑰
瞭解如何從 Code Engine 主控台建立登錄密鑰,以供功能、工作、應用程式或建置使用,以存取取回或推送容器映像檔。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 登錄密碼,然後按 下一步。
- 提供名稱; 例如
mysecret-registry。 - 指定此密鑰的目標登錄,例如 IBM Cloud Container Registry 或 Docker Hub。
- 指定登錄的位置。
- 指定使用者名稱。 如果此密鑰適用於 IBM Cloud Container Registry,則使用者名稱為
iamapikey。 如果此密鑰適用於 Docker Hub,則它是您的 Docker ID。 - 輸入使用者名稱的認證。 對於 IBM Cloud Container Registry,請使用 IAM API 金鑰。 若為 Docker Hub,您可以使用 Docker Hub 密碼或 存取記號。 若為其他目標登錄,請指定使用者名稱的密碼或 API 金鑰。
- 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
如需使用映像檔登錄的相關資訊,請參閱 存取容器登錄。
從主控台建立 SSH 密鑰
瞭解如何從主控台建立 SSH 密鑰,以供建置用來存取專用原始碼儲存庫。 SSH 密鑰會儲存認證,以使用 SSH 金鑰向服務進行鑑別,例如向 Git 儲存庫進行鑑別,例如 GitHub 或 GitLab。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 SSH 密碼,然後按 下一步。
- 提供名稱; 例如
mysecret-ssh。 - 新增此密鑰的 SSH 私密金鑰。
- 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
使用專用程式碼儲存庫 (例如 Git 儲存庫) 時,請使用 SSH 密鑰。 請參閱 存取專用程式碼儲存庫。
從主控台建立 TLS 密鑰
瞭解如何從主控台建立 TLS 密鑰,當您在 Code Engine中使用自訂網域對映時,應用程式可以使用該密鑰。 「傳輸層安全 (TLS)」密鑰包含已簽署的 TLS 憑證 (包括其所有中繼憑證),以及來自憑證管理中心 (CA) 的對應私密金鑰。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「元件」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立密鑰。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 選取 TLS 密鑰,然後按 下一步。
- 提供名稱; 例如
mysecret-tls。 - 新增憑證鏈及其私密金鑰。 請注意,您可以將證書串接起來,以新的一行開始每一個證書。 您可以在檔案中提供此資訊。
- 按一下建立以建立秘密。
既然已從主控台建立密鑰,請移至「密鑰及配置對映」頁面,以檢視已定義密鑰及配置對映的清單。 您可以套用過濾器來自訂清單以符合您的需求。
在 Code Engine中使用 自訂網域對映 時,請使用 TLS 密鑰。
使用 CLI 建立秘密
瞭解如何使用 Code Engine CLI 來建立密鑰,應用程式、工作或函數可以作為環境變數使用。
開始之前
- 設定 Code Engine CLI 環境。
- 建立並使用專案。
從 CLI 版本 1.42.0 開始,在 CLI 中定義秘密和使用秘密的工作統一在 secret 命令群組下。 請參閱 ibmcloud ce secret 指令。 使用 --format 選項指定秘密的類別,例如
basic_auth, generic, hmac, ssh, tls,或 registry。 --format 選項的預設值是 generic。
透過使用 secret create 指令,您可以建立及管理各種密鑰格式。 如需各種密鑰格式的說明,請參閱 我可以在 Code Engine中建立何種密鑰?
瞭解如何使用 CLI 建立下列類型的密鑰:
使用 CLI 建立基本鑑別密碼
基本驗證秘訣包含使用者名稱和密碼金鑰,用於存取需要基本 HTTP 驗證的服務。 下列範例會使用 myusername 的認證來建立基本鑑別密碼,並在本端工作站上的檔案中提供相關聯的密碼。
ibmcloud ce secret create --name mysecret-basicauth --format basic_auth --username myusername --password-from-file ./password.txt
若要顯示此密鑰的詳細資料,
ibmcloud ce secret get --name mysecret-basicauth
輸出範例
Getting secret 'mysecret-basicauth'...
OK
Name: mysecret-basicauth
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: basic_auth
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 66s
Created: 2021-03-10T18:44:18-05:00
Data:
---
password: REDACTED
username: bXl1c2VybmFtZQ==
請注意,此基本鑑別密碼的金鑰 username 值已編碼,且 password 值已編寫。 若要將密鑰資料顯示為已解碼,請在 secret get 指令中使用 --decode 選項。
使用 CLI 建立一般密鑰
一般密鑰會儲存簡式鍵值組,且 Code Engine 不會對已定義的鍵值組及密鑰的預期使用進行任何假設。
您可以使用下列其中一種方式,使用 secret create 指令來建立一般密鑰。 依預設,未指定 --format 選項時,會建立一般密鑰。
-
使用
KEY=VALUE格式的--from-literal選項,直接從指令行建立密鑰。 例如,ibmcloud ce secret create --name myliteralsecret --from-literal "TARGET=My literal secret" -
使用
--from-file選項來建立密鑰以指向檔案。 透過使用此選項,檔案的所有內容都會變成鍵值組的值。 在此範例中,請使用名為secrets.txt的檔案,其中包含my little secret1。-
下列範例搭配使用
--from-file KEY=FILE格式與secret create指令:ibmcloud ce secret create --name mysecretmsg1 --from-file TARGET=secrets.txt -
下列範例指令搭配使用
--from-file FILE格式與secret create指令。 在此範例中,TARGET(無副檔名) 是檔案的名稱,與工作已知的環境變數名稱相同。ibmcloud ce secret create --name mysecretmsg2 --from-file TARGET
-
-
使用
--from-env-file選項來建立密鑰,以指向包含一或多行符合KEY=VALUE格式的檔案。 指定檔案中的每一行都會新增為鍵值組。 指定檔案中任何空白或以#開頭的行都會被忽略。 在此範例中,請使用名為secrets_multi.txt的檔案,其中包含鍵值組:sec1=mysec1、sec2=mysec2及sec3=mysec3。ibmcloud ce secret create --name mysecretmulti --from-env-file secrets_multi.txt
如果您想要從檔案建立 (或更新) 一般密鑰,請使用具有下列其中一種格式的 --from-file 選項: --from-file FILE 或 --from-file KEY=FILE 在 Code Engine中,當您使用 --from-file 選項來指定密鑰值時,檔案內的 所有 內容是鍵值組的值。 當您使用 --from-file KEY=FILE 選項格式時,KEY 是工作、函數或應用程式已知的環境變數名稱。 當您使用選項格式 --from-file FILE 時,FILE 是工作、函數或應用程式已知的環境變數名稱。 如果您的檔案包含一或多個鍵值組,請使用 --from-env-file 選項,為指定檔案中的每一個鍵值組新增環境變數。 指定檔案中任何空白或以 # 開頭的行都會被忽略。
若要顯示一般密鑰 myliteralsecret 的詳細資料,
ibmcloud ce secret get --name myliteralsecret
輸出範例
Getting secret 'myliteralsecret'...
OK
Name: myliteralsecret
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: generic
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 66s
Created: 2023-03-07 21:06:34 +0000 UTC
Data:
---
TARGET: TXkgbGl0ZXJhbCBzZWNyZXQ=
請注意,此一般密鑰的金鑰 TARGET 值已編碼。 若要將密鑰資料顯示為已解碼,請在 secret get 指令中使用 --decode 選項。
使用 CLI 建立 HMAC 秘 密
HMAC 秘密包含 access_key_id 和 secret_access_key 金鑰,與 S3-compatible 工具和函式庫一起使用,這些工具和函式庫需要驗證,但不支援 IBM Cloud® Identity and Access Management API 金鑰。 請參閱 IBM Cloud Object Storage- API 金鑰 vs HMAC 何時使用 IBM Cloud® Identity and Access Management API 金鑰或 HMAC 認證。 以下範例會建立一個 HMAC 秘密,並附有樣本憑證,以便在提示時提供。
ibmcloud ce secret create --name mysecret-hmac --format hmac --access-key-id-prompt --secret-access-key-prompt
若要顯示此密鑰的詳細資料,
ibmcloud ce secret get --name mysecret-hmac
輸出範例
Getting secret 'mysecret-hmac'...
OK
Name: mysecret-hmac
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: hmac_auth
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 86s
Created: 2025-05-15T12:41:15-05:00
Data:
---
access_key_id: MWEyYjNjNGQ1ZTZmMWEyYjNjNGQ1ZTZmMWEyYjNjNGQK
secret_access_key: REDACTED
請注意,此 HMAC 密鑰 access_key_id 的值已編碼,而 secret_access_key 的值則已刪除。 若要將密鑰資料顯示為已解碼,請在 secret get 指令中使用 --decode 選項。
使用 CLI 建立登錄密鑰
登錄密鑰會儲存用來存取儲存器登錄的認證。
下列範例會建立名為 mysecret-registry 的登錄密鑰,以存取 us.icr.io 登錄伺服器上的 IBM Cloud Container Registry 實例,並指定 username 和 password 的認證。
ibmcloud ce secret create --name mysecret-registry --format registry --server us.icr.io --username iamapikey --password API_KEY
若要顯示此密鑰的詳細資料,
ibmcloud ce secret get --name mysecret-registry
輸出範例
Getting secret 'mysecret-registry'...
OK
Name: mysecret-registry
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: registry
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 66s
Created: 2023-03-07 20:00:45 +0000 UTC
Data:
---
email: ""
password: REDACTED
server: dXMuaWNyLmlv
username: aWFtYXBpa2V5
請注意,此登錄密鑰的 username 及 server 機碼值已編碼,且 password 的值已編寫。 若要將密鑰資料顯示為已解碼,請在 secret get 指令中使用 --decode 選項。
使用 CLI 建立 SSH 密鑰
SSH 密鑰會儲存認證,以使用 SSH 金鑰向服務進行鑑別; 例如,向 Git 儲存庫進行鑑別,例如 GitHub 或 GitLab。
下列範例會建立名為 mysecret-ssh 的 SSH 密鑰,以透過使用位於 /<filepath>/.ssh/<key_name>(其中 <filepath> 是本端工作站上的路徑) 的未加密 SSH 私密金鑰檔進行鑑別,來存取 known_hosts 檔案中包含的主機。 這個指令需要名稱和金鑰路徑,也容許其他選用引數,例如已知
hosts 檔的路徑。
ibmcloud ce secret create --name mysecret-ssh --format ssh --key-path ~/.ssh/<key_name> --known-hosts-path ~/.ssh/known_hosts
若要顯示此密鑰的詳細資料,
ibmcloud ce secret get --name mysecret-ssh
輸出範例
Getting secret 'mysecret-ssh'...
OK
Name: mysecret-ssh'
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: ssh
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 66s
Created: 2023-03-07 19:19:59 +0000 UTC
Data:
---
known_hosts: fDF8bGh0ekpiSFVXdXRxZWg1NUlrWTk4RjdOdjJZPXxsUmhZd0txVmIwd3dSV2xzcjEySFdoWURUTG89IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQXEyQTdoUkdtZG5tOXRVRGJPOUlEU3dCSzZUYlFhK1BYWVBDUHk2cmJUclR0dzdQSGtjY0tycHAweVZocDVIZEVJY0tyNnBMbFZEQmZPTFg5UVVzeUNPVjB3emZqSUpObEdFWXNkbExKaXpIaGJuMm1VanZTQUhRcVpFVFlQODFlRnpMUU5uUEh0NEVWVlVoN1ZmREVTVTg0S2V6bUQ1UWxXcFhMbXZVMzEveU1mK1NlOHhoSFR2S1NDWklGSW1Xd29HNm1iVW9XZjluenBJb2FTakIrd2VxcVVVbXBhYWFzWFZhbDcySitVWDJCKzJSUFczUmNUMGVPelFncWxKTDNSS3JUSnZkc2pFM0pFQXZHcTNsR0hTWlh5MjhHM3NrdWEyU21WaS93NHlDRTZnYk9EcW5UV2xnNyt3QzYwNHlkR1hBOFZKaVM1YXA0M0pYaVVGRkFhUT09CnwxfEpUSjI4MCt0RkFSMGcxZ3VrZW56U3ZBYm5sQT18RDlSUWppenZlR3UxS0FnNjhNeisrUHM3RmZrPSBlY2RzYS1zaGEyLW5pc3RwMjU2IEFBQUFFMlZqWkhOaExYTm9ZVEl0Ym1semRIQXlOVFlBQUFBSWJtbHpkSEF5TlRZQUFBQkJCRW1LU0VOalFFZXpPbXhrWk15N29wS2d3RkI5bmt0NVlScllNak51RzVOODd1UmdnNkNMcmJvNXdBZFQveTZ2MG1LVjBVMncwV1oyWUIvKytUcG9ja2c9CnwxfDhIOXpNb0VORklZVDNPeVZYWlQrY25wb0srND18dVdhVThFV1FPc0ttSDMzREVVd0xnNUtiUk44PSBzc2gtZWQyNTUxOSBBQUFBQzNOemFDMWxaREkxTlRFNUFBQUFJT01xcW5rVnpybTBTZEc2VU9vcUtMc2FiZ0g1Qzlva1dpMGRoMmw5R0tKbAo=
ssh-privatekey: REDACTED
請注意,此 SSH 密鑰的 known_hosts 金鑰值已編碼,且 ssh-privatekey 的值已編寫。 若要將密鑰資料顯示為已解碼,請在 secret get 指令中使用 --decode 選項。
使用 CLI 建立 TLS 密鑰
「傳輸層安全 (TLS)」密鑰包含已簽署的 TLS 憑證 (包括其所有中繼憑證),以及來自憑證管理中心 (CA) 的對應私密金鑰。 當您使用自訂網域對映時,請使用 TLS 密鑰。
下列範例會建立名為 mysecret-tls 的 TLS 密鑰。 對應於自訂網域的憑證鏈包含在檔案 certificate.txt 中,相符的私密金鑰檔包含在檔案 privatekey.txt 中。 在此範例中,這兩個檔案都位於本端工作站的根目錄中。
ibmcloud ce secret create --name mysecret-tls --format tls --cert-chain-file certificate.txt --private-key-file privatekey.txt
若要顯示此密鑰的詳細資料,
ibmcloud ce secret get --name mysecret-tls
輸出範例
Getting secret 'mysecret-tls'...
OK
Name: mysecret-tls'
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format: tls
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 66s
Created: 2023-03-07 16:14:46 +0000 UTC
Data:
---
tls.crt: REDACTED
tls.key: REDACTED
使用 CLI 列出密鑰
建立密鑰之後,請使用 secret list 指令來列出專案中的所有密鑰。 例如,
ibmcloud ce secret list
輸出範例
Listing secrets...
OK
Name Format Data Age
ce-auto-icr-private-us-south registry 4 333d
ce-auto-private-icr-us-south registry 4 335d
myregistry-seccmd registry 4 3h31m
mysecret-basicauth basic_auth 2 7m37s
mysecret-generic generic 1 7m7s
mysecret-genericfromfile generic 2 2m29s
mysecret-hmac hmac_auth 2 21m
mysecret-registry registry 4 111s
mysecret-ssh ssh_auth 2 42m
mysecret-tls tls 2 3h47m
更新密鑰
您可以變更現有密鑰的鍵值組。
從控制台更新秘密
您可以從主控台更新已定義密鑰的鍵值組。
-
您可以使用下列其中一種方式,從主控台更新所定義密鑰的鍵值組。
- 跳至專案的「密鑰及配置對映」頁面,並尋找您要更新的密鑰。 按一下您要更新的密鑰名稱以開啟它。
- 如果應用程式、工作或函數參照您的密鑰,請使用應用程式、工作或函數的 環境變數 標籤上環境變數表格中的鏈結。 這些鏈結會直接帶您前往您的密鑰。 或者,您也可以跳至專案的「密鑰及配置對映」頁面,並尋找您要更新的密鑰。 按一下您要更新的密鑰名稱以開啟它。
-
按一下 編輯,並針對您的密鑰進行更新。
-
按一下 儲存,以儲存對密鑰所做的變更。
如果工作、功能或應用程式參照您的更新密鑰,則必須重新啟動您的工作、功能或應用程式,新資料才會生效。
- 應用程式-從應用程式的頁面中,按一下 新建修訂,然後按一下 儲存並部署。 或者,您可以等待應用程式調整為零,當應用程式擴增時,應用程式會使用更新的密碼。
- 工作-從工作的頁面中,按一下 提交工作 以執行工作,或者您可以重新執行工作。 這個新的工作執行會使用更新的密鑰。
- 功能-從功能的頁面中,按一下 測試功能。 如果您開啟瀏覽器的功能 URL,請重新整理瀏覽器。
使用 CLI 更新秘密
您可以使用 CLI 來更新現有密鑰及其鍵值組。
-
若要變更已定義密鑰中鍵值組的值,請使用
secret update指令。 讓我們更新mysecret-registry密鑰以使用不同的伺服器。ibmcloud ce secret update --name mysecret-registry --format registry --server <new_server> --username <new_username> --password <password> -
既然已更新您的密鑰,請使用
secret get指令來顯示特定密鑰的詳細資料。 必要的話,請使用--decode選項,將密鑰資料顯示為已解碼。 例如,ibmcloud ce secret get --name mysecret-registry --decode輸出範例
Getting generic secret 'mysecret-registry'... OK Name: mysecret-registry ID: abcdefgh-abcd-abcd-abcd-c88e2775388e Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 21m Created: 2023-03-07 20:00:45 +0000 UTC Data: --- email: "" password: REDACTED server: newserver username: newuser
參照密鑰
您的工作、函數或應用程式可以使用環境變數來耗用及使用密鑰中儲存的資訊。
從主控台參照密鑰
您可以使用主控台來建立應用程式、工作及函數的環境變數,以完全參照密鑰或參照密鑰中的個別金鑰。
在您可以參照密鑰之前,它必須存在。 請參閱 建立密鑰。 在此範例中,建立名為 target-secret 的密鑰,其鍵值組為 TARGET=Sunshine。
-
若要從應用程式、工作及函數參照已定義的密鑰,請 建立環境變數。 環境變數可以完全參照現有密鑰,或參照現有密鑰中的個別金鑰。 當您完全參照密鑰 (或 configmap) 時,可以選擇性地指定
prefix。 例如,如果您從myapp應用程式完全參照mysecret密鑰,並使用mysecret_字首,則密鑰中的每一個金鑰都以mysecret_作為字首。 -
建立環境變數之後,您必須重新啟動應用程式、工作及函數,變更才會生效。 若為應用程式,請儲存並部署應用程式,以您定義的環境變數來更新應用程式。 對於工作,請提交您的工作,以您定義的環境變數來更新工作。
-
在應用程式、工作及功能狀態變更為 備妥之後,您可以測試應用程式或功能,或執行工作。 若為應用程式,請按一下 測試應用程式,然後按一下「測試應用程式」窗格中的 傳送要求。 若要在網頁中開啟應用程式,請按一下應用程式 URL。 在
myapp範例中,因為已為完整參照的mysecret密鑰指定字首,所以此密鑰的所有金鑰都會參照為環境變數,並以mysecret_作為字首。 例如,這些環境變數會顯示為mysecret_secret1=mysecret1和mysecret_secret2=mysecret2。
若要更新參照密鑰的環境變數,請參閱 更新環境變數 及 更新環境變數的考量。
若要移除參照密鑰的環境變數,請參閱 刪除環境變數。
例如,讓我們使用您從主控台定義的先前定義的 mysecret 密鑰與工作,並使用環境變數完整參照此密鑰。
-
建立並執行工作。 在此範例中,建立使用
icr.io/codeengine/codeengine映像檔的 Code Engine 工作,然後執行該工作。 將要求傳送至此範例工作時,工作會讀取TARGET環境變數,且工作會列印Hello ${TARGET} from Code Engine並列印環境變數清單。 如果TARGET環境變數是空的,則會傳回Hello World from Code Engine。從「工作」頁面中,
- 建立工作; 例如,
myjob。 - 指定
icr.io/codeengine/codeengine作為影像參照。 - 按一下 Create(建立 )以建立工作。
如果您要與密鑰搭配使用的工作量已定義在 Code Engine中,請跳至「應用程式」、「工作」或「函數」頁面,然後按一下應用程式、工作或函數的名稱以開啟元件。
- 建立工作; 例如,
-
建立工作時,從「工作」頁面中,按一下工作名稱以開啟它。
-
更新工作以將密鑰新增為環境變數。 按一下 環境變數 以開啟標籤,然後按一下 新增 以新增環境變數。
-
從「新增環境變數」頁面中,
- 若要使用先前定義的密鑰,請選取 參照完整密鑰。
- 從功能表中,選取您想要的密鑰名稱; 例如
target-secret。 - 按一下 新增,以新增環境變數。
- 按一下 儲存,以儲存對工作所做的變更。
-
若要使用參照密鑰的環境變數來執行工作,請按一下 提交工作。 在此範例中,
myjob工作執行的日誌會顯示Hello Sunshine from Code Engine並列印環境變數,包括使用環境變數參照的任何密鑰值。
使用 CLI 參照密碼
若要搭配使用密鑰與應用程式、工作及函數,您可以設定環境變數,以使用 CLI 來完全參照密鑰或參照密鑰中的個別金鑰。
使用 CLI 參照現有密鑰
下列範例參照一般密鑰,當未指定 --format 選項時,這是預設密鑰。 使用 --format 選項來指定密鑰種類,例如 basic_auth、generic、ssh、tls 或 registry。
若要搭配使用具有工作量的密鑰與 CLI,請在下列指令上指定 --env-from-secret 選項。
下列範例說明如何使用 CLI 透過工作來參照現有的一般密鑰。
-
針對此實務範例,使用
secret create指令來建立下列兩個一般密鑰。 依預設,未指定--format選項時,會建立一般密鑰。ibmcloud ce secret create --name myliteralsecret --from-literal "TARGET=My big literal secret"ibmcloud ce secret create --name myliteralsecret2 --from-literal "TARGET=My little literal secret" -
建立工作 並參照
myliteralsecret密鑰。 在此範例中,建立使用icr.io/codeengine/codeengine映像檔的 Code Engine 工作,然後執行該工作。 將要求傳送至此範例工作時,工作會讀取TARGET環境變數,且工作會列印Hello ${TARGET} from Code Engine並列印環境變數清單。 如果TARGET環境變數是空的,則會傳回Hello World from Code Engine。ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --array-indices 2-3 --env-from-secret myliteralsecret -
執行
myjob工作。ibmcloud ce jobrun submit --name myjobrun --job myjob -
使用
jobrun get指令來顯示工作執行的詳細資料,包括工作執行的實例。ibmcloud ce jobrun get --name myjobrun輸出範例
Getting jobrun 'myjobrun'... Getting instances of jobrun 'myjobrun'... Getting events of jobrun 'myjobrun'... Run 'ibmcloud ce jobrun events -n myjobrun' to get the system events of the job run instances. Run 'ibmcloud ce jobrun logs -f -n myjobrun' to follow the logs of the job run instances. OK Name: myjobrun [...] Job Ref: myjob Environment Variables: Type Name Value Secret full reference myliteralsecret Image: icr.io/codeengine/codeengine Resource Allocation: CPU: 1 Ephemeral Storage: 4G Memory: 4G Runtime: Mode: task Array Indices: 2-3 Array Size: 2 JOP_ARRAY_SIZE Value: 2 Max Execution Time: 7200 Retry Limit: 3 Status: Completed: 9s Instance Statuses: Succeeded: 2 Conditions: Type Status Last Probe Last Transition Pending True 13s 13s Running True 9s 9s Complete True 9s 9s Events: Type Reason Age Source Messages Normal Updated 10s (x4 over 14s) batch-job-controller Updated JobRun "myjobrun" Normal Completed 10s batch-job-controller JobRun completed successfully Instances: Name Running Status Restarts Age myjobrun-2-0 0/1 Succeeded 0 14s myjobrun-3-0 0/1 Succeeded 0 14s -
顯示
myjobrun工作執行的日誌。 您可以顯示工作執行之所有實例的日誌,或顯示工作執行之特定實例的日誌。 此時,會顯示工作執行所有實例的日誌。 日誌會顯示Hello my big literal secret!,這是使用具有密鑰的環境變數所指定。 請注意,對於使用icr.io/codeengine/codeengine映像檔定義的此工作,工作執行的輸出會列印環境變數,包括使用環境變數參照的任何密鑰值。ibmcloud ce jobrun logs --jobrun myjobrun輸出範例
Getting logs for all instances of job run 'myjobrun'... Getting jobrun 'myjobrun'... Getting instances of jobrun 'myjobrun'... OK myjobrun-2-0/myjob: Hello from helloworld! I'm a batch job! Index: 2 Hello My big literal secret from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- HOME=/root HOSTNAME=myjobrun-2-0 JOB_INDEX=2 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 TARGET=My big literal secret myjobrun-3-0/myjob: Hello from helloworld! I'm a batch job! Index: 3 Hello My big literal secret from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- HOME=/root HOSTNAME=myjobrun-3-0 JOB_INDEX=3 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 TARGET=My big literal secret -
重新提交工作執行,並指定將
myliteralsecret2密碼用於此工作執行。ibmcloud ce jobrun resubmit --jobrun myjobrun --name myjobrunresubmit --env-from-secret myliteralsecret2當您使用完全參照密鑰的環境變數來更新工作、應用程式或函數,以完全參照不同的密鑰時,完整參照會依其設定順序置換其他完整參照 (最後一個被參照集置換第一個集)。
-
使用
jobrun get指令來顯示工作執行的詳細資料,包括工作執行的實例。 請注意,工作執行同時參照myliteralsecret及myliteralsecret2密鑰。ibmcloud ce jobrun get --name myjobrunresubmit輸出範例
Getting jobrun 'myjobrunresubmit'... Getting instances of jobrun 'myjobrunresubmit'... Getting events of jobrun 'myjobrunresubmit'... [...] Name: myjobrunresubmit ID: 79f01367-932b-4a76-be18-b1e68790a85b Project Name: myproject Project ID: 841f0f38-420d-4388-b5d8-f230657d7dc6 Age: 14s Created: 2021-06-15T21:15:37-04:00 Job Ref: myjob Environment Variables: Type Name Value Secret full reference myliteralsecret Secret full reference myliteralsecret2 Image: icr.io/codeengine/codeengine Resource Allocation: CPU: 1 Ephemeral Storage: 4G Memory: 4G Runtime: Mode: task Array Indices: 2-3 Array Size: 2 JOP_ARRAY_SIZE Value: 2 Max Execution Time: 7200 Retry Limit: 3 Status: Completed: 11s Instance Statuses: Succeeded: 2 Conditions: Type Status Last Probe Last Transition Pending True 14s 14s Running True 12s 12s Complete True 11s 11s Events: Type Reason Age Source Messages Normal Updated 13s (x4 over 16s) batch-job-controller Updated JobRun "myjobrunresubmit" Normal Completed 13s batch-job-controller JobRun completed successfully Instances: Name Running Status Restarts Age myjobrunresubmit-2-0 0/1 Succeeded 0 16s myjobrunresubmit-3-0 0/1 Succeeded 0 16s -
顯示
myjobrunresubmit工作執行實例的工作執行日誌。 此時,會顯示myjobrunresubmit-3-0實例的日誌。 日誌會顯示Hello My little literal secret!,這是在myliteralsecret2密鑰中指定的值。 使用jobrun get指令來顯示工作執行的詳細資料,包括工作執行的執行中實例。ibmcloud ce jobrun logs --instance myjobrunresubmit-3-0輸出範例
Getting logs for job run instance 'myjobrunresubmit-3-0'... OK myjobrunresubmit-3-0/myjob: Hello from helloworld! I'm a batch job! Index: 3 Hello My little literal secret from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- HOME=/root HOSTNAME=myjobrunresubmit-3-0 JOB_INDEX=3 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 TARGET=My little literal secret -
若要變更密鑰中鍵值組的值,請使用
secret update指令。 讓我們更新myliteralsecret密鑰,以將TARGET金鑰的值從My big literal secret變更為My new big literal secret。ibmcloud ce secret update --name myliteralsecret --from-literal "TARGET=My new big literal secret" -
若要讓新資料生效,請重新執行您的工作。 重新提交工作執行,並指定使用
myliteralsecret密鑰來執行此工作。
ibmcloud ce jobrun resubmit --jobrun myjobrun --name myjobrunresubmit2 --env-from-secret myliteralsecret
- 顯示
myjobrunresubmit2工作執行的日誌。 此時,工作日誌會顯示Hello My new big literal secret!,這是已更新的myliteralsecret密鑰中的值。 您可以使用jobrun get指令來顯示工作執行的詳細資料,包括工作執行的執行中實例。 顯示工作執行的任何執行中實例的日誌。
ibmcloud ce jobrun logs --instance myjobrunresubmit2-2-0
輸出範例
Getting logs for job run instance 'myjobrunresubmit2-2-0'...
OK
myjobrunresubmit2-2-0/myjob:
Hello from helloworld! I'm a batch job! Index: 2
Hello My new big literal secret from:
. ___ __ ____ ____
./ __)/ \( \( __)
( (__( O )) D ( ) _)
.\___)\__/(____/(____)
.____ __ _ ___ __ __ _ ____
( __)( ( \ / __)( )( ( \( __)
.) _) / /( (_ \ )( / / ) _)
(____)\_)__) \___/(__)\_)__)(____)
Some Env Vars:
--------------
HOME=/root
HOSTNAME=myjobrunresubmit2-2-0
JOB_INDEX=2
KUBERNETES_PORT=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_HOST=172.21.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
TARGET=My new big literal secret
總而言之,您已完成基本實務範例,透過參照現有完整密鑰並更新密鑰內的金鑰,來示範如何將密鑰與工作搭配使用。
參照尚未使用 CLI 定義的密鑰
如果密鑰在被參照之前不存在,則應用程式將無法順利部署,且在建立所參照的密鑰之前,工作或函數將無法順利執行。
如果您正在使用應用程式、工作或函數,且尚未定義所參照的密鑰,請使用 --force 選項來避免驗證所參照的密鑰是否存在。
--force 選項可以與下列指令搭配使用。
當您搭配使用 --force 選項與這些指令時,建立、更新或執行應用程式、工作或功能的動作即會完成。 不過,在所參照的密鑰存在之前,應用程式、工作或功能將無法順利執行。 如果您除了在指令中新增 --force 選項之外,還新增 --no-wait 選項,則系統會完成動作,且不會等待應用程式、工作或功能順利執行。
下列範例說明如何使用 CLI 來參照尚未使用工作定義的密鑰。
-
建立工作。 在此範例中,建立使用
icr.io/codeengine/codeengine映像檔的 Code Engine 工作,然後執行該工作。 將要求傳送至此範例工作時,工作會讀取TARGET環境變數,且工作會列印Hello ${TARGET} from Code Engine並列印環境變數清單。 如果TARGET環境變數是空的,則會傳回Hello World from Code Engine。ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine -
使用
jobrun submit指令來執行myjob工作。 請注意,mynewliteralsecret不存在。 搭配使用--no-wait選項與jobrun submit指令,即會提交工作執行,且不會等待此工作執行的實例完成。ibmcloud ce jobrun submit --name myjobrun1 --job myjob --env-from-secret mynewliteralsecret --force --no-wait -
使用
jobrun get指令來顯示工作執行的詳細資料,包括環境變數資訊。 請注意,工作執行處於pending狀態。ibmcloud ce jobrun get --name myjobrun1輸出範例
Getting jobrun 'myjobrun1'... Getting instances of jobrun 'myjobrun1'... Getting events of jobrun 'myjobrun1'... [...] Name: myjobrun1 [...] Job Ref: myjob Environment Variables: Type Name Value Secret full reference mynewliteralsecret Image: icr.io/codeengine/codeengine Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 JOP_ARRAY_SIZE Value: 1 Max Execution Time: 7200 Retry Limit: 3 Status: Instance Statuses: Pending: 1 Conditions: Type Status Last Probe Last Transition Pending True 100s 100s Events: Type Reason Age Source Messages Normal Updated 108s (x5 over 2m29s) batch-job-controller Updated JobRun "myjobrun1" Instances: Name Running Status Restarts Age myjobrun1-0-0 0/1 Pending 0 2m29s -
建立該密鑰。
ibmcloud ce secret create --name mynewliteralsecret --from-literal "TARGET=Fun secret" -
重新執行
myjobrun1工作執行。ibmcloud ce jobrun resubmit --jobrun myjobrun1 --name myjobrunresubmit1執行
ibmcloud ce jobrun get -n myjobrunresubmit1指令,以檢查此工作執行的狀態。 -
顯示
myjobrunresubmit1工作執行的日誌。 日誌會顯示Hello Fun secret from Code Engine,以確認工作執行已參照myliteralsecret密鑰。ibmcloud ce jobrun logs --jobrun myjobrunresubmit1輸出範例
Getting logs for all instances of job run 'myjobrunresubmit1'... Getting jobrun 'myjobrunresubmit1'... Getting instances of jobrun 'myjobrunresubmit1'... OK myjobrunresubmit1-0-0/myjob: Hello from helloworld! I'm a batch job! Index: 0 Hello Fun secret from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- HOME=/root HOSTNAME=myjobrunresubmit1-0-0 JOB_INDEX=0 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 TARGET=Fun secret
如需在 CLI 中參照完整密鑰及 configmap 作為環境變數、置換參照及移除參照的更詳細實務範例,請參閱 參照密鑰及 configmap。
刪除密鑰
當您不再需要某個秘密時,您可以刪除它。
從主控台刪除密鑰
- 若要從主控台刪除密鑰,請執行下列動作:
- 從 Code Engine 專案頁面移至「密鑰及配置對映」頁面。
- 按一下要刪除的秘密,開啟其頁面。
- 從特定密鑰的頁面中,按一下 動作> 刪除密鑰。
- 若要從主控台刪除特定密鑰的鍵值組,請執行下列動作:
- 從 Code Engine 專案頁面移至「密鑰及配置對映」頁面。
- 按一下您要變更的秘密,開啟其頁面。
- 從特定密鑰的頁面中,刪除您要移除的鍵值組。
您也可以刪除參照密鑰及 configmap 的已定義環境變數。 若要刪除已定義的環境變數,請從應用程式、工作或函數的 環境變數 標籤中,並刪除您要刪除的環境變數。 刪除已定義的環境變數之後,請務必按一下 儲存,以儲存對應用程式、工作或函數所做的變更。 如需相關資訊,請參閱 刪除環境變數。
使用 CLI 刪除密鑰
若要使用 CLI 刪除密鑰,請使用 secret delete 指令; 例如,
ibmcloud ce secret delete --name myliteralsecret -f
輸出範例
Deleting secret myliteralsecret...
OK
您也可以從 CLI 刪除環境變數,這些環境變數會參照密鑰及 configmap。