本页介绍了如何以键值对的形式在 Cloud Storage 对象上附加和管理上下文。
获取所需的角色
如需获得创建和管理对象上下文所需的权限,请让您的管理员为您授予对象的以下 IAM 角色:
-
创建具有上下文的对象:
Storage Object Creator (
roles/storage.objectCreator) -
附加、更新、查看和删除对象的上下文:
Storage Object User (
roles/storage.objectUser) -
查看附加到对象的上下文键和值:
Storage Object Viewer (
roles/storage.objectViewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色可提供创建和管理对象上下文所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
创建和管理对象上下文需要以下权限:
-
创建具有对象上下文的对象:
-
storage.objects.create -
storage.objects.createContext
-
-
附加、更新和删除对象上下文:
-
storage.objects.update -
storage.objects.createContext -
storage.objects.updateContext -
storage.objects.deleteContext
-
-
查看对象上下文:
-
storage.objects.get -
storage.objects.list
-
将上下文附加到新对象
在将新对象上传到 Cloud Storage 存储桶时,将上下文附加到对象。每个上下文由一个键和一个值组成。
命令行
如需在使用 gcloud alpha storage cp 命令上传对象时附加上下文,请使用 --custom-contexts 标志:
gcloud alpha storage cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME --custom-contexts=KEY=VALUE,...
其中:
OBJECT_LOCATION是对象的本地路径。例如Desktop/dog.png。DESTINATION_BUCKET_NAME是对象要上传到的存储桶的名称。例如my-bucket。KEY是要附加到对象的上下文键。 例如Department。您可以指定多个以英文逗号分隔的键值对。VALUE是要与上下文键关联的值。例如Human resources。
或者,您也可以创建一个 JSON 文件,其中包含要附加到对象的上下文,然后使用 --custom-contexts-file 标志:
{ "KEY": { "value": "VALUE" }, ... }
其中:
KEY是要附加到对象的上下文键。 例如Department。您可以指定多个键值对。VALUE是要与上下文键关联的值。例如Human resources。
如需在使用 gcloud alpha storage rsync 命令上传目录时附加上下文,请使用 --custom-contexts 标志或 --custom-contexts-file 标志:
gcloud alpha storage rsync DIRECTORY_LOCATION gs://DESTINATION_BUCKET_NAME --recursive --custom-contexts=KEY=VALUE,...
其中:
DIRECTORY_LOCATION是目录的本地路径。例如~/my_directory。DESTINATION_BUCKET_NAME是要将目录上传到的存储桶的名称。例如my-bucket。KEY是要附加到对象的上下文键。例如Department。您可以指定多个以英文逗号分隔的键值对。VALUE是要与上下文键关联的值。例如Human resources。
JSON API
如需在上传新对象时将上下文附加到对象,请使用以下任意方法:
在 JSON 格式的对象元数据中,添加 contexts 字段:
{ "contexts": { "custom": { "KEY": { "value": "VALUE" }, ... } } }
其中:
KEY是要附加到对象的上下文键。 例如Department。您可以在custom对象中指定多个键值对。VALUE是要与上下文键关联的值。例如Human resources。
为现有对象附加或修改上下文
您可以将新上下文附加到 Cloud Storage 存储桶中的现有对象。
命令行
使用 gcloud alpha storage objects update 命令:
gcloud alpha storage objects update gs://BUCKET_NAME/OBJECT_NAME CUSTOM_CONTEXTS_FLAG
其中:
BUCKET_NAME是包含要修改上下文的对象的存储桶的名称。例如my-bucket。OBJECT_NAME是对象的名称,例如pets/dog.png。CUSTOM_CONTEXTS_FLAG是以下任何标志:如需替换所有现有上下文,请使用
--custom-contexts=KEY=VALUE,...或--custom-contexts-file=CUSTOM_CONTEXTS_FILE其中:
KEY是要附加到对象的上下文键。例如Department。您可以指定多个以英文逗号分隔的键值对。VALUE是要与上下文键关联的值。例如Human resources。CUSTOM_CONTEXTS_FILE是 JSON 或 YAML 文件的路径,该文件包含您要附加到对象上的上下文。
如需删除所有现有上下文,请使用
--clear-custom-contexts。如需添加、修改或删除单个上下文,请结合使用
--update-custom-contexts=KEY=VALUE,...和--remove-custom-contexts=KEY,...其中:
KEY是要附加到对象或从对象中删除的上下文键。例如Department。VALUE是要与您要附加到对象的上下文键相关联的值。例如Human resources。
如果成功,则响应类似如下示例:
Patching gs://my-bucket/pets/dog.png#1560574162144861... Completed 1
客户端库
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
JSON API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。创建一个包含对象设置的 JSON 文件,其中必须包含对象的
contexts配置字段。如需添加、修改或覆盖现有上下文,请使用以下格式:
{ "contexts": { "custom": { "KEY": { "value": "VALUE" }, ... } } }
其中:
KEY是要附加到对象的上下文键。例如Department。您可以在custom对象中指定多个键值对。VALUE是要与上下文键关联的值。例如Human resources。
如需删除所有现有上下文,请使用以下格式:
{ "contexts": { "custom": null } }
如需从上下文中删除特定键,请使用以下格式:
{ "contexts": { "custom": { "KEY": null, ... } } }
其中:
KEY是要从对象中删除的上下文键。例如Department。 您可以指定多个要从custom对象中删除的键。使用
cURL,通过PATCHObject 请求调用 JSON API:curl -X PATCH --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"
其中:
JSON_FILE_NAME是包含对象上下文信息的文件路径。BUCKET_NAME是包含要修改上下文的对象的存储桶的名称。例如my-bucket。OBJECT_NAME是对象的网址编码名称。例如,pets/dog.png的网址编码为pets%2Fdog.png。
或者,您也可以使用 PUT Object 请求替换对象的上下文。PUT 对象请求还会替换其他对象元数据。因此,我们不建议使用 PUT 对象请求。
查看对象上下文
您可以通过列出对象元数据或描述特定对象来查看对象的上下文。
命令行
使用 gcloud alpha storage objects describe 命令:
gcloud alpha storage objects describe gs://BUCKET_NAME/OBJECT_NAME
其中:
BUCKET_NAME是包含要查看其上下文的对象的存储桶的名称。例如my-bucket。OBJECT_NAME是要查看其上下文的对象的名称。例如pets/dog.png
如果成功,响应类似于以下示例:
bucket: my-bucket
contexts:
Department:
createTime: '2023-01-01T00:00:00.000000+00:00'
type: CUSTOM
updateTime: '2023-01-01T00:00:00.000000+00:00'
value: HR
DataClassification:
createTime: '2023-01-01T00:00:00.000000+00:00'
type: CUSTOM
updateTime: '2023-01-01T00:00:00.000000+00:00'
value: Confidential
name: employees.txt
客户端库
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
JSON API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。使用
cURL,通过GETObject 请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"
其中:
BUCKET_NAME是包含要查看其上下文的对象的存储桶的名称,例如my-bucket。OBJECT_NAME是要查看其上下文的对象的网址编码名称。例如,pets/dog.png的网址编码为pets%2Fdog.png。
如果成功,响应类似于以下示例:
{ "kind": "storage#object", "name": "employees.txt", "bucket": "my-bucket", "contexts": { "custom": { "Department": { "value": "HR", "createTime": "2023-01-01T00:00:00.000Z", "updateTime": "2023-01-01T00:00:00.000Z" }, "DataClassification": { "value": "Confidential", "createTime": "2023-01-01T00:00:00.000Z", "updateTime": "2023-01-01T00:00:00.000Z" } } } }
按上下文过滤对象
按对象上下文键的存在情况或其特定值过滤对象。按上下文过滤对象有助于高效地查找和管理特定对象组。如需了解详情,请参阅按上下文过滤对象。
在对象操作期间管理对象上下文
默认情况下,当您复制、重写、组合、移动或恢复对象时,对象上下文会保留。您还可以在复制、重写和合成操作期间修改上下文。
命令行
gcloud alpha storage cp 命令、gcloud alpha storage rsync 命令和 gcloud alpha storage mv 命令默认会保留源对象中的上下文。如需在这些操作期间修改上下文,请使用以下任意标志:
- 用于为目标对象设置新上下文的
--custom-contexts或--custom-contexts-file标志。 --clear-custom-contexts标志,用于防止源对象的上下文附加到目标对象。--update-custom-contexts和--remove-custom-contexts标志的组合,用于在将源对象中的各个上下文附加到目标对象之前对其进行修改。
gcloud alpha storage objects compose 命令默认会合并源对象中的上下文,并将其附加到目标对象。Cloud Storage 通过优先处理稍后处理的源对象中的上下文来解决冲突。如需详细了解在组合操作期间的对象上下文行为,请参阅复合对象上下文。您还可以使用 --custom-contexts 或 --custom-contexts-file 标志为目标对象指定新上下文。
JSON API
后续步骤
- 如需了解对象上下文属性,请参阅 Cloud Storage API 文档。