本页介绍了如何设置密钥版本的延迟销毁、更新或移除销毁延迟时长,以及恢复已安排销毁的密钥版本。
默认情况下,当用户选择在 Secret Manager 中销毁 Secret 版本时,系统会立即永久销毁 Secret 材料。不过,具有 Secret Manager 管理员角色的用户可以设置延迟销毁密钥版本,以确保密钥版本不会在收到请求后立即销毁,并且在可配置的时间段内仍可恢复。
在密文上启用延迟销毁功能后,如果您销毁密文版本,则会发生以下情况:
-
该版本已停用,无法使用。
-
系统会在延迟期结束时安排永久销毁该版本。
-
延迟期结束后,该 Secret 版本将被永久销毁,且无法撤消。
优势
此功能具有以下优势:
-
额外增加一重保护,防止关键机密材料意外或恶意销毁。任何具有 Secret Manager Secret Version Manager 角色的用户都可以销毁 Secret 版本。 此操作无法撤消。通过设置延迟销毁,您可以防止立即销毁密钥版本。您可以向用户授予管理 Secret 版本生命周期所需的最低访问权限,以便监控和防止敏感数据意外销毁。
-
销毁密文版本会向密文上配置的 Pub/Sub 主题触发
SECRET_VERSION_DESTROY_SCHEDULED
通知。具有 Secret Manager 管理员角色的用户可以通过启用或停用密文版本来取消预定的销毁操作并恢复密文版本。
准备工作
-
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 Manager 页面上,点击区域性 Secret 标签页,然后点击创建区域性 Secret。
-
在创建地区性 Secret 页面上的名称字段中,输入 Secret 的名称。
-
为 Secret 输入一个值(例如
abcd1234
)。您还可以使用上传文件选项上传包含 Secret 值的文本文件。此操作会自动创建 Secret 版本。 -
从区域列表中选择要存储区域级密钥的位置。
-
前往推迟密钥版本销毁,然后选中设置推迟销毁时长复选框。
-
在销毁推迟时长字段中,输入时长(以天为单位)。您可以输入的最小值为 1 天;最大值为 1000 天。
-
点击创建密钥。
如需对现有 Secret 启用此功能,请前往修改 Secret 页面,然后配置销毁延迟时长。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
- LOCATION:密钥的 Google Cloud 位置。
- TTL_DURATION:密钥版本的销毁延迟时长。您可以使用任何格式输入时长,例如天、小时或秒。所需的最短时长为 1 天,最长时长可设置为 1,000 天。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
Windows (PowerShell)
gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
Windows (cmd.exe)
gcloud secrets create SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
响应中包含新创建的 Secret。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置。
- PROJECT_ID:Google Cloud 项目 ID。
- SECRET_ID:密钥的 ID 或密钥的完全限定标识符。
- TTL_DURATION:密钥版本的销毁延迟时长。输入时长(以秒为单位)。请注意,最短时长要求为 1 天,最长时长可设置为 1,000 天。
HTTP 方法和网址:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
请求 JSON 正文:
{ "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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T06:34:32.995517Z", "etag": "\"1621455df3febd\"", "versionDestroyTtl": "TTL_DURATION" }
以下情形不适用延迟销毁:
-
删除密钥后,所有密钥材料和相关密钥版本都会立即删除。
-
为密钥设置到期日期后,当密钥到期时,所有密钥版本都会立即销毁,即使为密钥启用了延迟销毁也是如此。
更新销毁推迟时长
如需更新销毁延迟时长,请使用以下方法之一:
控制台
-
转到 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击 Regional secrets(区域级 Secret)标签页。
-
如需修改 Secret,请使用以下方法之一:
-
点击要修改的密钥的
操作,然后点击修改。 -
点击 Secret 名称可前往 Secret 详情页面。在密钥详情页面上,点击
修改密钥。
-
-
在修改 Secret 页面上,前往推迟销毁 Secret 版本部分。 根据需要更新延迟时长,然后点击更新 Secret。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- LOCATION:密钥的 Google Cloud 位置
- TTL_DURATION:密钥版本的销毁延迟时长
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION --version-destroy-ttl=TTL_DURATION
响应中包含新创建的 Secret。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- TTL_DURATION:密钥版本的销毁延迟时长
HTTP 方法和网址:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T06:34:32.995517Z", "etag": "\"16214561a80d09\"", "versionDestroyTtl": "TTL_DURATION" }
受销毁延迟时长影响的 Secret 版本取决于以下因素:
-
首次为 Secret 设置延迟销毁时,销毁延迟时长会影响该 Secret 的所有有效(已启用和已停用)版本。
-
更新或移除销毁延迟时长后,更改只会反映在尝试执行销毁操作的新 Secret 版本中。已安排销毁的密钥版本将继续在安排的销毁时间销毁。
停用延迟销毁
如需停用版本的延迟销毁功能,请使用以下方法之一:
控制台
-
转到 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击 Regional secrets(区域级 Secret)标签页。
-
如需修改 Secret,请使用以下方法之一:
-
点击要修改的密钥的
操作,然后点击修改。 -
点击 Secret 名称可前往 Secret 详情页面。在密钥详情页面上,点击
修改密钥。
-
-
在修改密钥页面上,前往推迟销毁密钥版本。 清除设置推迟销毁时长复选框,然后点击更新密钥。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- LOCATION:密钥的 Google Cloud 位置
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION --remove-version-destroy-ttl
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
HTTP 方法和网址:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T06:34:32.995517Z", "etag": "\"16214564f18f19\"" }
为密钥版本安排推迟销毁时间
如需安排对密钥版本进行延迟销毁,请使用以下方法之一:
控制台
-
转到 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击区域性 Secret 标签页,然后点击某个 Secret 以访问其版本。必须在此密钥上配置版本的延迟销毁。
-
在密文详情页面的版本标签页中,选择要销毁的密文版本。
-
点击
操作,然后点击销毁。 -
在随即显示的确认对话框中,输入要确认的密钥 ID,然后点击安排销毁所选版本。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- LOCATION:密钥的 Google Cloud 位置
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (PowerShell)
gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (cmd.exe)
gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- VERSION_ID:版本的 ID 或版本的完全限定标识符
HTTP 方法和网址:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:destroy" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "createTime": "2024-09-04T06:41:57.859674Z", "state": "DISABLED", "etag": "\"16214579184a2c\"", "scheduledDestroyTime": "2024-09-05T13:15:28.357251843Z" }
密钥版本会在销毁推迟时长过后立即停用并安排销毁。您可以在版本表的安排销毁时间列下方查看该版本的确切销毁日期和时间。
恢复 Secret 版本
您可以通过启用或停用已安排销毁的密文版本来恢复该密文版本。
启用已安排销毁的 Secret 版本
如需启用已安排销毁的 Secret 版本,请使用以下方法之一:
控制台
-
转到 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击区域性 Secret 标签页,然后点击某个 Secret 以访问其版本。
-
在密文详情页面的版本标签页中,选择要安排销毁的密文版本。
-
点击
操作,然后点击启用。 -
在显示的确认对话框中,点击启用所选版本。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- LOCATION:密钥的 Google Cloud 位置
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (PowerShell)
gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (cmd.exe)
gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- VERSION_ID:版本的 ID 或版本的完全限定标识符
HTTP 方法和网址:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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 版本
如需停用已安排销毁的 Secret 版本,请使用以下方法之一:
控制台
-
转到 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击区域性 Secret 标签页,然后点击某个 Secret 以访问其版本。
-
在密文详情页面的版本标签页中,选择要安排销毁的密文版本。
-
点击
操作,然后点击停用。 -
在显示的确认对话框中,点击停用所选版本。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_VERSION_ID:版本的 ID 或版本的完全限定标识符
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- LOCATION:密钥的 Google Cloud 位置
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (PowerShell)
gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
Windows (cmd.exe)
gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID --location=LOCATION
响应包含已停用的密钥版本。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:密钥的 Google Cloud 位置
- PROJECT_ID:Google Cloud 项目 ID
- SECRET_ID:Secret 的 ID 或 Secret 的完全限定标识符
- VERSION_ID:版本的 ID 或版本的完全限定标识符
HTTP 方法和网址:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID/versions/VERSION_ID:disable" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "createTime": "2024-09-04T06:41:57.859674Z", "state": "DISABLED", "etag": "\"1621457b3c1459\"" }
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-18。
-