推迟销毁密钥版本

本页面介绍了如何设置推迟销毁密钥版本、更新 或移除销毁推迟时长,并恢复预定的 Secret 版本 以便彻底破坏

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

针对密钥启用了延迟销毁,而您销毁了密钥 会出现以下情况:

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

优势

此功能具有以下优势:

准备工作

  • 启用 Secret Manager API。

    启用 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 Manager Admin (roles/secretmanager.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

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

设置推迟销毁

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

控制台

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

    转到 Secret Manager

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

  3. 转到推迟销毁密钥版本部分。

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

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

  6. 点击创建密钥

如需对现有密钥启用此功能,请前往修改密钥 然后配置销毁推迟时长。

gcloud

如需为密钥配置销毁推迟时长,请使用 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 Storage 存储分区中 想要创建 Secret
  • 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,然后从菜单中选择修改
    • 点击密钥名称以转到密钥详情页面。在 密钥详情页面,点击 修改密钥
  3. 转到推迟销毁密钥版本部分。

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

  5. 点击更新密钥

gcloud

要更新销毁推迟时长,请使用 gcloud beta secrets update 命令。

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

  • SECRET_ID:密钥的 ID 或密钥的完全限定标识符
  • 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:密钥的 ID 或密钥的完全限定标识符
  • 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 版本取决于 以下内容:

  • 首次对密钥设置延迟销毁时, 销毁推迟时长会影响 密钥。
  • 销毁推迟时长被更新或移除后,相应变化会反映 只能针对尝试执行销毁操作的新 Secret 版本创建。秘诀 已安排销毁的版本将继续被销毁 在预定的销毁时间进行部署

停用延迟销毁

控制台

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

    转到 Secret Manager

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

    • 点击更多操作, 您要修改的 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. Secret 详情页面的版本表格中,选择一个 Secret 版本。

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

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

gcloud

如需销毁密钥版本,请使用 gcloud beta secretsversions destroy 命令。

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

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

执行以下命令:

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 版本 方法是启用或停用密钥版本

启用计划销毁的密钥版本

控制台

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

    转到 Secret Manager

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

  3. 密钥详情页面的版本表格中,选择一个密钥版本 预定的销毁

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

  5. 在弹出的对话框中,点击启用所选版本

gcloud

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

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

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

执行以下命令:

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\""
}

停用已安排销毁的 Secret 版本

控制台

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

    转到 Secret Manager

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

  3. 密钥详情页面的版本表格中,选择一个密钥版本 预定的销毁

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

  5. 在出现的对话框中,点击停用所选版本

gcloud

如需停用计划销毁的 Secret 版本,请使用 gcloud beta secrets versiondisable 命令。

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

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

执行以下命令:

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\""
}

后续步骤