您在 Cloud Storage 中执行的大多数操作都必须经过身份验证。
只有对允许匿名访问的对象执行的操作才无需进行身份验证。如果 allUsers
群组具有 READ
权限,则可以匿名访问对象。allUsers
群组包括互联网上的所有用户。
OAuth 2.0
身份验证
Cloud Storage 使用 OAuth 2.0 进行 API 身份验证和授权。身份验证是确定客户端身份的过程。身份验证的细节取决于您访问 Cloud Storage 的方式,总体可以划分为两种常规类型:
以服务器为中心的流程允许应用直接保存服务帐号的凭据以完成身份验证。如果您的应用使用的是它自己的数据(而不是用户数据),请使用此流程。Google Cloud 项目包含您可以使用的默认服务帐号,或者您也可以创建新帐号。
以用户为中心的流程允许应用从最终用户那里获取凭据。用户登录帐号以完成身份验证。如果您的应用需要访问用户数据,请使用此流程。如需了解哪些场景下适合使用以用户为中心的流程,请参阅本页面后面部分中的用户帐号凭据一节。
请记住,您可以在应用中同时使用这两种类型的身份验证。如需详细了解身份验证的背景信息,请参阅 Google Cloud 身份验证指南。
范围
授权过程用于确定经过身份验证的身份对一组指定资源具有哪些权限。OAuth 2.0 使用权限范围来确定经过身份验证的身份是否获得授权。应用使用凭据(从以用户为中心或以服务器为中心的身份验证流程中获取此凭据)以及一个或多个权限范围来请求 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 服务中的数据。对于 Cloud Storage,此权限与 devstorage.read-only 相同。 |
https://www.googleapis.com/auth/cloud-platform.read-only |
cloud-platform |
查看和管理所有 Google Cloud 服务中的数据。对于 Cloud Storage,此权限与 devstorage.full-control 相同。 |
https://www.googleapis.com/auth/cloud-platform |
gsutil 身份验证
从 Cloud SDK 安装 gsutil 后,您应该使用服务帐号凭据进行身份验证。
使用现有服务帐号或创建新帐号,然后下载关联的私钥。请注意,首次创建服务帐号密钥时,您只能下载该密钥的私钥数据。
使用
gcloud auth activate-service-account
对服务帐号进行身份验证:gcloud auth activate-service-account --key-file KEY_FILE
其中
KEY_FILE
是包含服务帐号凭据的文件的名称。
获取访问令牌时,gcloud auth
使用 cloud-platform
权限范围。
如果您安装了独立于 Cloud SDK 的 gsutil,请参阅 gsutil 安装页面,以了解如何进行身份验证。
客户端库身份验证
客户端库可以使用应用默认凭据轻松进行 Google API 身份验证,并向这些 API 发送请求。借助应用默认凭据,您可以在本地测试应用并部署它,无需更改底层代码。如需了解详情(包括代码示例),请参阅 Google Cloud Platform 身份验证指南。
Google Cloud
如果您在 App Engine 或 Compute Engine 上运行应用,则环境已提供了服务帐号的身份验证信息,因此无需进一步设置。对于 Compute Engine,服务帐号的权限范围取决于您创建实例的方式。请参阅为实例设置服务帐号的访问权限范围。对于 App Engine,将使用
cloud-platform
权限范围。其他环境
如需初始化本地开发或生产环境,请创建 Google Cloud 服务帐号,下载其密钥,并设置
GOOGLE_APPLICATION_CREDENTIALS
环境变量以使用该密钥。如需查看分步说明,请参阅使用 Cloud Storage 客户端库设置身份验证。作为设置环境变量的替代方法,您还可以直接在代码中使用服务帐号密钥。
API 身份验证
要使用 OAuth 2.0 向 Cloud Storage XML API 或 JSON API 发出请求,请在每个需要身份验证的请求的 Authorization
标头中包含应用的访问令牌。您可以从 OAuth 2.0 Playground 生成访问令牌。
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 密钥。
用户帐号凭据
当您的应用需要代表用户访问数据时,请使用用户帐号凭据进行身份验证;其他情况下,则使用服务帐号凭据。 可以使用用户帐号凭据的情景示例如下:
- Web 服务器应用
- 安装型应用和桌面应用
- 移动应用
- 客户端 JavaScript
- 输入受限的设备上的应用
如需详细了解这些情景,请参阅 OAuth 2.0 情景。
如果您要设计一个应用,并让该应用支持最终用户使用多种身份验证方案,请使用 Firebase 身份验证,该功能支持电子邮件和密码身份验证以及使用身份提供商(例如 Google、Facebook、Twitter、GitHub)提供的身份执行联合登录。
当最终用户在以用户为中心的身份验证流程中向应用授予访问令牌时,该访问令牌包含的权限将与授予令牌的用户所具有的权限一致。例如,如果 jane@gmail.com 具有 example-bucket
的 read-only
访问权限,则 Jane 授予了 read-write
访问权限的应用将无法代表她向 example-bucket
执行写入操作。