为密钥设置到期日期

本主题介绍了如何在 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_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 资源,一直到密文到期。

日志时间 密文事件类型
到期之前的 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

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

后续步骤