Compute Engine へのリクエストの承認

Compute Engine API を使用して Compute Engine リソースを管理する場合に、アプリケーションが API から認証を受けるには、Compute Engine サービス アカウントから認証情報を取得します。サービス アカウントを使用すると、アプリケーション コードに秘密鍵を埋め込まずに、アプリケーションを API に対して認証できます。

アプリケーションが API に対するリクエストを承認する必要があるほとんどのケースでは、サービス アカウントを使用することをおすすめします。ただし、開発または管理ツールを作成している場合は、ユーザーからアプリケーション側に Google Cloud リソースへのアクセス許可が与えられるため、ユーザー承認フローを使用します。

サービス アカウントから認証情報を取得するには、Compute Engine クライアント ライブラリアプリケーションのデフォルト認証情報を使用します。これらのパッケージを使用すると、アプリケーションは、その実行場所に応じて、利用可能ないずれかのソースから認証情報を取得できます。

アプリケーションを Compute Engine インスタンス上で実行する場合

Compute Engine インスタンス上でアプリケーションを実行する場合は、アプリケーションのデフォルト認証情報を使用して組み込みのサービス アカウント経由で認証情報を取得できます。これらの組み込みサービス アカウントを使用してインスタンスを構成し、Compute Engine インスタンスでアプリケーションを実行する方法については、アクセス トークンを使用したアプリケーションの直接認証をご覧ください。

Google Cloud の外部で実行されるアプリケーション

Google Cloud 外のシステム上でアプリケーションを実行する場合、アプリケーションのデフォルトの認証情報を使用してシステムの環境変数から認証情報を取得できます。必要な認証情報を使用して環境変数を構成する方法については、サービス アカウントとして認証するをご覧ください。

アプリケーションが開発中の場合

アプリケーションをローカルで開発する際に、gcloud auth application-default login コマンドを使用して、アプリケーションのユーザー認証情報を一時的に取得できます。このコマンドは、通常はサービス アカウントを使用するコードを開発する際に、ローカル開発環境でコードを実行する必要がある場合に、ユーザー認証情報を提供するのに役立ちます。認証情報は、アプリケーションのデフォルト認証情報クライアント ライブラリを使用するすべての API 呼び出しに適用されます。

  1. 開発システムに gcloud CLI をインストールします。

  2. gcloud auth application-default login コマンドを使用して、ツールに認証情報を提供します。

アプリケーションは gcloud ツールから認証情報を取得します。後でアプリケーションを Compute Engine インスタンスにデプロイし、アプリケーションによって組み込みのサービス アカウントから認証情報が自動的に取得されるようにしたり、環境変数に認証情報が指定されている他のシステムにアプリケーションをデプロイしたりできます。

例: アプリケーションのデフォルト認証情報を使用した認証

この例では、Python クライアント ライブラリを使用して認証を行い、プロジェクト内のバケットの一覧表示を行う Cloud Storage API にリクエストを行います。これは、次の手順により行います。

  1. Cloud Storage API に必要な認証情報を取得し、build() メソッドと認証情報を使用して Cloud Storage サービスを初期化します。
  2. Cloud Storage 内のバケットをリストします。

このサンプルは、Cloud Storage のバケットを管理するためのアクセス権があるインスタンス、gcloud beta auth application-default login コマンドを実行した後のローカルマシン、またはアプリケーションのデフォルトの認証情報使用のために環境変数を設定した後に実行できます。


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 スコープを指定します。

Compute Engine には次のスコープがあります。

スコープ 意味
https://www.googleapis.com/auth/compute Compute Engine メソッドに対する読み取り/書き込みアクセス権。
https://www.googleapis.com/auth/compute.readonly Compute Engine メソッドに対する読み取り専用アクセス権。
https://www.googleapis.com/auth/cloud-platform 指定した Google Cloud プロジェクトのほとんどの Google Cloud サービスのデータを表示して管理します。

Google Cloud 全体のサービスと必要なスコープの一覧については、Google API の OAuth 2.0 スコープをご覧ください。