本页介绍了如何设置密钥版本的延迟销毁、更新或移除销毁延迟时长,以及恢复已安排销毁的密钥版本。
销毁 Secret 版本后,Secret 材料会立即被永久销毁。作为 Secret Manager 管理员,您可以设置延迟销毁密文版本,以便密文版本不会在收到请求后立即销毁,并且在可配置的时长内仍可恢复。
在密文上启用延迟销毁功能后,如果您销毁密文版本,则会发生以下情况:
- 该版本已停用,无法使用。
- 系统会在延迟期结束时安排永久销毁该版本。
- 延迟期结束后,该 Secret 版本将被永久销毁,且无法撤消。
优势
此功能具有以下优势:
提供额外的保护层,防止关键机密材料意外或恶意销毁。具有 Secret Manager Secret Version Manager 角色的任何用户都可以销毁 Secret 版本。此操作无法撤消。通过设置延迟销毁,您可以防止立即销毁密钥版本。您可以向用户授予管理 Secret 版本生命周期所需的最低访问权限,因为您可以监控和防止敏感数据意外销毁。
销毁 Secret 版本会触发向 Secret 上配置的 Pub/Sub 主题发送 SECRET_VERSION_DESTROY_SCHEDULED 通知。作为 Secret Manager 管理员,您可以启用或停用 Secret 版本,以取消预定的销毁操作并恢复 Secret 版本。
准备工作
Enable the Secret Manager 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.
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 时启用 Secret 版本的延迟销毁功能。
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
按照创建 Secret 所需的步骤操作。
前往推迟销毁密钥版本部分。
选中设置推迟销毁时长复选框。
在销毁推迟时长字段中,输入时长(以天为单位)。您可以输入的最小值为 1 天,最大值为 1000 天。
点击创建密钥。
如需对现有 Secret 启用此功能,请前往修改 Secret 页面,然后配置销毁延迟时长。
gcloud
如需为 Secret 配置销毁延迟时长,请使用 gcloud secrets create 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
- TTL_DURATION:密钥版本的销毁延迟时长。您可以使用任何格式输入时长,例如天、小时或秒。所需的最短时长为 1 天,最长时长可设置为 1,000 天。
执行以下命令:
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
响应中包含新创建的 Secret。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:Google Cloud 项目 ID。
- SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
- TTL_DURATION:密钥版本的销毁延迟时长。输入时长(以秒为单位)。请注意,最短时长要求为 1 天,最长时长可设置为 1,000 天。
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" }
以下情形不适用延迟销毁:
- 删除密钥后,所有密钥材料和相关密钥版本都会立即删除。
- 为密钥设置到期日期后,当密钥到期时,所有密钥版本都会立即销毁,即使为密钥启用了延迟销毁功能也是如此。
更新销毁推迟时长
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
使用以下任一选项修改 Secret:
- 点击与要修改的密钥关联的 更多操作,然后从菜单中选择修改。
- 点击 Secret 名称以前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret。
前往推迟销毁密钥版本部分。
在销毁延迟时长字段中,输入更新后的时长。
点击更新密钥。
gcloud
如需更新销毁延迟时长,请使用 gcloud secrets update 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- 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
响应中包含新创建的 Secret。
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 版本取决于以下因素:
- 首次为密钥设置延迟销毁时,销毁延迟时长会影响密钥的所有有效(已启用和已停用)版本。
- 更新或移除销毁延迟时长后,更改只会反映在尝试执行销毁操作的新密钥版本中。已安排销毁的密钥版本将继续在安排的销毁时间销毁。
停用延迟销毁
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
使用以下任一选项修改 Secret:
- 点击与要修改的密钥关联的 更多操作,然后从菜单中选择修改。
- 点击 Secret 名称以前往 Secret 详情页面。在 Secret 详情页面上,点击 修改 Secret。
前往推迟销毁密钥版本部分。
清除设置推迟销毁时长复选框。
点击更新密钥。
gcloud
如需移除销毁延迟时长,请使用 gcloud secrets update 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
执行以下命令:
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 或 Secret 的完全限定标识符
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\"" }
测试延迟销毁密钥版本
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击 Secret 名称。系统随即会显示 Secret 详情页面。
在密文详情页面的版本表中,选择一个密文版本。
在操作列中,点击
查看更多,然后点击销毁。在随即显示的对话框中,点击安排销毁所选版本。
gcloud
如需销毁 Secret 版本,请使用 gcloud secrets versions destroy 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
执行以下命令:
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 或 Secret 的完全限定标识符
- 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 版本
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击 Secret 名称。系统随即会显示 Secret 详情页面。
在密文详情页面的版本表中,选择要安排销毁的密文版本。
在操作列中,点击
查看更多,然后点击启用。在随即显示的对话框中,点击启用所选版本。
gcloud
如需启用已安排销毁的 Secret 版本,请使用 gcloud secrets versions enable 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
执行以下命令:
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 或 Secret 的完全限定标识符
- 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": "2024-09-04T06:41:57.859674Z", "state": "ENABLED", "etag": "\"1621457b3c1459\"" }
停用已安排销毁的 Secret 版本
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击 Secret 名称。系统随即会显示 Secret 详情页面。
在密文详情页面的版本表中,选择要安排销毁的密文版本。
在操作列中,点击
查看更多,然后点击停用。在随即显示的对话框中,点击停用所选版本。
gcloud
如需停用已安排销毁的 Secret 版本,请使用 gcloud secrets versions disable 命令。
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
执行以下命令:
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
响应包含已停用的密钥版本。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- 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\"" }
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-18。