儲存任意密鑰

您可以使用 IBM Cloud® Secrets Manager 來儲存任意秘密,這些秘密可用於存取 IBM Cloud 內外的受保護系統。

任意密鑰是一種應用程式密鑰類型,可用來保留結構化或非結構化資料,例如金鑰、配置檔或任何其他機密性資訊片段。 建立密鑰之後,您可以使用它將應用程式連接至受保護資源,例如協力廠商應用程式或資料庫。 您的密鑰安全地儲存在專用的 Secrets Manager 服務實例中,您可以在其中集中管理其生命週期。

若要進一步瞭解您可以在 Secrets Manager中管理的密鑰類型,請參閱 何謂密鑰?

開始之前

開始之前,請確定您具有必要的存取層次。 若要建立或新增密鑰,您需要 撰寫者 服務角色或更高版本

在使用者介面中建立任意密鑰

若要使用 Secrets Manager 使用者介面來新增任意密鑰,請完成下列步驟。

  1. 在主控台中,按一下 功能表 圖示 「功能表」圖示 > 資源清單

  2. 從服務清單中,選取 Secrets Manager的實例。

  3. 密鑰 表格中,按一下 新增

  4. 從密鑰類型清單中,按一下 其他密鑰類型 磚。

  5. 下一步

  6. 新增名稱及說明,以輕鬆識別您的密鑰。

  7. 選取您要指派給密鑰的 密鑰群組實例中包含密鑰的環境及限制必須遵循。 使用者可以與秘密群組相關聯,以實現存取和協作。

    沒有秘密小組嗎? 在 密鑰群組 欄位中,您可以按一下 建立,以提供新群組的名稱及說明。 您的密鑰會自動新增至新群組。 如需密鑰群組的相關資訊,請參閱 組織密鑰

  8. 選用項目: 新增標籤以協助您在實例中搜尋類似的密鑰。

  9. 選用項目: 將 meta 資料新增至密鑰或密鑰的特定版本。

    1. 上傳檔案或以 JSON 格式輸入 meta 資料及版本 meta 資料。
  10. 下一步

  11. 選取檔案或輸入您要與密鑰相關聯的密鑰值。

Secrets Manager 僅支援以文字為基礎的任意秘密有效載荷。 如果您選擇要指定給任意秘密的檔案,服務會使用 base64 編碼在您的實例中儲存資料。 稍後若要存取此密碼,您需要對其進行 base64 解碼。 考慮在秘密上指定一個有編碼資料的標籤,例如 encode:base64,這樣您就可以追蹤需要 base64 解碼的秘密。

  1. 選用項目: 啟用有效期限以控制密鑰的有效期限。
  2. 若要設定密鑰的到期日,請將到期切換開關切換為
  3. 下一步
  4. 檢閱密鑰的詳細資料。
  5. 按一下新增

從 CLI 建立任意密鑰

在開始之前,請按照 CLI 文件 設定您的 API 端點。

若要使用 Secrets Manager CLI 外掛程式來建立任意密鑰,請執行 ibmcloud secrets-manager secret-create 指令。 您可以使用 --secret-type arbitrary 選項來指定密鑰類型。 例如,下列指令會建立任意密鑰,並將 secret-data 儲存為其值。

Secrets Manager 僅支援以文字為基礎的任意秘密有效載荷。 如果您需要上傳二進位檔案,您必須先 base64 編碼資料,以便能以單行字串傳送至 Secrets Manager CLI。 若要稍後以原始形式存取此秘密,您需要 base64 解碼。 考慮在秘密上指定一個有編碼資料的標籤,例如 encode:base64,這樣您就可以追蹤需要 base64 解碼的秘密。

ibmcloud secrets-manager secret-create \
    --secret-name example-arbitrary-secret \
    --secret-description "Description of my arbitrary secret." \
    --secret-type arbitrary \
    --secret-group-id default \
    --secret-labels dev,us-south \
    --secret-expiration-date 2023-10-05T11:49:42Z \
    --arbitrary-payload secret-data \
    --secret-custom-metadata '{"anyKey": "anyValue"}' \
    --secret-version-custom-metadata '{"anyKey": "anyValue"}'

指令會輸出密鑰的 ID 值,以及其他 meta 資料。 如需指令選項的相關資訊,請參閱 ibmcloud secrets-manager secret-create

使用 API 建立任意密鑰

您可以透過呼叫 Secrets Manager API,以程式化方式建立任意密鑰。

下列範例顯示可用來建立及儲存任意密鑰的查詢。 當您呼叫 API 時,請將 ID 變數和 IAM 令牌換成您 Secrets Manager 範例的特定值。

您可以使用 custom_metadataversion_custom_metadata 要求參數來儲存與組織需求相關的 meta 資料。 僅針對密鑰版本傳回 version_custom_metadata 的值。 密鑰的自訂 meta 資料會儲存為最多 50 個版本的所有其他 meta 資料,而且您不得包含機密資料。

Secrets Manager 僅支援以文字為基礎的任意秘密有效載荷。 如果您需要上傳二進位檔案,您必須先 base64 編碼資料,以便能以單行字串傳送給 Secrets Manager API。 若要稍後以原始形式存取此秘密,您需要 base64 解碼。 考慮在秘密上指定一個有編碼資料的標籤,例如 encode:base64,這樣您就可以追蹤需要 base64 解碼的秘密。

curl -X POST
    -H "Authorization: Bearer {iam_token}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
          "custom_metadata": {
            "metadata_custom_key": "metadata_custom_value"
          },
          "description": "Description of my arbitrary secret.",
          "expiration_date": "2023-10-05T11:49:42Z",
          "labels": [
            "dev",
            "us-south"
          ],
          "name": "example-arbitrary-secret",
          "payload": "secret-data",
          "secret_group_id": "67d025e1-0248-418f-83ba-deb0ebfb9b4a",
          "secret_type": "arbitrary",
          "version_custom_metadata": {
          "custom_version_key": "custom_version_value"} }' \
      "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"

成功的回應會傳回秘密的 ID 值以及其他元資料。 如需必要及選用要求參數的相關資訊,請參閱 API 參考資料

使用 Terraform 建立任意密鑰

您可以透過使用 Terraform for Secrets Manager,以程式化方式建立任意密鑰。

遵循 Terraform 最佳作法來保護機密輸入變數 (例如密鑰認證)。 如需相關資訊,請參閱 保護機密輸入變數

下列範例顯示透過在 terraform.tfvars 檔案中設定機密值,可用來建立任意密鑰的配置。

  1. variables.tf 檔案中定義任意密鑰有效負載的輸入變數。

    		variable "arbitrary_secret_payload" {
    			description = "Arbitrary secret payload"
    			type        = string
    			sensitive   = true
    		}
    
  2. 將值指派給 terraform.tfvars 檔案中的 arbitrary_secret_payload 變數。

    透過使用 .tfvars 檔案設定值,您可以將機密值與其餘變數值分開,並確保使用配置的使用者知道哪些值是機密。 基於安全目的,您必須僅與具有適當存取權的使用者維護及共用 .tfvars 檔案。 您也必須小心不要以明碼將具有機密值的 .tfvars 檔案儲存至版本控制 (例如 Github)。

    	arbitrary_secret_payload = "my sensitive arbitrary payload"
    
  3. main.tf 檔案中建立任意密鑰。

    	resource "ibm_sm_arbitrary_secret" "sm_arbitrary_secret" {
    		instance_id = local.instance_id
    		region = local.region
    		description = "Extended description for this arbitrary secret"
    		labels = [ "tf-resource"]
    		name = "test-arbitrary-secret"
    		secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id
    		payload = var.arbitrary_secret_payload
    	}
    

另外,您也可以使用預先建立、開放源碼且適用於企業的 Terraform IBM Modules (TIM) for Secrets Manager Secret,利用 Terraform 建立任意的機密。 進一步瞭解 Terraform IBM 模組