本页介绍了如何设置 Secret 版本的延迟销毁、更新或移除销毁延迟时长,以及恢复已安排销毁的 Secret 版本。
默认情况下,当用户选择在 Secret Manager 中销毁某个密钥版本时,系统会立即永久销毁密钥材料。不过,具有 Secret Manager 管理员角色的用户可以设置延迟销毁密钥版本,这样可确保密钥版本不会在收到请求后立即销毁,并且在可配置的时长内保持可恢复状态。
如果为 Secret 启用了延迟销毁,并且您销毁了某个 Secret 版本,则会发生以下情况:
-
版本已停用,无法使用。
-
系统会在推迟期结束时安排永久销毁相应版本。
-
延迟期限结束后,密钥版本会被永久销毁,且无法撤消。
优势
此功能具有以下优势:
-
提供额外的保护层,防止关键 Secret 资料被意外或恶意销毁。任何具有 Secret Manager Secret 版本管理器角色的用户都可以销毁 Secret 版本。 此操作无法撤销。通过设置延迟销毁,您可以防止立即销毁密钥版本。您可以向用户授予管理 Secret 版本生命周期所需的最低访问权限,以便监控和防止任何敏感数据遭到意外销毁。
-
销毁密文版本会触发向密文上配置的 Pub/Sub 主题发送
SECRET_VERSION_DESTROY_SCHEDULED通知。具有 Secret Manager Admin 角色的用户可以通过启用或停用密文版本来取消预定的销毁并恢复密文版本。
准备工作
-
启用 Secret Manager API。
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。 -
设置身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
在 Google Cloud 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI。
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得设置延迟销毁 Secret 版本所需的权限,请让您的管理员为您授予 Secret 的 Secret Manager Admin (roles/secretmanager.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
设置推迟销毁
您可以在创建或更新 Secret 时启用延迟销毁 Secret 版本。如需设置延迟销毁,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往 Secret Manager 页面。
-
在 Secret Manager 页面上,点击创建 Secret。
-
在创建 Secret 页面的名称字段中,输入 Secret 的名称。
-
输入 Secret 的值(例如
abcd1234)。您还可以使用上传文件选项上传包含 Secret 值的文本文件。此操作会自动创建 Secret 版本。 -
前往延迟密钥版本销毁部分,然后选中设置推迟销毁时长复选框。
-
在销毁推迟时长字段中,输入时长(以天为单位)。您可以输入的最小值是 1 天,最大值是 1000 天。
-
点击创建密钥。
如需在现有 Secret 上启用此功能,请前往修改 Secret 页面,然后配置销毁延迟时长。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- SECRET_ID:Secret 的 ID。
- TTL_DURATION:相应 Secret 版本的销毁延迟时长。您可以采用任意格式输入时长,例如天、小时或秒。所需的最短时长为 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:相应 Secret 版本的销毁延迟时长。输入时长(以秒为单位)。请注意,所需的最短时长为 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 页面。
-
如需修改 Secret,请使用以下方法之一:
-
点击要修改的密钥对应的 操作,然后点击修改。
-
点击相应 Secret 的名称,前往该 Secret 的详情页面。在密钥详情页面上,点击 修改密钥。
-
-
在修改密钥页面上,前往推迟销毁密钥版本部分。 根据需要更新延迟时长,然后点击更新密钥。
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"
}
受销毁延迟时长影响的密钥版本取决于以下因素:
-
首次为 Secret 设置延迟销毁时,销毁延迟时长会影响 Secret 的所有有效版本(已启用和已停用)。
-
更新或移除销毁延迟时长后,更改只会反映在尝试执行销毁操作的新密文版本上。已安排销毁的密钥版本将继续在预定的销毁时间销毁。
停用延迟销毁
如需停用延迟销毁版本,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往 Secret Manager 页面。
-
如需修改 Secret,请使用以下方法之一:
-
点击要修改的密钥对应的 操作,然后点击修改。
-
点击相应 Secret 的名称,前往该 Secret 的详情页面。在密钥详情页面上,点击 修改密钥。
-
-
在修改密钥页面上,前往推迟销毁密钥版本部分。 清除设置推迟销毁时长复选框,然后点击更新 Secret。
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\""
}
为密钥版本安排推迟销毁时间
如需安排延迟销毁某个 Secret 版本,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往 Secret Manager 页面。
-
在 Secret Manager 页面上,点击某个密文以访问其版本。必须为此 Secret 配置版本延迟销毁。
-
在密文详情页面的版本标签页中,选择要销毁的密文版本。
-
点击 操作,然后点击销毁。
-
在随即显示的确认对话框中,输入密文 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 版本,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往 Secret Manager 页面。
-
在 Secret Manager 页面上,点击某个密文以访问其版本。
-
在密文详情页面的版本标签页中,选择已安排销毁的密文版本。
-
点击 操作,然后点击启用。
-
在显示的确认对话框中,点击启用所选版本。
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 版本,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往 Secret Manager 页面。
-
在 Secret Manager 页面上,点击某个密文以访问其版本。
-
在密文详情页面的版本标签页中,选择已安排销毁的密文版本。
-
点击 操作,然后点击停用。
-
在显示的确认对话框中,点击停用所选版本。
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\""
}