设置区域级密钥的失效日期

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

概览

默认情况下,存储在 Secret Manager 中的 Secret 会一直保留,直到用户将其删除。如果 Secret 只能存储一段已知的有限时间,您可以为其附加到期时间。密文在配置的到期时间到达后,系统会自动将其删除。

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

<ph type="x-smartling-placeholder">

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

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

限制

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

安全地使用即将过期的 Secret

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

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

  • 设置到期日期:权限应在密钥本身设置为过期前不久过期。这样,您就可以找出可能仍在意外使用该 Secret 的所有工作流或进程。

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

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

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

例如,设想一个场景,服务账号需要每天访问某个密钥的 30 天。您可以将密钥配置为在创建 60 天后过期。这样可以提供缓冲期 超出预期用量后的值您还可以设置条件 IAM 绑定, 服务账号 Secret Accessor 角色 45 天的时间。如果服务账号在 45 天后尝试访问密文,则会被拒绝访问权限。依赖于此密钥的所有工作流程都将停止运行。管理员可以通过授予 Secret Accessor 角色快速恢复访问权限 服务账号这样一来,他们就有时间调查为什么密文在预期的 30 天期限过后仍有用,因为密文本身不会在之后的 15 天内被删除。

此外,还可以根据 Secret 警告的日志创建提醒 即将到期如需了解详情,请参阅本文档的到期日志记录部分。

指定时间戳和时长

  • 时间戳值必须采用 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 页面上,点击区域级密钥标签页,然后 点击创建区域级密钥

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

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

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

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

  7. Month/Day/Year, Hour:Minute AM/PM 格式输入过期日期和时间, 例如 7/31/20, 1:00 AM。您还可以使用日期和时间选择器输入到期日期和时间。

  8. 点击创建密钥

gcloud

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

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • 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

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

  • 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

使用时间戳创建到期 Secret

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

  • 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:密钥的 ID 或密钥的完全限定标识符
  • 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 页面上,点击区域级密钥标签页。

  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 的到期时间

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • LOCATION:Secret 的 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

使用时间戳更新 Secret 的到期时间

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

  • LOCATION:Secret 的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • 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\""
}

使用时长更新 Secret 的到期时间

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

  • LOCATION:Secret 的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • 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 页面上,点击区域级密钥标签页。

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

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

gcloud

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • LOCATION:Secret 的 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:Secret 的 Google Cloud 位置
  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • 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

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

后续步骤