设置 Secret 的失效日期

本主题介绍如何在 Secret Manager 中设置 Secret 的失效日期。该主题还介绍了如何更新或移除为 Secret 设置的失效日期。

概览

默认情况下,存储在 Secret Manager 中的 Secret 一直存在,直到用户删除它们为止。如果 Secret 应仅存储已知的有限时间,您可以为其附加到期时间。Secret 在配置的到期时间会自动删除。

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

您可以以时间戳或时长形式输入到期时间。检索 Secret 元数据时,无论以何种方式指定,到期时间始终以时间戳形式返回。

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

限制

  • 只能通过 Secret Manager v1 API 和 gcloud 命令行工具中获得密文到期时间。

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

安全地使用即将过期的 Secret

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

为此,在授予对 Secret 的权限时,请向绑定附加基于时间的条件。绑定应在预计将不再使用密文后到期,但应提前足够早,可以在该密文到期之前注意到已移除的权限。如果系统认为在权限撤消后不再使用 Secret 中断的工作流,则可以重新添加权限以快速缓解问题。如果需要更多时间,可以更新甚至移除 Secret 过期时间。

例如,假设服务账号预计在 30 天内每天访问一次密文。然后,您可以将密文到期时间设置为自创建之时起 60 天,并且可以使用条件 IAM 绑定向服务账号授予 Secret Accessor 角色长达 45 天。如果服务账号在 45 天后尝试访问密文,则系统会返回“权限遭拒”错误,并且需要密文的工作流将中断。然后,管理员可以向服务账号重新授予 Secret Accessor 角色,以便在调查时进行快速缓解,因为密文本身不会在之后的 15 天内被删除。

此外,您还可以根据日志,针对即将过期的 Secret 创建提醒。如需了解详情,请参阅到期日志记录

指定时间戳和时长

  • 时间戳值必须采用 RFC 3339 格式,例如 2100-01-01T09:00:00-05:00

  • 时长值的格式必须为包含“s”后缀的秒数,例如 86400s

创建过期密钥

使用时间戳创建到期 Secret:

gcloud

如需在命令行中使用 Secret Manager,请先安装或升级到 Google Cloud CLI 378.0.0 或更高版本。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

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

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication": {"automatic": {}},
  "expire_time": "TIMESTAMP"
}
EOF

使用时长创建到期 Secret:

gcloud

如需在命令行中使用 Secret Manager,请先安装或升级到 Google Cloud CLI 378.0.0 或更高版本。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

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

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication": {"automatic": {}},
  "ttl": "DURATION"
}
EOF

更新 Secret 的失效时间

任何密文都可以应用新的到期时间,无论它是否已有到期时间。每个密文一次只能配置一个到期时间。更新已有到期时间的密文的到期时间将覆盖其现有到期时间。

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

gcloud

如需在命令行中使用 Secret Manager,请先安装或升级到 Google Cloud CLI 378.0.0 或更高版本。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

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

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=expire_time" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "expire_time": "TIMESTAMP"
}
EOF

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

gcloud

如需在命令行中使用 Secret Manager,请先安装或升级到 Google Cloud CLI 378.0.0 或更高版本。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

gcloud secrets update "SECRET_ID" \
    --ttl "DURATION"

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "ttl": "DURATION"
}
EOF

移除密钥的失效时间

gcloud

如需在命令行中使用 Secret Manager,请先安装或升级到 Google Cloud CLI 378.0.0 或更高版本。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

gcloud secrets update "SECRET_ID" \
    --remove-expiration

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

updateMask 中包含 expire_timettl 的同时为这两者均不提供值将移除到期时间。

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=ttl" \
    --request "PATCH" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary '{}'

到期日志记录

当密文自动过期时,系统不会生成 Cloud Audit Logs。Secret Manager 会按照特定的时间间隔将日志写入 Secret Manager Secret 资源,直至 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 快速入门指南。您可以创建基于日志的指标,并使用这些指标针对即将到期的提醒创建提醒。

后续步骤