支持各种用例的凭据类型

概览

gsutil 目前支持多种类型的凭据/身份验证,并且支持匿名访问公共数据(如需详细了解匿名访问,请参阅 gsutil help anon)。下文详细讨论了每种凭据类型,并介绍了如何通过 Cloud SDK 或独立安装的 gsutil 配置和使用凭据。

通过 Cloud SDK 发行版 Gsutil 配置/使用凭据

通过 Cloud SDK(“gcloud”)安装/使用 gsutil 时,Cloud SDK 会将凭据存储在位于 ~/.config/gcloud 下的用户不可修改的文件中(对凭据的任何操作都应通过 gcloud auth 命令完成)。如果您需要设置多个凭据(例如,一个用于个人用户帐号,另一个用于服务帐号),则 gcloud auth 命令会为您管理这些凭据,并且您也可以使用 gcloud auth 命令在凭据间切换(如需了解详情,请参阅 https://cloud.google.com/sdk/gcloud/reference/auth)。

通过 gcloud auth 配置凭据后,无论用户是否拥有任何 boto 配置文件(除非在 BOTO_CONFIG 环境变量中指定了其他路径,否则位于 ~/.boto),都会使用这些凭据。但是,如果所需的非 Cloud Storage 凭据类型未存储在 gcloud 凭据存储区中(例如,用于 S3 帐号的 HMAC 凭据),则 gsutil 仍会在 boto 配置文件中查找凭据。

通过独立发行版 Gsutil 配置/使用凭据

如果您安装了独立发行版 gsutil(从 https://pub.storage.googleapis.com/gsutil.tar.gzhttps://pub.storage.googleapis.com/gsutil.zip 或 PyPi 下载),则凭据使用 gsutil config 命令进行配置,并存储在用户可修改的 boto 配置文件(除非在 BOTO_CONFIG 环境中指定了其他路径,否则位于 ~/.boto)中。在这种情况下,如果您想要设置多个凭据(例如,一个用于个人用户帐号,另一个用于服务帐号),请为每个凭据运行一次 gsutil config,保存每个生成的 boto 配置文件(例如,将一个 boto 配置文件重命名为 ~/.boto_user_account,将另一个重命名为 ~/.boto_service_account)并使用 BOTO_CONFIG 环境变量在凭据间切换(例如,通过运行 BOTO_CONFIG=~/.boto_user_account gsutil ls)。

请注意,在将独立版 gsutil 与 JSON API 结合使用时,您可以在单个 boto 配置文件中最多配置以下 Cloud Storage 凭据类型之一:OAuth2 用户帐号、OAuth2 服务帐号。除此之外,您还可以拥有 S3 HMAC 凭据(对于使用 s3:// 网址是必需的)和 Google Compute Engine 内部服务帐号凭据。只有在没有 OAuth2 凭据时,才会使用 Google Compute Engine 内部服务帐号凭据。

支持的凭据类型

gsutil 支持多种凭据类型(具体的子集取决于您使用的是哪个 gsutil 发行版;请参阅上面的讨论)。

OAuth2 用户帐号:
这是代表特定用户对请求进行身份验证的首选凭据类型(这可能是 gsutil 最常见的用途)。该凭据类型是在您运行“gsutil config”(或用于安装 Cloud SDK 的“gcloud init”)时创建的默认凭据类型。如需详细了解 OAuth2 身份验证,请参阅:https://developers.google.com/accounts/docs/OAuth2#scenarios
HMAC:

此凭据类型可供通过 HMAC 身份验证实现的程序使用,HMAC 身份验证是某些其他 Cloud Storage 服务提供商所支持的身份验证机制。在将数据移入/移出支持 HMAC 凭据的服务提供商时,此凭据类型还可用于交互式使用。这是在您运行“gsutil config -a”时创建的凭据类型。

请注意,您可以为 Cloud Storage 和其他服务提供商都设置 HMAC 凭据;也可以为 Cloud Storage 设置 OAuth2 用户帐号凭据,为其他服务提供商设置 HMAC 凭据。为此,在运行“gsutil config”命令(或用于安装 Cloud SDK 的“gcloud init”)后,您可以修改生成的 ~/.boto 配置文件并查找有关可添加其他凭据的位置的注释。

如需详细了解 HMAC 身份验证,请参阅:
https://developers.google.com/storage/docs/reference/v1/getting-startedv1#keys
OAuth2 服务帐号:

这是在代表服务或应用(而不是用户)进行身份验证时使用的首选凭据类型。例如,如果您要在夜间 cron 作业之外运行 gsutil 来上传/下载数据,则使用服务帐号可让 cron 作业不依赖于公司内个别员工的凭据。这是在您运行“gsutil config -e”时配置的凭据类型。如需在通过 Cloud SDK 安装时配置服务帐号凭据,请运行“gcloud auth activate-service-account”。

请务必注意,默认情况下服务帐号被视为针对 API 访问权限的 Editor,而不是 Owner。具体而言,Editor 在默认对象和存储分区 ACL 中具有 OWNER 访问权限,但预设的 ACL 选项会移除 Editor 的 OWNER 访问权限,这可能会导致意外结果。此问题的解决方案是使用“gsutil acl ch”而非“gsutil acl set <canned-ACL>”来更改存储分区的权限。

如需设置服务帐号以与“gsutil config -e”或“gcloud auth activate-service-account”结合使用,请参阅:

如需详细了解 OAuth2 服务帐号,请参阅:
https://developers.google.com/accounts/docs/OAuth2ServiceAccount
如需详细了解帐号角色,请参阅:
https://developers.google.com/console/help/#DifferentRoles
Google Compute Engine 内部服务帐号:

这是由 App Engine 或 Google Compute Engine 托管的帐号使用的服务帐号类型。当您运行 gcloud compute instances creates 命令时,系统会在 Google Compute Engine 上自动为您创建此类凭据,并且该凭据可以使用 --scopes 标志进行控制。

如需详细了解 Google Compute Engine 服务帐号,请参阅:
https://developers.google.com/compute/docs/authentication
如需详细了解 App Engine 服务帐号,请参阅:
https://developers.google.com/appengine/docs/python/appidentity/overview
服务帐号模拟:

在您需要授予对特定资源的短期访问权限的情况下,模拟服务帐号非常有用。例如,如果您有一个通常是只读的敏感数据存储分区,并且希望通过可信的服务帐号临时授予写入权限。

您可以通过运行“gsutil -i”、“gsutil config”并修改 boto 配置文件或“gcloud config set auth/impersonate_service_account”来指定要用于模拟的服务帐号。

您的原始凭据需要被授予针对目标服务帐号的 roles/iam.serviceAccountTokenCreator 才能进行模拟。如需了解详情,请参阅: