推迟销毁密钥版本

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

销毁密钥版本时,密钥材料会立即销毁 且永久有效。作为 Secret Manager 管理员,您可以设置推迟销毁 密钥版本,以确保密钥版本在更新后不会立即销毁 请求,并且可在可配置的时长内恢复。

在密钥上启用延迟销毁功能后,如果您销毁密钥版本,则会发生以下情况:

  • 该版本已停用,无法使用。
  • 系统安排在延迟期结束时永久销毁该版本。
  • 延迟期结束后,密钥版本将永久且不可撤消 已销毁。

优势

此功能具有以下优势:

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

  • 销毁 Secret 版本会触发 SECRET_VERSION_DESTROY_SCHEDULED 通知 在 Secret 上配置的 Pub/Sub 主题。作为 Secret Manager 管理员,您可以取消预定的销毁 并通过以下方式之一恢复密钥版本: 启用 或者停用密钥令牌 版本

准备工作

  • Enable the Secret Manager API.

    Enable the API

  • 设置身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

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

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

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

所需的角色

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

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

设置推迟销毁

您可以在创建密钥时启用密钥版本延迟销毁功能 或在您更新 Secret 时创建。

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 按照创建 Secret 所需的步骤操作。

  3. 前往推迟销毁密钥版本部分。

  4. 选中设置延迟销毁时长复选框。

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

  6. 点击创建密钥

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

gcloud

如需为 Secret 配置销毁延迟时长,请使用 gcloud beta secrets create 命令。

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
  • TTL_DURATION: Secret 版本。您可以使用任何格式输入时长,例如天、小时或秒。通过 要求的最短持续时间为 1 天,而最长持续时间可设置为 1000 天。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

响应包含新创建的密钥。

REST

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

  • PROJECT_ID:您要创建密钥的 Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
  • TTL_DURATION:密钥版本的销毁延迟时长。进入 持续时间(以秒为单位)。请注意,时长下限为 1 天,但时长上限可设置 增加到 1000 天

HTTP 方法和网址:

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

请求 JSON 正文:

{"replication": {"automatic": {}}, "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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID",
  "replication":{
     "automatic":{

     }
  },
  "createTime":"2023-10-16T17:10:16.345401Z",
  "etag":"\"1607d90ee3d84c\"",
  "versionDestroyTtl":"TTL_DURATION"
}

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

  • 当某个密钥被删除时,所有密钥材料 及相关密文版本都会被立即删除。
  • 为密钥设置到期日期后,如果密钥到期, 即使启用了推迟销毁功能,密钥版本也会立即销毁

更新销毁推迟时长

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 使用以下任一选项修改您的密钥:

    • 点击更多操作, 您要修改的 Secret,然后从菜单中选择修改
    • 点击 Secret 名称,前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret
  3. 前往推迟销毁密钥版本部分。

  4. 销毁延迟时长字段中,输入更新后的时长。

  5. 点击更新密钥

gcloud

如需更新销毁延迟时长,请使用 gcloud beta secrets update 命令。

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

  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • TTL_DURATION:密钥版本的销毁推迟时长

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

响应包含更新后的密钥。

REST

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

  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
  • TTL_DURATION:密钥版本的销毁延迟时长

HTTP 方法和网址:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID",
  "replication":{
     "automatic":{

     }
  },
  "createTime":"2023-10-16T17:10:16.345401Z",
  "etag":"\"1607d90ee3d84c\"",
  "versionDestroyTtl":"TTL_DURATION"
}

受销毁推迟时长影响的 Secret 版本取决于 以下内容:

  • 首次对密钥设置延迟销毁时, 销毁推迟时长会影响 密钥。
  • 更新或移除销毁延迟时长后,更改只会反映在尝试执行销毁操作的新密钥版本中。已安排销毁的密钥版本将继续在预定的销毁时间销毁。

停用延迟销毁

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 使用以下任一选项修改您的密钥:

    • 点击更多操作, 您要修改的 Secret,然后从菜单中选择修改
    • 点击 Secret 名称,前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret
  3. 转到推迟销毁密钥版本部分。

  4. 清除设置延迟销毁的持续时间复选框。

  5. 点击更新密钥

gcloud

如需移除销毁延迟时长,请使用 gcloud beta secrets update 命令。

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl

Windows (PowerShell)

gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl

Windows (cmd.exe)

gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl

响应中包含更新后的密钥。

REST

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

  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符

HTTP 方法和网址:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID",
  "replication":{
     "automatic":{

     }
  },
  "createTime":"2023-10-16T17:10:16.345401Z",
  "etag":"\"1607d90ee3d84c\""
}

测试延迟销毁密钥版本

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 点击密钥名称。系统随即会显示 Secret 详情页面。

  3. 密文详情页面的版本表中,选择一个密文版本。

  4. 操作列中,点击 查看更多。 然后点击销毁

  5. 在显示的对话框中,点击安排销毁所选版本

gcloud

如需销毁 Secret 版本,请使用 gcloud beta secrets versions destroy 命令。

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

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

响应中包含已销毁的密钥版本。

REST

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

  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:destroy" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime":"2023-10-16T17:21:55.920036Z",
  "state":"DISABLED",
  "replicationStatus":{
     "automatic":{

     }
  },
  "etag":"\"1607d8b2fc1cf4\"",
  "scheduledDestroyTime":"2023-10-16T17:26:57.459395960Z"
}

密钥版本会在销毁推迟时长过后立即停用并安排销毁。您可以在版本表的安排销毁时间列下方查看该版本的确切销毁日期和时间。

恢复 Secret 版本

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

启用已安排销毁的 Secret 版本

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 点击密钥名称。系统随即会显示 Secret 详情页面。

  3. 密文详情页面的版本表中,选择要安排销毁的密文版本。

  4. 操作列中,点击 查看更多,然后点击启用

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

gcloud

如需启用计划销毁的密钥版本,请使用 gcloud beta secrets version enable 命令。

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

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

响应包含已启用的密钥版本。

REST

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

  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:enable" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime":"2023-10-16T17:21:55.920036Z",
  "state":"ENABLED",
  "replicationStatus":{
     "automatic":{

     }
  },
  "etag":"\"1607d8b3e8e1bc\""
}

停用计划销毁的密钥版本

控制台

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    转到 Secret Manager

  2. 点击密钥名称。系统随即会显示 Secret 详情页面。

  3. 密文详情页面的版本表中,选择要安排销毁的密文版本。

  4. 操作列中,点击 查看更多。 然后点击停用

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

gcloud

如需停用已安排销毁的 Secret 版本,请使用 gcloud beta secrets versions disable 命令。

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

  • SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
  • SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

响应包含已停用的密钥版本。

REST

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

  • PROJECT_ID:Google Cloud 项目 ID
  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • VERSION_ID:版本的 ID 或版本的完全限定标识符

HTTP 方法和网址:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:disable" | Select-Object -Expand Content

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

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime":"2023-10-16T17:21:55.920036Z",
  "state":"DISABLED",
  "replicationStatus":{
     "automatic":{

     }
  },
  "etag":"\"1607d8b3e8e1bc\""
}

后续步骤