为密钥设置到期日期

本页介绍了如何为新密钥或现有密钥设置到期日期、更改现有密钥的到期日期,以及从密钥中移除之前设置的任何到期日期。

概览

默认情况下,存储在 Secret Manager 中的 Secret 会一直存在,直到用户将其删除。如果必须仅在有限的时间内存储 Secret,您可以为其附加到期时间。在密文的配置到期时间,系统会自动将其删除。

如果您没有必须删除密文的要求,请考虑使用 IAM Conditions 或已停用版本状态以安全方式撤消访问权限。

您可以输入时间戳或时长作为到期时间。检索密文元数据时,无论到期时间的提供方式如何,到期时间都会始终以时间戳的形式返回。

您可以随时添加、更新或移除密文的到期时间。

限制

  • 密文的到期时间不能小于 60 秒或 100 年以上。

安全使用到期的密文

密文在 Secret Manager 中到期后,密文会以不可逆转的方式删除。如需检测即将到期的密文,最好的方法是在到期之前使用 IAM Conditions 移除使用密文的账号的权限。

如需有效管理对密文的访问权限,请为授予的权限设置基于时间的条件。

  • 设置失效日期:权限应在密钥本身失效前不久失效。这样一来,您就可以找出可能仍在意外使用该 Secret 的任何工作流或流程。

  • 监控中断情况:如果撤消权限后有任何工作流停止运行,您可以快速恢复访问权限,以尽可能减少影响。

  • 根据需要进行调整:如果您发现需要更多时间,可以延长密文的到期日期,或者如果不再需要该密文,甚至可以将其完全移除。

这种方法有助于确保对 Secret 的访问受到严格控制,并且仅在必要时可用,从而降低未经授权的访问或滥用风险。

例如,假设某个服务账号需要在 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 页面上,点击创建 Secret

  3. 创建 Secret 页面的名称字段中,输入 Secret 的名称。

  4. 输入 Secret 的值(例如 abcd1234)。您还可以使用上传文件选项上传包含 Secret 值的文本文件。此操作会自动创建 Secret 版本。

  5. 前往失效,然后选中设置失效日期复选框。

  6. 月/日/年,时:分 AM/PM 格式输入失效日期和时间,例如 7/31/20, 1:00 AM。您还可以使用日期和时间选择器输入到期日期和时间。

  7. 点击创建密钥

gcloud

使用时间戳创建到期的密文

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:相应 Secret 的 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:相应 Secret 的 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: Google Cloud 项目 ID
  • SECRET_ID:相应 Secret 的 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: Google Cloud 项目 ID
  • SECRET_ID:相应 Secret 的 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. 前往过期部分。更新失效日期和时间,然后点击更新 Secret

gcloud

使用时间戳更新密文的到期时间

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:相应 Secret 的 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:相应 Secret 的 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: Google Cloud 项目 ID
  • SECRET_ID:相应 Secret 的 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: Google Cloud 项目 ID
  • SECRET_ID:相应 Secret 的 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. 如需修改某个 Secret,请在列表中找到该 Secret,然后点击与该 Secret 关联的 操作菜单。在操作菜单中,点击修改

  3. 前往过期部分。清除设置失效日期复选框,然后点击更新密文

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:相应 Secret 的 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: Google Cloud 项目 ID
  • SECRET_ID:相应 Secret 的 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 Audit Logs。Secret Manager 会按特定的时间间隔将日志写入 Secret Manager Secret 资源,一直到密文到期。

记录时间 密文事件类型
到期之前的 30 天 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

如需了解如何查看这些日志,请参阅日志记录快速入门指南。您可以创建基于日志的指标,并使用这些指标针对即将到期的证书创建提醒。

后续步骤