推迟销毁区域性密钥版本

本页面介绍了如何设置密钥版本的延迟销毁、更新或移除销毁延迟时长,以及恢复已安排销毁的密钥版本。

默认情况下,当用户选择销毁 Secret Manager 中的某个 Secret 版本时,系统会立即永久销毁相应 Secret 的内容。不过,拥有 Secret Manager Admin 角色的用户可以设置延迟销毁 Secret 版本,以确保 Secret 版本不会在收到请求后立即销毁,而是在可配置的时长内保持可恢复状态。

如果密文启用了延迟销毁,并且您销毁了某个密文版本,则会发生以下情况:

  • 版本已停用,无法使用。

  • 系统会在延迟期结束时安排永久销毁相应版本。

  • 延迟期过后,密钥版本将被永久且不可撤销地销毁。

优势

此功能具有以下优势:

  • 提供额外的保护措施,以防关键机密材料被意外或恶意销毁。任何具有 Secret Manager Secret Version Manager 角色的用户都可以销毁 Secret 版本。此操作无法撤销。通过设置延迟销毁,您可以防止密钥版本立即销毁。您可以向用户授予管理 Secret 版本生命周期所需的最低访问权限,以便监控和防止敏感数据被意外销毁。

  • 销毁 Secret 版本会触发向 Secret 上配置的 Pub/Sub 主题发送SECRET_VERSION_DESTROY_SCHEDULED 通知。具有 Secret Manager 管理员角色的用户可以通过启用或停用相应 Secret 版本来取消预定的销毁操作并恢复该 Secret 版本。

准备工作

  1. 启用 Secret Manager API(如果尚未启用)。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您是项目创建者,则可能已通过 Owner 角色 (roles/owner) 获得此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。

    启用 API

  2. 设置身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Cloud de Confiance 控制台访问 Cloud de Confiance by S3NS 服务和 API 时,无需设置身份验证。

    gcloud

    安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:

    gcloud init

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。

    如需了解详情,请参阅 Cloud de Confiance 身份验证文档中的使用 REST 时进行身份验证。

所需的角色

如需获得设置延迟销毁 Secret 版本所需的权限,请让您的管理员为您授予 Secret 的 Secret Manager Admin (roles/secretmanager.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

设置推迟销毁

您可以在创建 Secret 或更新 Secret 时启用 Secret 版本的延迟销毁。如需设置延迟销毁,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域级 Secret 标签页,然后点击创建区域级 Secret。

  3. 在创建区域级 Secret 页面上,在名称字段中输入 Secret 的名称。

  4. 输入 Secret 的值(例如 abcd1234)。您还可以使用上传文件选项上传包含 Secret 值的文本文件。此操作会自动创建 Secret 版本。

  5. 从区域列表中选择您要存储区域级密钥的位置。

  6. 前往推迟销毁密钥版本部分,然后选中设置推迟销毁时长复选框。

  7. 在销毁推迟时长字段中,输入时长(以天为单位)。您可以输入的最小值是 1 天,最大值是 1000 天。

  8. 点击创建密钥。

    如需在现有 Secret 上启用此功能,请前往修改 Secret 页面,然后配置销毁延迟时长。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:相应 Secret 的 ID。
  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置。
  • TTL_DURATION:Secret 版本的销毁延迟时长。您可以采用任意格式输入时长,例如天、小时或秒。最短时长为 1 天,最长时长可设置为 1000 天。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

响应中包含新创建的 Secret。

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置。
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID。
  • SECRET_ID:相应 Secret 的 ID。
  • TTL_DURATION:密钥版本的销毁延迟时长。输入时长(秒)。请注意,所需的最短时长为 1 天,最长时长可设置为 1,000 天。

HTTP 方法和网址:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID

请求 JSON 正文:

{
  "version_destroy_ttl":"TTL_DURATION"
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T06:34:32.995517Z",
  "etag": "\"1621455df3febd\"",
  "versionDestroyTtl": "TTL_DURATION"
}

延迟销毁不适用于以下场景:

  • 删除某个密钥后,所有密钥材料和相关密钥版本都会立即删除。

  • 如果为密钥设置了到期日期,并且密钥已到期,则即使为该密钥启用了延迟销毁,所有密钥版本也会立即销毁。

更新销毁推迟时长

如需更新销毁延迟时长,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域级 Secret 标签页。

  3. 如需修改密钥,请使用以下方法之一:

    • 点击要修改的密钥对应的操作,然后点击修改。

    • 点击 Secret 名称,前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret。

  4. 在修改 Secret 页面上,前往推迟销毁 Secret 版本部分。 根据需要更新延迟时长,然后点击更新密钥。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:Secret 的 ID
  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • TTL_DURATION:密钥版本的销毁延迟时长

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION

响应中包含新创建的 Secret。

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID
  • SECRET_ID:相应 Secret 的 ID
  • TTL_DURATION:密钥版本的销毁延迟时长

HTTP 方法和网址:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl

请求 JSON 正文:

{
  "version_destroy_ttl":"TTL_DURATION"
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T06:34:32.995517Z",
  "etag": "\"16214561a80d09\"",
  "versionDestroyTtl": "TTL_DURATION"
}

受销毁延迟时长影响的密钥版本取决于以下因素:

  • 首次为密钥设置延迟销毁时,销毁延迟时长会影响密钥的所有有效(已启用和已停用)版本。

  • 更新或移除销毁延迟时长后,相应更改只会反映在尝试执行销毁操作的新 Secret 版本上。已安排销毁的密钥版本将继续在预定的销毁时间销毁。

停用延迟销毁

如需停用延迟销毁版本,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域级 Secret 标签页。

  3. 如需修改密钥,请使用以下方法之一:

    • 点击要修改的密钥对应的操作,然后点击修改。

    • 点击 Secret 名称,前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret。

  4. 在修改 Secret 页面上,前往推迟销毁 Secret 版本部分。 清除设置推迟销毁时长复选框,然后点击更新 Secret。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_ID:Secret 的 ID
  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID
  • SECRET_ID:Secret 的 ID

HTTP 方法和网址:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl

请求 JSON 正文:

{}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T06:34:32.995517Z",
  "etag": "\"16214564f18f19\""
}

安排密钥版本推迟销毁

如需安排密钥版本延迟销毁,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域级 Secret 标签页,然后点击某个 Secret 以访问其版本。必须为此密钥配置版本延迟销毁。

  3. 在 Secret 详情页面的版本标签页中,选择要销毁的 Secret 版本。

  4. 点击 操作,然后点击销毁。

  5. 在随即显示的确认对话框中,输入密钥 ID 以进行确认,然后点击安排销毁所选版本。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:相应 Secret 的 ID
  • LOCATION:Secret 的 Cloud de Confiance by S3NS 位置

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (PowerShell)

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (cmd.exe)

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID
  • SECRET_ID:Secret 的 ID
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:destroy

请求 JSON 正文:

{}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:destroy"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:destroy" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime": "2024-09-04T06:41:57.859674Z",
  "state": "DISABLED",
  "etag": "\"16214579184a2c\"",
  "scheduledDestroyTime": "2024-09-05T13:15:28.357251843Z"
}

密钥版本会立即停用,并安排在销毁推迟时长到期后销毁。您可以在版本表格的计划销毁时间列下查看版本将被销毁的确切日期和时间。

恢复 Secret 版本

您可以启用或停用已安排销毁的密文版本,以恢复该版本。

启用已安排销毁的 Secret 版本

如需启用已安排销毁的 Secret 版本,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域级 Secret 标签页,然后点击某个 Secret 以访问其版本。

  3. 在 Secret 详情页面的版本标签页中,选择已安排销毁的 Secret 版本。

  4. 点击 操作,然后点击启用。

  5. 在显示的确认对话框中,点击启用所选版本。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:相应 Secret 的 ID
  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (PowerShell)

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (cmd.exe)

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID
  • SECRET_ID:相应 Secret 的 ID
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:enable

请求 JSON 正文:

{}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:enable"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:enable" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime": "2024-09-04T06:41:57.859674Z",
  "state": "ENABLED",
  "etag": "\"1621457b3c1459\""
}

停用已安排销毁的 Secret 版本

如需停用已安排销毁的 Secret 版本,请使用以下方法之一:

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Secret Manager 页面。

    前往 Secret Manager

  2. 在 Secret Manager 页面上,点击区域 Secret 标签页,然后点击某个 Secret 以访问其版本。

  3. 在 Secret 详情页面的版本标签页中,选择已安排销毁的 Secret 版本。

  4. 点击 操作,然后点击停用。

  5. 在随即显示的确认对话框中,点击停用所选版本。

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:Secret 的 ID
  • LOCATION:Secret 的 Cloud de Confiance by S3NS 位置

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (PowerShell)

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

Windows (cmd.exe)

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION

响应包含已停用的 Secret 版本。

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:相应 Secret 的 Cloud de Confiance by S3NS 位置
  • PROJECT_ID: Cloud de Confiance by S3NS 项目 ID
  • SECRET_ID:相应 Secret 的 ID
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable

请求 JSON 正文:

{}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime": "2024-09-04T06:41:57.859674Z",
  "state": "DISABLED",
  "etag": "\"1621457b3c1459\""
}

后续步骤