推迟销毁密钥版本

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

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

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

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

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

  • 延迟期限结束后,相应密钥版本会被永久销毁,且无法撤消。

优势

此功能具有以下优势:

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

  • 销毁密文版本会触发向密文上配置的 Pub/Sub 主题发送 SECRET_VERSION_DESTROY_SCHEDULED 通知。具有 Secret Manager Admin 角色的用户可以通过启用停用密文版本来取消预定的销毁并恢复密文版本。

准备工作

  1. Enable the Secret Manager API.

    Enable the API

  2. 设置身份验证。

    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 的凭据。

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

      所需的角色

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

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

      设置推迟销毁

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

      控制台

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

        前往 Secret Manager

      2. Secret Manager 页面上,点击创建 Secret

      3. 创建 Secret 页面的名称字段中,输入 Secret 的名称。

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

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

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

      7. 点击创建密钥

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

      gcloud

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

      • SECRET_ID:相应 Secret 的 ID 或完全限定标识符。
      • TTL_DURATION:密钥版本的销毁延迟时长。您可以采用任意格式输入时长,例如天、小时或秒。所需的最短时长为 1 天,最长时长可设置为 1000 天。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

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

      Windows (PowerShell)

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

      Windows (cmd.exe)

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

      响应中包含新创建的密钥。

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID。
      • SECRET_ID:相应 Secret 的 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 的详情页面。在密钥详情页面上,点击 修改密钥

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

      gcloud

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

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

      执行以下命令:

      Linux、macOS 或 Cloud Shell

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

      Windows (PowerShell)

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

      Windows (cmd.exe)

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

      响应中包含新创建的密钥。

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID
      • SECRET_ID:相应 Secret 的 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"
      }
      

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

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

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

      停用延迟销毁

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

      控制台

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

        前往 Secret Manager

      2. 如需修改 Secret,请使用以下方法之一:

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

        • 点击相应 Secret 的名称,前往该 Secret 的详情页面。在密钥详情页面上,点击 修改密钥

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

      gcloud

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

      • SECRET_ID:相应 Secret 的 ID 或完全限定标识符

      执行以下命令:

      Linux、macOS 或 Cloud Shell

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

      Windows (PowerShell)

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

      Windows (cmd.exe)

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

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID
      • SECRET_ID:相应 Secret 的 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 Manager 页面上,点击某个密文以访问其版本。必须为此密钥配置版本延迟销毁。

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

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

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

      gcloud

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

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

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

      Windows (PowerShell)

      gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

      Windows (cmd.exe)

      gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID
      • SECRET_ID:相应 Secret 的 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 Manager 页面上,点击某个密文以访问其版本。

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

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

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

      gcloud

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

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

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

      Windows (PowerShell)

      gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

      Windows (cmd.exe)

      gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID
      • SECRET_ID:相应 Secret 的 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 Manager 页面上,点击某个密文以访问其版本。

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

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

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

      gcloud

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

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

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

      Windows (PowerShell)

      gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

      Windows (cmd.exe)

      gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

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

      REST

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

      • PROJECT_ID: Google Cloud 项目 ID
      • SECRET_ID:相应 Secret 的 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\""
      }
      

      后续步骤