Google Compute Engine に対する承認リクエスト

Compute Engine API を使用して Compute Engine リソースを管理する場合に、アプリケーションが API から認証を受けるには、Compute Engine サービス アカウントから認証情報を取得します。サービス アカウントを使用すると、アプリケーションが 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 コマンドを使用して認証情報をツールに渡します

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

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

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

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

このサンプルは、Google Cloud Storage 内のバケットを管理するためのアクセス権があるインスタンスで、gcloud 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 プロセスを介して承認を得ます。このプロセスでは、ユーザー承認フローによって、ユーザーからアプリケーション側にユーザー情報に対するアクセス許可を与える必要があります。ユーザー情報に対するアクセス権を得たアプリケーションは、当該ユーザーのプロジェクト内の 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 ドキュメント