为区域性密钥设置到期日期

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

概览

默认情况下,存储在 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 标签页,然后点击创建区域性 Secret

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

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

  5. 区域列表中选择要存储区域级密钥的位置。

  6. 前往到期日期,然后选中设置到期日期复选框。

  7. 请以 月/日/年、小时:分钟(上午/下午)格式输入失效日期和时间,例如 7/31/20, 1:00 AM。您还可以使用日期和时间选择器输入到期日期和时间。

  8. 点击创建密钥

gcloud

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

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • LOCATION:密钥的 Google Cloud 位置
  • TIMESTAMP:采用 RFC 3339 格式的到期时间,例如 2100-01-01T09:00:00-05:00

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
    --expire-time "TIMESTAMP"

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
    --expire-time "TIMESTAMP"

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
    --expire-time "TIMESTAMP"

使用时长创建到期的密文

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • LOCATION:密钥的 Google Cloud 位置
  • DURATION:到期时长(以秒为单位),例如 86400s

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
  --ttl "DURATION"

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
  --ttl "DURATION"

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
  --ttl "DURATION"

REST

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

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:密钥的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • TIMESTAMP:采用 RFC 3339 格式的到期时间,例如 2100-01-01T09:00:00-05:00

HTTP 方法和网址:

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

请求 JSON 正文:

{"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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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\""
}

使用时长创建到期的密文

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:密钥的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • DURATION:到期时长(以秒为单位),例如 86400s

HTTP 方法和网址:

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

请求 JSON 正文:

{"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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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. Secret Manager 页面上,点击 Regional secrets(区域级 Secret)标签页。

  3. 如需修改密钥,请在列表中找到相应密钥,然后点击与该密钥关联的 Actions 菜单。在操作菜单中,点击修改

  4. 前往到期时间部分。更新到期日期和时间,然后点击更新密钥

gcloud

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

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • LOCATION:您存储 Secret 数据的 Google Cloud 区域
  • TIMESTAMP:采用 RFC 3339 格式的到期时间,例如 2100-01-01T09:00:00-05:00

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
  --expire-time "TIMESTAMP"

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
  --expire-time "TIMESTAMP"

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
  --expire-time "TIMESTAMP"

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

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • LOCATION:密钥的 Google Cloud 位置
  • DURATION:到期时长(以秒为单位),例如 86400s

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --ttl "DURATION"

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --ttl "DURATION"

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --ttl "DURATION"

REST

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

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:密钥的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • TOKEN:您自己的 Oauth2.0 访问令牌
  • TIMESTAMP:采用 RFC 3339 格式的到期时间,例如 2100-01-01T09:00:00-05:00

HTTP 方法和网址:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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\""
}

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

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:密钥的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • DURATION:到期时长(以秒为单位),例如 86400s

HTTP 方法和网址:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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 Manager 页面上,点击 Regional secrets(区域级 Secret)标签页。

  3. 如需修改密钥,请在列表中找到相应密钥,然后点击与该密钥关联的 Actions 菜单。在操作菜单中,点击修改

  4. 前往到期时间部分。取消选中设置到期日期复选框,然后点击更新密文

gcloud

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • LOCATION:密钥的 Google Cloud 位置

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
  --remove-expiration

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
  --remove-expiration

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
  --remove-expiration

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:密钥的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • TOKEN:您自己的 Oauth2.0 访问令牌

HTTP 方法和网址:

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

请求 JSON 正文:

{}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X PATCH \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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",
  "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

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

后续步骤