推迟销毁密钥版本

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

销毁密钥版本时,密钥材料会立即永久销毁。作为 Secret Manager 管理员,您可以设置推迟销毁 Secret 版本,这样 Secret 版本在收到请求后就不会立即销毁,并且可在可配置的时长内恢复。

如果对密钥启用了延迟销毁功能,并且销毁了密钥版本,则会发生以下情况:

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

优势

此功能具有以下优势:

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

  • 销毁密钥版本会触发针对密钥上配置的 Pub/Sub 主题的SECRET_VERSION_DESTROY_SCHEDULED通知。作为 Secret Manager 管理员,您可以通过启用停用 Secret 版本来取消预定的销毁并恢复 Secret 版本。

准备工作

  • 启用 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

    在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

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

所需的角色

如需获取设置推迟销毁密钥版本所需的权限,请让管理员向您授予针对密钥的 Secret Manager Admin (roles/secretmanager.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

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

设置推迟销毁

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

控制台

  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:密钥版本的销毁推迟时长。您可以按任何格式(例如天、小时或秒)输入时长。时长下限为 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:您要在其中创建 Secret 的 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"
}

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

  • 当某个 Secret 被删除时,所有 Secret 材料和相关 Secret 版本都会立即删除。
  • 为密钥设置失效日期后,即使对密钥启用了延迟销毁功能,该密钥的所有版本也会立即销毁。

更新销毁推迟时长

控制台

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

    转到 Secret Manager

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

    • 点击与您要修改的密钥相关联的 更多操作,然后从菜单中选择修改
    • 点击密钥名称以转到密钥详情页面。在密钥详情页面上,点击 修改密钥
  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. 使用以下任一选项修改您的密钥:

    • 点击与您要修改的密钥相关联的 更多操作,然后从菜单中选择修改
    • 点击密钥名称以转到密钥详情页面。在密钥详情页面上,点击 修改密钥
  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

如需销毁密钥版本,请使用 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"
}

在销毁推迟时长到期后,系统会立即停用相应密钥版本并安排销毁。您可以在版本表中的已安排销毁时间列下查看版本销毁的确切日期和时间。

恢复密钥版本

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

启用计划销毁的密钥版本

控制台

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

    转到 Secret Manager

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

  3. 密钥详情页面的版本表中,选择计划销毁的 Secret 版本。

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

停用计划销毁的密钥版本

控制台

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

    转到 Secret Manager

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

  3. 密钥详情页面的版本表中,选择计划销毁的 Secret 版本。

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

后续步骤