为密钥设置到期日期

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

概览

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

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

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

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

限制

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

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

安全使用到期的密文

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

为此,在授予 Secret 权限时,请将基于时间的条件附加到绑定中。绑定应在密文预计不再使用后过期,但过期时间应足够早,以便在密文过期之前发现已移除的权限。如果我们认为工作流程 撤消权限后不再使用 Secret Break,则权限 可以重新添加以快速缓解如果需要更多时间 可以更新甚至移除过期日期。

例如,假设服务账号预计在 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,请先 安装或升级到 378.0.0 或更高版本的 Google Cloud CLI。 在 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,请先 安装或升级到 378.0.0 或更高版本的 Google Cloud CLI。 在 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

移除 Secret 的到期时间

gcloud

如需在命令行中使用 Secret Manager,请先 安装或升级到 378.0.0 或更高版本的 Google Cloud CLI。 在 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

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

后续步骤