Cloud Storage 身份验证

您在 Cloud Storage 中执行的大多数操作都必须经过身份验证。只有对允许匿名访问的资源执行的操作才无需进行身份验证。如果 allUsers 群组包含在资源的 ACL 中,或者 allUsers 群组包含在该资源应用的 IAM 政策中,则该资源具有匿名访问权限。allUsers 群组包括互联网上的所有用户。

OAuth 2.0 身份验证

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

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

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

请记住,您可以在应用中同时使用这两种类型的身份验证。如需详细了解身份验证的背景信息,请参阅 Google Cloud 身份验证指南

命令行界面身份验证

如果您通过 Google Cloud CLI 来使用 Cloud Storage,则通常应使用您的用户账号凭据进行身份验证。为此,请运行 gcloud auth login 命令并按照说明操作,其中包括登录您的用户账号。如需了解其他身份验证选项,请参阅使用 gcloud CLI 进行身份验证

客户端库身份验证

客户端库可以使用应用默认凭据轻松进行 Google API 身份验证,并向这些 API 发送请求。借助应用默认凭据,您可以在本地测试应用并部署它,无需更改底层代码。有关详情,请参阅使用客户端库进行身份验证

  • Google Cloud

    如果您在支持关联的服务账号的服务(例如 App Engine、Cloud Functions、Cloud Run 或 Compute Engine)上运行应用,则环境已提供服务账号的身份验证信息,因此无需进一步设置。对于 Compute Engine,服务账号的权限范围取决于您创建实例的方式。请参阅 Compute Engine 文档中的访问权限范围。对于 App Engine,将使用 cloud-platform 权限范围。

  • 其他环境

    如需初始化本地开发或生产环境,请创建 Google Cloud 服务账号,下载其密钥,并设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量以使用该密钥。如需查看分步说明,请参阅使用 Cloud Storage 客户端库设置身份验证

API 身份验证

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

  1. OAuth 2.0 Playground 中,点击Cloud Storage API v1,然后为您的应用(full_controlread_onlyread_write)选择访问权限级别。

  2. 点击授权 API

  3. 出现提示时,登录您的账号。在出现的对话框中,点击允许

  4. 在游乐场的第 2 步中,点击以授权代码交换令牌 (Exchange authorization code for tokens) 作为显示的授权代码。

  5. 复制您的访问令牌并将其包含在请求的 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

如需通过命令行对请求进行授权或进行测试,您可以使用 curl 命令,语法如下:

curl -H "Authorization: Bearer OAUTH2_TOKEN" "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o"

对于本地测试,您可以使用 gcloud auth application-default print-access-token 命令生成令牌。

XML API

使用 List objects 请求。

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

如需通过命令行对请求进行授权或进行测试,您可以使用 curl 命令,语法如下:

curl -H "Authorization: Bearer OAUTH2_TOKEN" "https://BUCKET_NAME.storage.googleapis.com"

对于本地测试,您可以使用 gcloud auth application-default print-access-token 命令生成令牌。

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

如果您要查找用于 XML API 的 HMAC 密钥,以便与 Amazon S3 开展互操作访问,请参阅管理服务账号的 HMAC 密钥

后续步骤