向对 Google Compute Engine 发出的请求授权

如果您使用 Compute Engine API 管理自己的 Compute Engine 资源,则可以通过从 Compute Engine 服务帐号中获取凭据以向 API 验证您的应用。服务帐号允许您的应用向 API 进行身份验证,而不需要在应用代码中嵌入任何密钥。

对于您的应用必须向对 API 发出的请求授权的大多数情况,我们建议使用服务帐号。但是,如果您正在构建开发或管理工具(在这种情况下,用户会向您授予其 Google Cloud 资源的访问权限),请改用用户授权流程

从服务帐号中获取凭据的最简单方法是使用 Compute Engine 客户端库应用默认凭据。您的应用可以通过这些软件包从多项可用资源中的一项资源获取凭据,具体使用的资源取决于应用运行的位置。

在 Compute Engine 实例上运行的应用

如果您在 Compute Engine 实例上运行应用,应用默认凭据会通过内置的服务帐号获取凭据。请参阅为实例创建和启用服务帐号,以为您的实例配置这些内置服务帐号,并在 Compute Engine 实例上运行您的应用。

在 Google Cloud Platform 之外运行的应用

如果您在 Google Cloud Platform 之外的系统上运行应用,那么您的应用可以使用应用默认凭据从这些系统的环境变量中获取凭据。请参阅应用默认凭据的运作方式,以将环境变量配置为使用必要的凭据。

正在开发的应用

当您在本地开发应用时,可以使用 gcloud 工具中的 auth application-default login 信息,临时为应用获取用户凭据。此命令在您开发可正常使用服务帐号的代码时非常有用,但您需要在本地开发环境中运行代码,这样可轻松提供用户凭据。此类凭据将应用于所有利用应用默认凭据客户端库的 API 调用。

  1. 在您的开发系统上安装 gcloud 工具

  2. 使用 gcloud auth application-default login 命令向该工具提供您的凭据

应用会从该工具获取凭据。稍后,您可以将自己的应用部署至 Compute Engine 实例(在这些实例中,应用会自动从内置服务帐号获取凭据),或者在环境变量中指定凭据的其他系统。

示例:使用应用默认凭据进行身份验证

此示例使用 Python 客户端库进行身份验证,并向 Cloud Storage API 发出请求以列出项目中的存储分区。该示例采用以下过程:

  1. 获取 Cloud Storage API 所需的必要身份验证凭据,并使用 build() 方法和凭据来初始化 Cloud Storage 服务。
  2. 列出 Cloud Storage 中的存储分区。

您可以在运行 gcloud auth application-default login 命令或将环境变量设为使用应用默认凭据后,在您的本地机器中有权管理 Google Cloud Storage 中的存储分区的实例上运行此示例。

import argparse

import googleapiclient.discovery

def create_service():
    # Construct the service object for interacting with the Cloud Storage API -
    # the 'storage' service, at version 'v1'.
    # Authentication is provided by application default credentials.
    # When running locally, these are available after running
    # `gcloud auth application-default login`. When running on Compute
    # Engine, these are available from the environment.
    return googleapiclient.discovery.build('storage', 'v1')

def list_buckets(service, project_id):
    buckets = service.buckets().list(project=project_id).execute()
    return buckets

def main(project_id):
    service = create_service()
    buckets = list_buckets(service, project_id)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud Project ID.')

    args = parser.parse_args()

    main(args.project_id)

获取由应用的用户所拥有的 Google Cloud 资源的访问权限

如果您正在构建的开发或管理工具(在这种情况下,用户会向您授予其 Google Cloud 资源的访问权限),请通过基本的 OAuth 2.0 流程获取授权。在此过程中,需要您的用户通过用户授权流程向您授予其信息的访问权限。您的应用获得访问权限后,可以查看或修改各用户的项目中的 Compute Engine 资源。

在您的请求中,请指定一个访问范围加以限制,使您只能访问您的应用需要的方法和用户信息。例如,当您的应用查看现有的 Compute Engine 资源,但不为用户创建或修改任何资源时,请指定 compute.readonly 范围。

范围 含义
https://www.googleapis.com/auth/cloud-platform 对指定 Cloud Platform 项目中所有资源和服务的完整访问权限
https://www.googleapis.com/auth/compute 对 Google Compute Engine 方法的读写权限。
https://www.googleapis.com/auth/compute.readonly 对 Google Compute Engine 方法的只读权限。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档