共享和协作

本文档提供了常见的数据共享和协作情景。文中介绍了如何为实现这些情景配置项目和存储桶的 Identity and Access Management (IAM) 政策

私有数据的存储和维护

在此情景中,一家公司的营销分析师希望使用 Cloud Storage 来备份机密的收入预测和销售预测数据。该数据只能由营销分析师访问。该公司的 IT 部门负责监督和管理公司的 Cloud Storage 账号。他们的主要管理职责包括创建和共享存储桶,以便公司的各个部门都可以访问 Cloud Storage。

为了满足营销分析师在机密性和隐私性方面的需求,存储桶和对象权限必须既能允许 IT 人员维护存储电子表格的存储桶,还能确保 IT 人员无法查看/下载存储在存储桶中的数据。为此,您需要创建一个名为 finance-marketing 的存储桶,并将所列资源的以下角色授予指定主账号

角色 资源 主账号 说明
Storage Legacy Bucket Owner 存储桶 finance-marketing IT 人员 为 IT 人员提供存储桶的 Storage Legacy Bucket Owner 角色后,他们可以执行常见的存储桶管理任务,例如删除对象以及更改存储桶上的 IAM 政策。该角色还允许 IT 人员列出 finance-marketing 存储桶的内容,但他们不能查看或下载任何内容。
Storage Object User 存储桶 finance-marketing 营销分析师 为营销分析师分配存储桶的 Storage Object User 角色后,她可以上传、查看、更新和删除存储桶中的对象。

借助这些角色,除营销分析师外,没有人可以查看或下载存储桶中的对象。IT 人员仍然可以列出 finance-marketing 存储桶的内容,他们可以在需要时删除和替换存储在存储桶中的文件。

实现此情景

您的操作

您应该采取以下操作来实现此情景:

  1. 创建一个名为 finance-marketing 的存储桶。如需了解分步说明,请参阅创建存储桶

  2. 为每个 IT 人员提供存储桶的 Storage Legacy Bucket Owner 角色。如需查看分步说明,请参阅将主账号添加到存储桶级层政策中

IT 人员的操作

IT 人员应采取以下操作来实现该情景:

  1. 为营销分析师提供存储桶的 Storage Object User 角色。如需查看分步说明,请参阅将主账号添加到存储桶级层政策中

供应商保管箱

在此情景中,一家建筑公司与几家建筑设计公司(为各种项目提供建筑方案)开展合作。该建筑公司希望为供应商公司建立一个保管箱,以便他们可以在到达各个项目里程碑时上传建筑方案。该保管箱必须保障建筑公司客户的隐私,这意味着,该保管箱不能允许供应商看到彼此的工作。为实现此目的,您需要为每家建筑公司创建一个单独的存储桶,并将所列资源的以下角色授予指定主账号

角色 资源 主账号 说明
Owner 整体项目 建筑公司经理 在项目级层为建筑公司经理提供 Owner 角色后,她能够为每个供应商创建存储桶。
Storage Object Viewer 整体项目 建筑公司经理 Storage Object Viewer 角色允许建筑公司经理下载供应商上传的对象。
Storage Legacy Bucket Owner 每个供应商存储桶 建筑公司经理 Storage Legacy Bucket Owner 角色允许建筑公司经理列出每个存储桶的内容,以及在每个项目里程碑结束时删除对象。
Storage Object Admin 每个供应商存储桶 与存储桶关联的供应商 为每个供应商提供他们自己存储桶的 Storage Object Admin 角色后,他们可以完全控制存储桶中的对象,包括上传对象、列出存储桶中的对象以及控制对每个对象的访问权限。该角色不允许他们更改或查看元数据(比如整个存储桶上的角色),也不允许他们列出或查看项目中的其他存储桶,因此可以保护供应商之间的隐私。

实现此情景

您的操作

您应该采取以下操作来实现此情景:

  1. 为建筑公司经理提供项目的 Owner 角色以及项目的 Storage Object Viewer 角色。如需查看分步说明,请参阅授予单个角色

建筑公司经理的操作

建筑公司经理应采取以下操作来实现此情景:

  1. 为每个供应商创建单独的存储桶。如需了解分步说明,请参阅创建存储桶

    由于建筑经理具有 Owner 角色,因此,对于她创建的每个存储桶,她都会自动获得 Storage Legacy Bucket Owner 角色。

  2. 为每个供应商提供各自存储桶的 Storage Object Admin 角色。如需查看分步说明,请参阅将主账号添加到存储桶级层政策中

  3. 如果有供应商打算使用 Google Cloud 控制台,请为该供应商提供其存储桶的链接,链接格式如下:

    https://console.cloud.google.com/storage/browser/BUCKET_NAME

    其中 BUCKET_NAME 是供应商存储桶的名称。

供应商的操作

每个供应商应采取以下操作来实现此情景:

  1. 将对象上传到指定的存储桶中。完成这一步骤较简单的方法是使用 Google Cloud 控制台。其他方法(例如 Google Cloud CLI)要求您在使用之前进行额外设置。如需了解分步说明,请参阅上传对象

经过身份验证的浏览器下载

在此情景中,客户希望特定的人员只需执行简单的浏览器下载操作即可获取文件。您可以使用 Cloud Storage 基于 Cookie 的身份验证来实现此目的。如需下载对象,用户必须通过登录有效账号(包括 Google Workspace、Cloud Identity、Gmail 和员工身份联合)进行身份验证。以下经过身份验证的用户可以下载对象:

所有其他用户都会收到 403 Forbidden (access denied) 错误。

为了使用此功能,请向用户授予对象的访问权限,然后为该用户提供该对象的特殊网址。当用户点击该网址时,Cloud Storage 会提示他们登录其账号(如果他们尚未登录),然后该对象会被下载到他们的计算机上。

实现此情景

您可以通过以下四个常规步骤实现基于 Cookie 的身份验证:

  1. 创建存储桶。如需了解分步说明,请参阅创建存储桶

    假设您在自己拥有的项目中创建了一个存储桶,您将自动获得以下两种权限:您可以将对象上传到该存储桶中;您可以更改有权访问该存储桶的人员。

  2. 上传您要共享的对象。如需了解分步说明,请参阅上传对象

  3. 为用户提供该对象的访问权限。常见的方法是修改存储桶的 IAM 政策,以便为特定用户授予 Storage Object Viewer 角色(该角色适用于存储桶中的所有对象)。如需了解分步说明,请参阅将主账号添加到存储桶级层政策中

  4. 为用户提供对象的特殊网址。

    基于身份验证的浏览器下载通过特定的网址端点访问 Cloud Storage。请使用以下网址:

    https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME

    其中:

    • BUCKET_NAME 是包含所需对象的存储桶的名称。例如 my-bucket
    • OBJECT_NAME 是所需对象的名称。例如 pets/dog.png

    由于只有具有适当访问权限的用户才能查看该网址,因此,您以何种方式提供该网址并不重要。您可以将网址直接发送给用户,也可以将网址发布到网页上。

使用群组来控制访问权限

在此情景中,您希望将对象提供给特定用户使用,例如受邀试用新软件的用户。此外,您希望邀请众多用户,但您不希望单独为每个用户设置权限。 同时,您不希望对象变成可被公开读取的状态,也不希望向受邀客户发送用于访问对象的链接,因为链接可能会被发送给未被邀请的用户。

应对此情景的一种方法是使用 Google 群组。 您可以创建一个群组,并仅将受邀用户添加到群组中。然后,您可以授权整个群组访问这些对象:

角色 资源 主账号 说明
Storage Object Viewer 您的存储桶 Google 群组 为 Google 群组分配存储桶的 Storage Object Viewer 角色后,任何属于此 Google 群组的客户均可查看存储桶中的对象。群组外的任何人都无法访问这些对象。

实现此情景

  1. 创建 Google 群组并向群组中添加客户。要查看分步说明,请参阅创建群组

  2. 创建存储桶。要查看分步说明,请参阅创建存储桶

  3. 将对象上传到您的存储桶中。如需了解分步说明,请参阅上传对象

  4. 授权 Google 群组访问这些对象。

    • 您可以使用 IAM 角色 storage.objectViewer 来授予存储桶中所有对象的查看权限。如需查看分步说明,请参阅将主账号添加到存储桶级层政策中

    • 如果您只想授予存储桶中某些对象的访问权限,请在这些对象上设置读取者 ACL。如需了解分步说明,请参阅设置 ACL

  5. 与群组共享相应的请求端点,以便他们知道在什么位置访问该对象。

    例如,使用 Google Cloud 控制台时,网址 https://console.cloud.google.com/storage/browser/BUCKET_NAME 会将您转到存储桶 BUCKET_NAME 中的对象列表。

使用代管式文件夹来控制访问权限

在此场景中,您有多个客户,每个客户都有一个包含自定义映像的唯一网站。您希望客户只能将映像上传到其网站,而不能上传到其他网站。当客户取消其账号时,您希望停用对其网站上的图片的公开访问权限,但请避免删除映像以防客户想要重新激活其账号。

应对此情景的一种方法是使用代管式文件夹。 您可以在存储桶中创建多个代管式文件夹,并使用 IAM 控制客户及其最终用户对各个代管式文件夹的访问权限。

实现此情景

  1. 创建存储桶

  2. 在存储桶中为每个客户网站创建一个代管式文件夹

  3. 对于每个代管式文件夹,设置一项 IAM 政策,以向客户授予 Storage Object User (roles/storage.objectUser) 角色,以便客户可以将对象上传到该代管式文件夹并从代管式文件夹中移除对象。

  4. 对于所有代管式文件夹,设置 IAM 政策,将 Storage Object Viewer (roles/storage.objectViewer) 角色授予主账号 allUsers,以便代管式文件夹中的映像对象对公众可见。

    或者,您可以授予一个自定义角色,该角色向 allUsers 授予 storage.objects.get IAM 权限。

  5. 当客户取消其账号时,请移除 IAM 政策,该政策可授予客户针对关联代管式文件夹的 Storage Object User (roles/storage.objectUser) 角色。如需停用对该代管式文件夹中对象的公开访问权限,请移除向 allUsers 授予 Storage Object Viewer (roles/storage.objectViewer) 角色的 IAM 政策。