安全与隐私权注意事项

概览

本帮助页面详细介绍 gsutil 为保护数据安全采取的各种预防措施,以及有关客户应如何保障安全的建议。

传输层安全性

gsutil 使用传输层加密 (HTTPS) 执行所有操作,以防止通过共享网络链接发生数据泄露。这一点也很重要,因为 gsutil 将“不记名令牌”用于身份验证 (OAuth2) 以及可续传上传标识符,所以此类令牌必须得到保护,以免遭到窃听或重复使用。

gsutil 还通过 XML API 支持旧式 HMAC。虽然 HMAC 身份验证不使用不记名令牌(因此不会遭到窃听/重放攻击),但仍然需要对数据流量进行加密。

为了额外增加一层安全保障,gsutil 支持 Cloud Storage JSON API 的双向 TLS (mTLS)。借助 mTLS,客户端会验证服务器证书,服务器也会验证客户端。如需详细了解如何启用 mTLS,请参阅安装文档

本地文件存储安全性

gsutil 采取很多预防措施来防止其本地存储的文件中存在安全漏洞:

  • gcloud initgsutil config -agsutil config -e 命令运行时,它们会对其生成的 .boto 配置文件设置文件保护模式 600(“-rw-------”),因此只有用户(或超级用户)才可以读取此文件。这一点很重要,因为这些文件包含安全敏感信息,包括凭据和代理配置。

  • 当您创建服务账号凭据时,这些命令还会对本地存储的私钥文件使用文件保护模式 600。

  • gsutil 命令默认级别的输出日志记录中不包含安全敏感信息,例如 OAuth2 令牌和代理配置信息。(如果您使用 gsutil -D 选项提高调试输出的级别,请参阅下面的“推荐的用户预防措施”部分。)

请注意,Windows 不支持保护模式,因此,如果您在 Windows 上使用 gsutil,我们建议使用加密文件系统和安全系数高的账户密码。

由 Gsutil 临时写入磁盘的安全敏感文件

在以下几种情况下,gsutil 会缓存临时文件中的数据:

  • 压缩通过 gsutil cp -z/-Z 上传的数据时,gsutil 会在采用保护 600 的临时文件中缓冲数据,并在上传完成后删除(下载通过 gsutil cp -z/-Z 上传的文件时或对于一些将 Content-Encoding 设置为“gzip”的其他进程来说,同样如此)。但是,如果您在上传过程中终止 gsutil 进程,系统将原位保留部分写入的文件。如需详细了解临时文件的写入位置以及临时目录位置的更改方式,请参阅 gsutil 帮助:cp 中的“更改临时目录”部分。

  • 执行可续传上传时,gsutil 会将上传 ID(如上文所述,为不记名令牌,因此应妥善保护)存储在 ~/.gsutil/tracker-files 下采用保护 600 的文件中,并在上传操作完成后删除此文件。但是,如果上传操作没有成功完成,则系统会原地保留跟踪器文件,以便日后可以再次重试可续传上传。随着时间推移,系统中可能会累积已中止的上传尝试留下的这些跟踪器文件,但是可续传上传 ID 的有效期只有 1 周时间,因此只有存在时间短于该期限的文件才会存在安全风险。如果您认为使已中止上传的 ID 保留在跟踪器目录中风险过高,则可以修改上传脚本以删除跟踪器文件;也可以创建 Cron 作业来定期清除跟踪器目录。

  • gsutil rsync 命令会存储包含来源和目的地目录/存储分区的名称、大小以及校验和的临时文件(使用保护 600),并在完成 rsync 后会删除它。但是,如果您在进行 rsync 时终止 gsutil 进程,则列出文件将原位保留。

请注意,gsutil 使用标准的操作系统解除关联系统调用来删除临时文件,该调用不会执行数据擦除。因此,坚定的恶意者可能会恢复此类临时文件。

访问控制列表

除非您指定其他 ACL(例如,通过 gsutil cp -a 选项),否则默认情况下写入存储分区的对象会在该存储分区上使用默认对象 ACL。除非您修改该 ACL(例如,通过 gsutil defacl 命令),否则默认情况下,它会允许所有项目编辑者拥有对象的写入权限,以及对象元数据的读写权限,并且允许所有项目查看者拥有该对象的读取权限。

Cloud Storage 访问控制系统允许您将对象指定为可供公开读取。确保您使用此权限写入的所有对象都是您计划公开的对象。一旦“发布”,互联网上的数据可能会被复制到许多地方,因此,实际上您无法重新掌控使用此权限写入的对象的读取权限。

Cloud Storage 访问控制系统允许您将存储分区指定为可被公开写入。虽然以这种方式配置存储分区可以方便地实现各种目的,但我们建议您不要使用这项权限,因为该权限可能会被滥用于分发非法内容、病毒和其他恶意软件,并且存储分区所有者对存储在其存储分区中的内容负有法律和财务上的责任。如果您需要将内容公开给没有 Google 账号的客户,请考虑改用签名网址(请参阅 gsutil 帮助:签名网址)。

软件完整性和更新

gsutil 作为捆绑式 Cloud SDK 版本中的组件进行分发。此分发方法会采取各种安全预防措施来保护软件的完整性。我们强烈建议不要从任何其他来源(例如镜像网站)获取 gsutil 的副本。

代理使用情况

gsutil 支持通过代理进行访问,例如 Squid 和各种商业产品。它们功能的完整说明不在本文档的讨论范围之内,但您可配置代理来支持许多与安全相关的功能,包括病毒扫描、数据泄露防护、控制哪些证书/CA 可信赖、内容类型过滤以及许多其他功能。其中一些特性可能会减慢或阻止正常的 gsutil 行为。例如,病毒扫描依赖于解密文件内容,而这需要代理终止 gsutil 连接并建立新连接,在某些情况下,代理会以导致校验和验证错误及其他问题的方式重写内容。

如需详细了解如何配置代理,请参阅 .boto 配置文件中由 gcloud initgsutil -agsutil -e 命令生成的代理帮助文本。

静态加密

所有 Cloud Storage 数据都会自动以加密状态存储,但您也可以提供自己的加密密钥。如需了解详情,请参阅 Cloud Storage Encryption

数据隐私

Google 决不会要求您共享您的凭据、密码或其他安全敏感信息。请小心可能存在的网上诱骗手段,谨防有人试图冒充 Google 要求您提供此类信息。

度量数据

gsutil Perfdiag 命令会收集各种与性能相关的度量结果以及本地系统和网络环境的相关详细信息,用于排查性能问题。除非您选择发送,否则这些信息不会发送给 Google。