本主题介绍了如何在 Secret Manager 中为密文设置到期日期。本主题还介绍了如何更新或移除为密文设置的到期日期。
概览
默认情况下,存储在 Secret Manager 中的 Secret 会一直保留,直到用户将其删除。如果 Secret 应仅存储一段已知的有限时间,您可以为其附加到期时间。密文在配置的到期时间到达后,系统会自动将其删除。
如果您没有必须删除密文的要求,请考虑使用 IAM Conditions 或已停用版本状态以安全方式撤消访问权限。
您可以将到期时间输入为时间戳或时长。检索密文元数据时,无论到期时间的提供方式如何,到期时间都会始终以时间戳的形式返回。
您可以随时添加、更新或移除密文的到期时间。
限制
只能通过 Secret Manager
v1
API 和 gcloud 命令行工具中获得密文到期时间。密文的到期时间不能小于 60 秒或 100 年以上。
安全使用到期的密文
密文在 Secret Manager 中到期后,密文会以不可逆转的方式删除。如需检测即将到期的密文,最好的方法是在到期之前使用 IAM Conditions 移除使用密文的账号的权限。
为此,在授予 Secret 权限时,请将基于时间的条件附加到绑定中。绑定应在密文预计不再使用后过期,但过期时间应足够早,以便在密文过期之前发现已移除的权限。如果在撤消权限后,原本认为不再使用密文的工作流出现中断,则可以重新添加权限以快速缓解问题。如果需要更多时间,可以更新或甚至移除密文的到期时间。
例如,假设服务账号预计在 30 天内每天访问一次密文。然后,您可以将密文到期时间设置为自创建之时起 60 天,并且可以使用条件 IAM 绑定向服务账号授予 Secret Accessor 角色长达 45 天。如果服务账号在 45 天后尝试访问密文,则系统会返回“权限遭拒”错误,并且需要密文的工作流将中断。然后,管理员可以向服务账号重新授予 Secret Accessor 角色,以便在调查时进行快速缓解,因为密文本身不会在之后的 15 天内被删除。
此外,您还可以根据日志创建提醒,提醒您密文即将过期。如需了解详情,请参阅到期时间日志记录。
指定时间戳和时长
时间戳值必须采用 RFC 3339 格式,例如
2100-01-01T09:00:00-05:00
。时长值必须采用秒数格式,包括“s”后缀,例如
86400s
。
创建到期的密文
使用时间戳创建到期的密文:
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
使用时长创建到期的密文:
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
更新密文的到期时间
任何密文都可以应用新的到期时间,无论它是否已有到期时间。每个密文一次只能配置一个到期时间。更新已有到期时间的密文的到期时间将覆盖其现有到期时间。
使用时间戳更新密文的到期时间:
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
使用时长更新密文的到期时间:
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
资源,一直到密文到期。
日志时间 | 密文事件类型 |
---|---|
到期之前的 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 |
如需了解如何查看这些日志,请参阅日志记录快速入门指南。您可以创建基于日志的指标,并使用这些指标针对即将到期的证书创建提醒。