Cloud Storage 身份验证

您在 Cloud Storage 中执行的大多数操作都必须经过身份验证。只有对允许匿名访问的对象执行的操作才无需进行身份验证。如果 allUsers 群组具有 READ 权限,则对象可以被匿名访问。allUsers 群组包括互联网上的所有用户。

OAuth 2.0

身份验证

Cloud Storage 使用 OAuth 2.0 进行 API 身份验证和授权。身份验证是确定客户端身份的过程。身份验证的细节取决于您访问 Cloud Storage 的方式,总体可以划分为两种常规类型:

  • 以服务器为中心的流程允许应用直接保存服务帐号的凭据以完成身份验证。如果您的应用使用的是它自己的数据(而不是用户数据),请使用此流程。Google Cloud Platform 项目包含您可以使用的默认服务帐号,或者,您也可以创建新帐号。

  • 以用户为中心的流程允许应用从最终用户那里获取凭据。用户登录帐号以完成身份验证。如果您的应用需要访问用户数据,请使用此流程。如需了解哪些场景下适合使用以用户为中心的流程,请参阅本页面后面部分中的用户帐号凭据一节。

请记住,您可以在应用中同时使用这两种类型的身份验证。有关身份验证的更多背景信息,请参阅 Google Cloud Platform 身份验证指南

权限范围

授权过程用于确定经过身份验证的身份对一组指定资源具有哪些权限。OAuth 使用权限范围来确定经过身份验证的身份是否获得授权。应用使用凭据(从以用户为中心或以服务器为中心的身份验证流程中获取此凭据)以及一个或多个权限范围来请求 Google 授权服务器提供访问令牌,以便访问受保护的资源。例如,应用 A(具有权限范围为 read-only 的访问令牌)只能读取数据,而应用 B(具有权限范围为 read-write 的访问令牌)可以读取和修改数据。这两个应用都不能读取或修改对象和存储分区上的访问控制列表;只有权限范围为 full-control 的应用才能执行此操作。

类型 说明 权限范围网址
read-only 仅允许读取数据(包括列出存储分区)。 https://www.googleapis.com/auth/devstorage.read_only
read-write 允许读取和更改数据,但不允许读取和更改 IAM 政策等元数据。 https://www.googleapis.com/auth/devstorage.read_write
full-control 允许完全控制数据(包括修改 IAM 政策)。 https://www.googleapis.com/auth/devstorage.full_control
cloud-platform.read-only 查看您在各项 Google Cloud Platform 服务中的数据。对于 Cloud Storage,此权限与 devstorage.read-only 相同。 https://www.googleapis.com/auth/cloud-platform.read-only
cloud-platform 查看和管理所有 Google Cloud Platform 服务中的数据。对于 Cloud Storage,此权限与 devstorage.full-control 相同。 https://www.googleapis.com/auth/cloud-platform

gsutil 身份验证

Cloud SDK 安装 gsutil 后,您应该使用服务帐号凭据进行身份验证。

  1. 使用现有服务帐号或创建新帐号,然后下载关联的私钥。

  2. 使用 gcloud auth activate-service-account 对服务帐号进行身份验证:

    gcloud auth activate-service-account --key-file [KEY_FILE]

    其中,[KEY_FILE] 是包含服务帐号凭据的文件的名称。

获取访问令牌时,gcloud auth 使用 cloud-platform 范围

如果您安装了独立于 Cloud SDK 的 gsutil,请参阅 gsutil 安装页面,以了解如何进行身份验证。

客户端库身份验证

Client libraries can use Application Default Credentials to easily authenticate with Google APIs and send requests to those APIs. With Application Default Credentials, you can test your application locally and deploy it without changing the underlying code. For more information, including code samples, see Google Cloud Platform Auth Guide.

  • Google Cloud Platform

    如果您在 App EngineCompute Engine 上运行应用,则环境已提供了服务帐号的身份验证信息,因此无需进一步设置。对于 Compute Engine,服务帐号的权限范围取决于您创建实例的方式。请参阅为实例设置服务帐号的访问权限范围。对于 App Engine,将使用 cloud-platform 权限范围。

  • 其他环境

    要初始化本地开发或生产环境,请创建 GCP 服务帐号,下载其密钥,并设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量以使用该密钥。如需查看分步说明,请参阅使用 Cloud Storage 客户端库设置身份验证。作为设置环境变量的替代方法,您还可以直接在代码中使用服务帐号密钥

API 身份验证

要使用 OAuth 2.0 向 Cloud Storage XML APIJSON API 发出请求,请在每个需要身份验证的请求的 Authorization 标头中包含应用的访问令牌。

Authorization: Bearer <oauth2_token>

下面的请求示例列出了存储分区中的对象。

JSON API

使用 Objects 资源的 list 方法。

GET /storage/v1/b/example-bucket/o HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

XML API

使用 List objects 请求。

GET / HTTP/1.1
Host: example-bucket.storage.googleapis.com
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

由于管理和刷新访问令牌所带来的复杂性,以及直接与加密应用互动存在的安全风险,我们强烈建议您使用经过验证的客户端库

如果您要查找用于 XML API 的开发者密钥,以便与 Amazon S3 开展互操作访问,请参阅管理用于简单迁移的开发者密钥

用户帐号凭据

当您的应用需要代表用户访问数据时,请使用用户帐号凭据进行身份验证;其他情况下,则使用服务帐号凭据。可以使用用户帐号凭据的情景示例如下:

  • 网络服务器应用
  • 安装型应用和桌面应用
  • 移动应用
  • 客户端 JavaScript
  • 输入受限的设备上的应用

要详细了解这些情景,请参阅 OAuth 情景

如果您要设计一个应用,并让该应用支持最终用户使用多种身份验证方案,请使用 Firebase 身份验证,该功能支持电子邮件和密码身份验证以及使用身份提供商(比如 Google、Facebook、Twitter 和 GitHub)提供的身份执行联合登录。

当最终用户在以用户为中心的身份验证流程中向应用授予访问令牌时,该访问令牌包含的权限将与授予令牌的用户所具有的权限一致。例如,如果 jane@gmail.com 具有 example-bucketread-only 权限,则 Jane 授予了 read-write 权限的应用将无法代表她向 example-bucket 执行写入操作。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面