Google 的身份验证方法

本文档可帮助您了解一些关键身份验证方法和概念,以及从何处获得有关实现身份验证或排查身份验证问题的帮助。身份验证文档主要侧重于 Google Cloud 服务,但本页面上的身份验证使用场景列表和介绍性材料还包括其他 Google 产品的使用场景。

简介

身份验证是通过使用某种凭据确认身份的过程。身份验证的目的是证明您自称的身份。

Google 提供了许多 API 和服务,需要进行身份验证才能访问。Google 还提供了许多服务来托管客户编写的应用;这些应用还需要确定其用户的身份。

我想要… 信息
使用高级编程语言,通过我的应用向 Google Cloud 服务进行身份验证。 设置应用默认凭据,然后使用其中一个 Cloud 客户端库
向 Cloud Run 或 Cloud Functions 上运行的应用进行身份验证。 获取 OpenID Connect (OIDC) ID 令牌,并为其提供您的请求。
为访问 Google 或 Google Cloud 服务和资源的应用实现用户身份验证。 请参阅对应用用户进行身份验证,了解各个选项的比较情况。
在我的本地开发环境中试用一些 gcloud 命令。 初始化 gcloud CLI
在我的本地本地环境中试用一些 Google Cloud REST API 请求。 使用 curl 等命令行工具调用 REST API
试用我的产品文档中包含的代码段。 在本地设置应用默认凭据,并在本地环境中安装产品的客户端库。客户端库会自动查找您的凭据
获得有关其他身份验证使用场景的帮助。 请参阅身份验证使用场景页面。
查看 Google 在身份和访问权限管理空间中提供的产品列表。 请参阅 Google 身份和访问权限管理产品页面。

为您的使用场景选择合适的身份验证方法

当您使用 Google Cloud CLI、Cloud 客户端库、支持应用默认凭据 (ADC) 的工具(如 Terraform 或 REST 请求)访问 Google Cloud 服务时,请使用下图来帮助您选择身份验证方法:

用于根据使用场景选择身份验证方法的决策树

此图将引导您完成以下问题:

  1. 您是否在单用户开发环境(例如您自己的工作站、Cloud Shell 或虚拟桌面界面)中运行代码?
    1. 如果是,请继续回答问题 4。
    2. 如果不是,请继续回答问题 2。
  2. 您是否在 Google Cloud 中运行代码?
    1. 如果是,请继续回答问题 3。
    2. 如果不是,请继续回答问题 5。
  3. 您是否在 Google Kubernetes Engine 或 GKE Enterprise 中运行容器?
    1. 如果是,请使用适用于 GKE 的工作负载身份联合将服务账号关联到 Kubernetes pod。
    2. 如果不是,请将服务账号附加到资源。
  4. 您的使用场景是否需要服务账号?

    例如,您希望在所有环境中为您的应用一致地配置身份验证和授权。

    1. 如果不是,请使用用户凭据进行身份验证
    2. 如果是,请使用用户凭据模拟服务账号
  5. 您的工作负载是否通过支持工作负载身份联合的外部身份提供方进行身份验证?
    1. 如果是,请配置工作负载身份联合,以允许在本地或其他云提供商上运行的应用使用服务账号。
    2. 如果不是,请创建服务账号密钥

身份验证类型

访问大多数资源和应用都需要进行身份验证。本文档支持技术从业者创建具有以下目标之一的应用代码:

OAuth 2.0

Google API 会实现并扩展 OAuth 2.0 框架。OAuth 2.0 框架概述了各种身份验证“流程”或身份验证方法。通常,应用会将代表主账号(用户或服务账号)的凭据提供给称为“授权服务器”的中间模块。授权服务器以令牌进行响应,应用可以使用该令牌向服务进行身份验证并访问资源。该令牌包含一个或多个范围,反映了应用有权进行的访问。然后,应用会将该令牌提供给资源服务器,以获得对资源的访问权限。

Google Cloud 服务的授权方法

Google Cloud 服务使用 Identity and Access Management (IAM) 进行身份验证。IAM 按主账号和资源提供精细的控制。向 Google Cloud 服务进行身份验证时,通常使用包含所有 Google Cloud 服务 (https://www.googleapis.com/auth/cloud-platform) 的范围。

OAuth 2.0 范围可提供第二层保护,如果您的代码在需要考虑令牌安全的环境(例如移动应用)中运行,则该范围会非常有用。在这种情况下,您可以使用更精细的范围来降低令牌被破解时的风险。OAuth 2.0 范围还用于授予对用户数据的访问权限

应用默认凭据

Application Default Credentials (ADC) 是 Google 身份验证库使用的一种策略,可根据应用环境自动查找凭据。身份验证库会将这些凭据提供给 Cloud 客户端库和 Google API 客户端库。使用 ADC 时,您的代码可以在开发或生产环境中运行,而无需更改应用向 Google Cloud 服务和 API 进行身份验证的方式。

如果您要编写需要使用 Google Cloud 服务的代码,则应尽可能使用 ADC。使用 ADC 可以简化开发过程,因为它允许您在各种环境中使用相同的身份验证代码。

您必须根据希望代码运行的位置向 ADC 提供凭据,然后才能使用 ADC。ADC 会自动查找凭据并在后台获取令牌,从而使身份验证代码无需修改即可在不同环境中运行。例如,相同版本的代码在开发工作站或 Compute Engine 上运行时可以向 Google Cloud API 进行身份验证。

您的 gcloud 凭据与您使用 gcloud CLI 提供给 ADC 的凭据不同。如需了解详情,请参阅 gcloud CLI 凭据和 ADC 凭据

术语

在讨论身份验证和授权时,请务必了解以下术语。

身份验证

身份验证是确定尝试访问资源的主账号身份的过程。

授权

授权是确定尝试访问资源的主账号或应用是否已获得相应访问权限级别授权的过程。

凭据

在本文档中,术语“用户账号”是指由您的身份提供方管理并通过员工身份联合进行联合的用户账号。

对于身份验证,凭据是一个数字对象,用于提供身份证明。密码、PIN 码和生物识别数据都可以用作凭据,具体取决于应用要求。例如,当您登录您的用户账号时,您需要提供密码并满足双重验证要求,以证明该账号实际上属于您且您没有被作恶方仿冒。

令牌有时称为凭据,但在本文档中,它们称为数字对象,用于证明调用方提供了适当的凭据,但它们不是凭据本身。

您需要提供的凭据类型取决于您要向其进行身份验证的对象。您可以在 Google Cloud 控制台中创建以下类型的凭据:

  • API 密钥

    与其他凭据不同,API 密钥不会标识主账号。API 密钥会提供 Google Cloud 项目,以进行结算和配额计算。

    许多 Google API 不接受 API 密钥。如需详细了解 API 密钥,请参阅 API 密钥

  • OAuth 客户端 ID

    OAuth 客户端 ID 用于向 Google 标识应用。如果您想要访问最终用户拥有的资源,则此 ID 是必需的,也称为三足式 OAuth (3LO)。如需详细了解如何获取和使用 OAuth 客户端 ID,请参阅设置 OAuth 2.0

主账号

主账号是一种可被授予资源访问权限的身份。对于身份验证,Google API 支持两种类型的主账号:用户账号服务账号

您是使用用户账号还是服务账号进行身份验证取决于您的使用场景。您可以在项目的不同阶段或不同的开发环境中同时或分别使用这两种主账号。

用户账号

用户账号代表开发者、管理员或与 Google API 和服务进行交互的任何其他人员。

用户账号由您的身份提供方管理,并通过员工身份联合进行联合。

使用用户账号时,您可以通过以下方式向 Google API 和服务进行身份验证:

如需大致了解如何为 Google Cloud 中的用户配置身份,请参阅用户的身份

服务账号

服务账号是指不代表真人用户的账号。它们提供了一种在真人不直接参与(例如,应用需要访问 Google Cloud 资源)时管理身份验证和授权的方法。服务账号由 IAM 管理。

以下列表提供了一些使用服务账号向 Google API 和服务进行身份验证的方法(按照从最安全到最不安全的顺序)。 如需了解详情,请参阅本页面中的为您的使用场景选择合适的身份验证方法

如需大致了解如何为 Google Cloud 上的工作负载配置身份(包括服务账号),请参阅工作负载的身份。 如需了解最佳实践,请参阅服务账号使用最佳实践

令牌

对于身份验证和授权,令牌是一个数字对象,显示调用方提供了交换为该令牌的适当凭据。该令牌包含有关发出请求的主账号身份以及它们有权进行的访问类型的信息。

可以将令牌视为酒店密钥。在您入住酒店并向酒店登记处出示适当的证件时,您会收到一个密钥,可让您访问特定的酒店资源。例如,该密钥可让您进入您的房间和客梯,但无法进入任何其他房间或货梯。

除 API 密钥外,Google API 不直接支持凭据。您的应用必须获取或生成令牌并将其提供给 API。令牌有多种类型。如需了解详情,请参阅令牌类型

工作负载和员工

Google Cloud 身份和访问权限产品允许通过编程方式和真人用户访问 Google 服务和资源。Google 对编程访问使用“工作负载”一词,对用户访问使用“员工”一词。

借助工作负载身份联合,您可以提供对 Google 外部运行的工作负载的访问权限,而无需创建和管理服务账号密钥。

借助员工身份联合,您可以使用外部身份提供方通过 IAM 对员工(一组用户,例如员工、合作伙伴和承包商)进行身份验证和授权,以便用户能够访问 Google Cloud 服务。

后续步骤