本页面介绍了如何设置推迟销毁密钥版本,更新或移除销毁推迟时长,以及恢复处于已安排销毁状态的 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。
设置身份验证。
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 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获取设置推迟销毁密钥版本所需的权限,请让管理员向您授予针对密钥的 Secret Manager Admin (
roles/secretmanager.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。设置推迟销毁
您可以在创建密钥或更新密钥时启用密钥版本延迟销毁功能。
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
按照创建 Secret 所需的步骤进行操作。
转到推迟销毁密钥版本部分。
选中设置延迟销毁的持续时间复选框。
在销毁推迟时长字段中,输入时长(以天为单位)。您可以输入的最小值为 1 天,最大值为 1000 天。
点击创建密钥。
如需对现有密钥启用此功能,请转到修改密钥页面,然后配置销毁推迟时长。
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" }
延迟销毁不适用于以下场景:
更新销毁推迟时长
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
使用以下任一选项修改您的密钥:
- 点击与您要修改的密钥相关联的 更多操作,然后从菜单中选择修改。
- 点击密钥名称以转到密钥详情页面。在密钥详情页面上,点击 修改密钥。
转到推迟销毁密钥版本部分。
在销毁推迟时长字段中,输入更新后的时长。
点击更新密钥。
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 版本。已安排销毁的密钥版本将继续在预定销毁时间销毁。
停用延迟销毁
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
使用以下任一选项修改您的密钥:
- 点击与您要修改的密钥相关联的 更多操作,然后从菜单中选择修改。
- 点击密钥名称以转到密钥详情页面。在密钥详情页面上,点击 修改密钥。
转到推迟销毁密钥版本部分。
清除设置延迟销毁的持续时间复选框。
点击更新密钥。
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\"" }
测试密钥版本的推迟销毁
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击密钥名称。系统会显示 Secret 详情页面。
在密钥详情页面的版本表格中,选择一个密钥版本。
在操作列中,点击
查看更多,然后点击销毁。在显示的对话框中,点击安排销毁所选版本。
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" }
在销毁推迟时长到期后,系统会立即停用相应密钥版本并安排销毁。您可以在版本表中的已安排销毁时间列下查看版本销毁的确切日期和时间。
恢复密钥版本
您可以通过启用或停用密钥版本来恢复被安排销毁的密钥版本。
启用计划销毁的密钥版本
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击密钥名称。系统会显示 Secret 详情页面。
在密钥详情页面的版本表中,选择计划销毁的 Secret 版本。
在操作列中,点击
查看更多,然后点击启用。在弹出的对话框中,点击启用所选版本。
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\"" }
停用计划销毁的密钥版本
控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
点击密钥名称。系统会显示 Secret 详情页面。
在密钥详情页面的版本表中,选择计划销毁的 Secret 版本。
在操作列中,点击
查看更多,然后点击停用。在出现的对话框中,点击停用所选版本。
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\"" }
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-07-12。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]