本主题介绍了如何以服务帐号身份对应用进行身份验证。 如需了解有关向 Google Cloud API 进行身份验证的一般信息(包括常见的身份验证场景和策略),请参阅身份验证概览。如需详细了解服务帐号,请参阅 Identity and Access Management 文档中的服务帐号。
自动查找凭据
如果您的应用在具有默认服务帐号的 Google Cloud 环境中运行,则应用可以检索服务帐号凭据以调用 Google Cloud API。此类环境包括 Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run 和 Cloud Functions。我们建议使用此策略,因为这种做法比手动传递凭据更便捷、更安全。
此外,我们建议您在应用中使用 Google Cloud 客户端库。Google Cloud 客户端库使用名为“应用默认凭据”(ADC) 的库来自动查找您的服务帐号凭据。ADC 会按以下顺序查找服务帐号凭据:
如果设置了环境变量
GOOGLE_APPLICATION_CREDENTIALS
,则 ADC 会使用该变量指向的服务帐号文件。如果未设置环境变量
GOOGLE_APPLICATION_CREDENTIALS
,则 ADC 使用关联到运行代码的资源的服务帐号。如果未设置环境变量
GOOGLE_APPLICATION_CREDENTIALS
,且运行代码的资源未关联任何服务帐号,则 ADC 使用 Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run 和 Cloud Functions 提供的默认服务帐号。如果 ADC 无法使用上述任何凭据,则会引发错误。
以下代码示例展示了如何在应用代码中使用 ADC 库:
C#
Go
Java
Node.js
PHP
Python
Ruby
手动传递凭据
如果您的应用在提供默认服务帐号的 Google Cloud 环境之外运行,则您需要手动创建一个服务帐号。然后,您可以创建一个或多个服务帐号密钥,这些密钥是与该服务帐号关联的凭据。您可以手动将服务帐号密钥传递到您的应用。
创建服务帐号
以下步骤介绍了如何创建服务帐号(如果您没有该帐号):
Cloud Console
-
在 Cloud Console 中,转到创建服务帐号密钥页面。
转到“创建服务帐号密钥”页面 - 从服务帐号列表中,选择新的服务帐号。
- 在服务帐号名称字段中,输入一个名称。
从角色列表中,选择 Project > Owner。
- 点击创建。包含密钥的 JSON 文件就会下载到计算机。
命令行
您可以使用本地机器上的 Cloud SDK 或在 Cloud Shell 中运行以下命令。
-
创建服务帐号。将 NAME 替换为服务帐号的名称。
gcloud iam service-accounts create NAME
-
向服务帐号授予权限。将 PROJECT_ID 替换为您的项目 ID。
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role="roles/owner"
-
生成密钥文件。将 FILE_NAME 替换为密钥文件的名称。
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com
通过环境变量传递凭据
通过设置环境变量 GOOGLE_APPLICATION_CREDENTIALS
向应用代码提供身份验证凭据。
将 [PATH] 替换为包含您的服务帐号密钥的 JSON 文件的路径。此变量仅适用于当前的 Shell 会话,因此,如果您打开新的会话,请重新设置该变量。
Linux 或 macOS
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例如:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
Windows
使用 PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例如:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\my-key.json"
使用命令提示符:
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
完成上述步骤后,ADC 可以自动查找您的凭据,如以上部分所述。我们建议您使用 ADC,因为需要使用的代码更少且代码可在不同的环境中移植。
使用代码传递凭据
如以下示例中所示,您可以选择在代码中明确指向服务帐号文件。必须安装 Cloud Storage 客户端库才能运行以下示例。
C#
Go
Java
Node.js
PHP
Python
Ruby
管理凭据的最佳做法
凭据提供对敏感数据的访问权限。以下做法有助于保护对凭据的访问权限。
请勿在源代码中嵌入与身份验证相关的密钥,如 API 密钥、OAuth 令牌和服务帐号密钥。您可以使用指向应用源代码之外的凭据的环境变量,如 Cloud Key Management Service。
在不同场景(如测试和生产环境)下创建和使用不同的凭据。
仅通过安全通道(如 HTTPS)传输凭据,以防止第三方拦截您的凭据。切勿以明文形式传输凭据或将凭据作为网址的一部分进行传输。
切勿将长期有效的凭据嵌入客户端应用。例如,不要将服务帐号密钥嵌入移动应用。第三方可能会检查客户端应用,轻松找到凭据并使用。
如果您不再需要令牌,请撤消令牌。
排查 API 错误
如需详细了解如何对失败的 API 请求进行问题排查,请参阅 Cloud API 错误。
后续步骤
- 了解如何向 Google Cloud API 验证身份
- 了解如何以最终用户身份进行身份验证
- 了解如何使用 API 密钥
亲自尝试
如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
免费开始使用