本主题介绍如何在 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_time
或 ttl
的同时为这两者均不提供值将移除到期时间。
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 快速入门指南。您可以创建基于日志的指标,并使用这些指标针对即将到期的提醒创建提醒。