エンドユーザーとして認証する

このトピックでは、エンドユーザーに代わって Google Cloud APIs にアクセスする方法について説明します。Google Cloud APIs への認証に関する一般情報については、認証の概要をご覧ください。

認証フロー

アプリケーションがエンドユーザーに代わって Google Cloud APIs にアクセスする必要がある場合、アプリケーションは OAuth 同意フローを開始します。ユーザーが OAuth 同意フローを完了すると、アプリケーションは、ユーザーの代わりにアプリケーションで Google Cloud APIs を呼び出せるようにするアクセス トークンを受け取ります。

このプロセスは OAuth 2.0 と呼ばれるプロトコルです。

OAuth 2.0 フロー
アプリ
ユーザーの同意
ユーザーデータ

OAuth 2.0 の詳細については、OAuth 2.0 をご覧ください。

OAuth スコープの指定

エンドユーザーとして認証する場合は、OAuth スコープを明示的に指定する必要があります。OAuth スコープにより、アプリケーションがエンドユーザーの代わりに実行できる操作が制限されます。たとえば、これらの操作には Cloud Storage からのファイルの読み取り、Google Cloud プロジェクトの管理などが含まれます。

使用可能な OAuth スコープの詳細については、特定の API ページをご覧ください。たとえば、Compute Engine API で disks.get() メソッドを使用する場合は、これらの OAuth スコープのいずれかを設定する必要があります。ユースケースに基づいて必要な最小限のスコープを設定します。

プロジェクト リソースへのアクセスの許可と制限

エンドユーザー認証情報を使用してプロジェクト内のリソースにアクセスする場合は、プロジェクト内のリソースへのユーザー アクセス権を付与する必要があります。これを行うには、Google Cloud で Identity and Access Management(IAM)のロールを設定します。

ユーザーがアクセスできるリソースを制限できます。これは、所有するプロジェクトのリソースにユーザーがアクセスできるようにしている場合が特に該当します。ユーザーが必要とする最低限の権限に従ってロールを設定します。

各サービスには一連の IAM ロールがあります。また、カスタムロールを作成することもできます。詳細については、ロールについてカスタムロールの作成と管理をご覧ください。

エンドユーザーの認証の例

エンドユーザーの認証情報を取得するには、以下の各セクションに記載されている手順を実行します。以下に示す手順では BigQuery API を使用しますが、クライアント ライブラリがある Google Cloud API であれば、どの API でもこの同じプロセスを使用できます。

プロジェクトの設定

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  4. BigQuery API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  7. BigQuery API を有効にします。

    API を有効にする

  8. BigQuery クライアント ライブラリをインストールします。
  9. Python または Node.js を使用する場合は、追加の認証ライブラリをインストールする必要があります。

    Python

    Google Auth と統合した oauthlib をインストールします。

    pip install --upgrade google-auth-oauthlib

クライアント認証情報の作成

OAuth クライアント認証情報を作成する前に、OAuth 同意画面を設定しておく必要があります。詳細については、OAuth 同意画面の設定をご覧ください。

Google Cloud Console でクライアント認証情報を作成します。

  1. Cloud Console で [認証情報] ページに移動します。

    [認証情報] に移動

  2. [認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。

  3. アプリケーションの種類を選択して [作成] をクリックします。

  4. クライアント ID の [JSON をダウンロード] ボタンをクリックして、認証情報をダウンロードします。

    [JSON をダウンロード] ボタン

  5. 認証情報ファイルを client_secrets.json に保存します。このファイルはアプリケーションとともに配布する必要があります。

API の認証と呼び出し

  1. クライアント認証情報を使用して OAuth 2.0 フローを行います。

    Python

    from google_auth_oauthlib import flow
    
    # TODO: Uncomment the line below to set the `launch_browser` variable.
    # launch_browser = True
    #
    # The `launch_browser` boolean variable indicates if a local server is used
    # as the callback URL in the auth flow. A value of `True` is recommended,
    # but a local server does not work if accessing the application remotely,
    # such as over SSH or from a remote Jupyter notebook.
    
    appflow = flow.InstalledAppFlow.from_client_secrets_file(
        "client_secrets.json", scopes=["https://www.googleapis.com/auth/bigquery"]
    )
    
    if launch_browser:
        appflow.run_local_server()
    else:
        appflow.run_console()
    
    credentials = appflow.credentials

  2. 認証済みの認証情報を使用して BigQuery API に接続します。

    Python

    from google.cloud import bigquery
    
    # TODO: Uncomment the line below to set the `project` variable.
    # project = 'user-project-id'
    #
    # The `project` variable defines the project to be billed for query
    # processing. The user must have the bigquery.jobs.create permission on
    # this project to run a query. See:
    # https://cloud.google.com/bigquery/docs/access-control#permissions
    
    client = bigquery.Client(project=project, credentials=credentials)
    
    query_string = """SELECT name, SUM(number) as total
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE name = 'William'
    GROUP BY name;
    """
    query_job = client.query(query_string)
    
    # Print the results.
    for row in query_job.result():  # Wait for the job to complete.
        print("{}: {}".format(row["name"], row["total"]))

サンプルコードを実行すると、クライアント シークレットに関連付けられたプロジェクトへのアクセスを要求するブラウザが起動します。このサンプルは BigQuery スコープを要求しているため、生成された認証情報を使用してユーザーの BigQuery リソースにアクセスできます。

別のユースケースでは、IAM のロールを付与して、ユーザーがアクセスできるリソースを決定できます。

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

無料で開始