設定密鑰的到期日

本頁說明如何為新密鑰或現有密鑰設定到期日、變更現有密鑰的到期日,以及從密鑰中移除先前設定的到期日。

總覽

根據預設,儲存在 Secret Manager 中的密鑰會一直存在,直到使用者刪除為止。如果密鑰只能在已知的一段時間內儲存,您可以為密鑰附加到期時間。密鑰會在設定的到期時間自動刪除。

如果沒有必須刪除密鑰的要求,請考慮使用 IAM 條件或「已停用」版本狀態,以安全的方式撤銷存取權。

您可以輸入時間戳記或時間長度做為有效期限。擷取密鑰中繼資料時,無論到期時間的提供方式為何,系統一律會以時間戳記的形式傳回。

您隨時可以新增、更新或移除密鑰的到期時間。

限制

  • 密鑰的到期時間不得少於 60 秒,也不得超過 100 年。

安全使用會過期的密鑰

Secret Manager 中的密鑰到期後,會永久刪除。如要偵測即將過期的密鑰,最好的方法是使用 IAM 條件,在密鑰過期前移除使用該密鑰的帳戶權限。

如要有效管理密鑰存取權,請為授予的權限設定時間條件。

  • 設定有效期限:權限的到期日應略早於密鑰到期日。這有助於找出可能仍在使用密鑰的任何工作流程或程序。

  • 監控中斷情形:如果權限遭撤銷後,任何工作流程停止運作,您可以快速還原存取權,盡量減少影響。

  • 視需要調整:如果發現需要更多時間,可以延長密鑰的到期日,或在不再需要時完全移除密鑰。

這種做法有助於嚴格控管密鑰存取權,確保只有在必要時才能存取,降低未經授權存取或濫用的風險。

舉例來說,假設服務帳戶每天都需要存取密鑰,為期 30 天。您可以將密鑰設定為在建立後 60 天到期。這段緩衝期可確保您在預期用量後仍能繼續使用。您也可以設定有條件的 IAM 繫結,將 Secret Accessor 角色授予服務帳戶 45 天。如果服務帳戶在 45 天後嘗試存取密鑰,系統會拒絕授權。依賴這項密鑰的所有工作流程都會停止運作。管理員可以將 Secret Accessor 角色授予服務帳戶,快速還原存取權。這樣一來,他們就有時間調查為何在預期 30 天期限過後,仍需要該密鑰,因為密鑰本身不會在 15 天內刪除。

此外,您也可以根據記錄建立快訊,在密鑰即將到期時收到警告。詳情請參閱本文件的「記錄到期時間」一節。

指定時間戳記和時間長度

  • 時間戳記值必須採用 RFC 3339 格式,例如 2100-01-01T09:00:00-05:00

  • 時間長度值必須以秒為單位,並加上 s 後置字元,例如 86400s

設定密鑰的到期日

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Secret Manager API,為密鑰設定到期日期和時間。

控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 在「Secret Manager」(密鑰管理工具) 頁面中,按一下「Create secret」(建立密鑰)

  3. 在「建立密鑰」頁面的「名稱」欄位中,輸入密鑰名稱。

  4. 輸入密鑰值 (例如 abcd1234)。您也可以使用「上傳檔案」選項,上傳含有密鑰值的文字檔。這項動作會自動建立密鑰版本。

  5. 前往「有效期限」,然後勾選「設定到期日」核取方塊。

  6. 以「月/日/年,時:分 AM/PM」格式輸入到期日期和時間, 例如 7/31/20, 1:00 AM。您也可以使用日期和時間挑選器輸入到期日期和時間。

  7. 按一下「建立密鑰」

gcloud

使用時間戳記建立會過期的密鑰

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • TIMESTAMP:RFC 3339 格式的到期時間,例如 2100-01-01T09:00:00-05:00

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID \
    --replication-policy "automatic" \
    --expire-time "TIMESTAMP"

Windows (PowerShell)

gcloud secrets create SECRET_ID `
    --replication-policy "automatic" `
    --expire-time "TIMESTAMP"

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
    --replication-policy "automatic" ^
    --expire-time "TIMESTAMP"

使用時間長度建立會過期的密鑰

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • DURATION:到期時間長度 (以秒為單位),例如 86400s

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID \
  --replication-policy "automatic" \
  --ttl "DURATION"

Windows (PowerShell)

gcloud secrets create SECRET_ID `
  --replication-policy "automatic" `
  --ttl "DURATION"

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
  --replication-policy "automatic" ^
  --ttl "DURATION"

REST

使用時間戳記建立會過期的密鑰

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • TIMESTAMP:RFC 3339 格式的到期時間,例如 2100-01-01T09:00:00-05:00

HTTP 方法和網址:

POST https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets?secretId=$SECRET_ID

JSON 要求主體:

{
  "replication": {"automatic": {}},
  "expire_time": "TIMESTAMP"
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets?secretId=$SECRET_ID"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets?secretId=$SECRET_ID" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

使用時間長度建立會過期的密鑰

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • DURATION:到期時間長度 (以秒為單位),例如 86400s

HTTP 方法和網址:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID

JSON 要求主體:

{
  "replication": {"automatic": {}},
  "ttl": "DURATION"
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

更新密鑰的到期日

如要更新密鑰的到期日期和時間,請使用下列其中一種方法:

控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 如要編輯密鑰,請在清單中找出密鑰,然後按一下與該密鑰相關聯的「動作」選單。在「動作」選單中,按一下「編輯」

  3. 前往「有效期限」部分。更新到期日期和時間,然後按一下「更新密鑰」

gcloud

使用時間戳記更新密鑰的到期時間

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • TIMESTAMP:RFC 3339 格式的到期時間,例如 2100-01-01T09:00:00-05:00

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID \
  --expire-time "TIMESTAMP"

Windows (PowerShell)

gcloud secrets update SECRET_ID `
  --expire-time "TIMESTAMP"

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
  --expire-time "TIMESTAMP"

使用時間長度更新密鑰的到期時間

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • DURATION:到期時間長度 (以秒為單位),例如 86400s

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID \
    --ttl "DURATION"

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --ttl "DURATION"

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --ttl "DURATION"

REST

使用時間戳記更新密鑰的到期時間

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • TOKEN:您自己的 Oauth2.0 存取權杖
  • TIMESTAMP:RFC 3339 格式的到期時間,例如 2100-01-01T09:00:00-05:00

HTTP 方法和網址:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time

JSON 要求主體:

{"expire_time": "TIMESTAMP"}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

使用時間長度更新密鑰的到期時間

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • DURATION:到期時間長度 (以秒為單位),例如 86400s

HTTP 方法和網址:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl

JSON 要求主體:

{"ttl": "DURATION"}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

移除密鑰的到期日

如要移除密鑰的到期日期和時間,請使用下列其中一種方法:

控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 如要編輯密鑰,請在清單中找出密鑰,然後按一下與該密鑰相關聯的「Actions」(動作) 選單。在「動作」選單中,按一下「編輯」

  3. 前往「有效期限」部分。取消勾選「設定到期日」核取方塊,然後按一下「更新密鑰」

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID \
  --remove-expiration

Windows (PowerShell)

gcloud secrets update SECRET_ID `
  --remove-expiration

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
  --remove-expiration

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • TOKEN:您自己的 Oauth2.0 存取權杖

HTTP 方法和網址:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time

JSON 要求主體:

{}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "etag": "\"162143305d282d\""
}

記錄到期時間

密鑰自動過期時,系統不會產生 Cloud 稽核記錄。 Secret Manager 不會傳送通知,而是會在密鑰到期前,以特定間隔將記錄寫入 Secret Manager Secret 資源

記錄時間 祕密事件類型
30 days before expiration EXPIRES_IN_30_DAYS
到期日前 7 天 EXPIRES_IN_7_DAYS
到期日前 1 天 EXPIRES_IN_1_DAY
到期前 6 小時 EXPIRES_IN_6_HOURS
到期前 1 小時 EXPIRES_IN_1_HOUR
到期時 EXPIRED

如要瞭解如何查看這些記錄,請參閱 Logging 快速入門指南。您可以建立記錄指標,並使用這些指標為即將到期的憑證建立快訊。

後續步驟