Pythonを使ってBigQueryからデータを取得する方法(その3)サービスアカウント編

Pythonを使ってBigQueryからデータを取得する方法を過去2回にわたりご紹介しました。
これまでは、認証にユーザーアカウントを使用した方法でしたが、実はユーザーアカウントでの認証は、定期的にブラウザでの再認証が必要となり、バッチプログラムなどクラウド上での実行には向いていません。

そこで、今回はサービスアカウントを使う方法についてご紹介したいと思います。

ひとことで表すと、個人のユーザーではなく 「アプリケーションなどの人以外のシステムが使うIAMユーザー」 のこと。Googleアカウントはヒトに紐づきます。ヒトがこのアカウントの認証情報を通して、Googleの各種サービスを利用します。

一方で、サービスアカウントは、Google Cloud のプロジェクトに紐づきます。一般的にはヒトではなく、プログラム等が認証して利用するものといえます。(詳細はこちらの公式ドキュメントを参照ください)

早速、サービスアカウントを発行してみましょう!
まずは、Google Cloud のコンソールにアクセスします。
ハンバーガーメニューから、[IAMと管理] >[サービスアカウント] を選択し、サービスアカウント一覧画面にアクセスします。

次に、画面上部の [+ サービスアカウントを作成] をクリックします。

サービスアカウント名、サービスアカウントID、説明を設定します。

※アカウント名を入力すると、IDはアカウント名 + @プロジェクトID.iam.gserviceaccount.comになるので、アカウント名を英数ハイフンで設定すると分かりやすくなります。

次に、アクセス許可設定を行います。

今回は、BigQueryからデータを取得するだけの最小権限を設定しています。
・BigQuery ジョブユーザー
・BigQuery データ閲覧者

※SQL クエリやデータロードなどのジョブ実行をするには、「 BigQuery ジョブユーザー」ロールも付与しましょう。
※テーブル作成やデータ更新などをする場合は、編集用の権限を付与しましょう。

②、③のアクセス許可設定については、後で設定することもできるので省略OKです。
ここまでで、サービスアカウントの一覧画面で、作成したアカウントが確認できたら完了です!

このサービスアカウントを使って、プログラムで認証するために秘密鍵を発行します。

GCPコンソールのサービスアカウント一覧画面から、秘密鍵を作成したいアカウントの右側の縦三点リーダーから、[鍵を管理]を選択します。

新規作成したばかりのサービスアカウントには鍵が存在しないので、[鍵を追加] > [新しい鍵を作成]を選択します。

キータイプを選択します。
JSONが推奨されているので、特に変更せず、[作成]をクリックします。

するとPC上にJSONファイルが保存されます。
鍵ファイルは任意の場所に保存し、外部の人間がアクセスできないように注意しましょう。
それでは、このJSONファイルを用いて、Pythonのプログラム上でBigQueryのデータを取得してみましょう。

サービスアカウントの発行、鍵の作成が完了したら、あとは以下のコードを実行するだけでBigQuery上のデータが取得できます。

import pandas as pd
from google.oauth2.service_account import Credentials

credentials = Credentials.from_service_account_file(filename="秘密鍵のjsonファイル名")

query = '''
SELECT * FROM データセット名.テーブル名
where officeName = '東京'
and target_day = '2022-08-01'
LIMIT 10
'''
project_id = "プロジェクトID"

df = pd.read_gbq(query=query, project_id=project_id, credentials=credentials)

※秘密鍵のJSONファイル名、プロジェクト名、データセット名、テーブル名はご自身の環境に合わせて適宜変更してください。

▼ BigQuery上に保存している 2022/08/01 の東京の厚さ指数を10行だけ取得した結果

サービスアカウントを使うと、個別のユーザーアカウントで必要な再認証の手間を省くことができます!

  • Googleアカウントはヒトに紐づいたもの。サービスアカウントは Google Cloud のプロジェクトに紐づいたもの。
  • 個別のユーザーアカウントは、定期的に再認証が必要。サービスアカウントは再認証が不要。

API AutoML Bard BigQuery BigQuery ML Bing ChatGPT Cloud Endpoints DWH DX GAS Generative AI Google Apps Script Google Cloud Google Form Google Workspace IT組織 Outlook PDF Python ReportLab selenium Snowflake VertexAI Vertex Forecast スクラッチ スクレイピング スプレッドシート セミナー ソトミル トレーニング バッチ予測 世界は女性とデジタルが救う 内製化 女性活躍 技術 時系列データ分析 業務効率化 機械学習 特徴量エンジニアリング 生成AI 自動化 評価指標 説明可能なAI 需要予測