記事のポイント
BigQueryとGAS連携には、サービスアカウント設定が不可欠。適切な設定で安全かつ効率的なデータ活用を。
GCPコンソールでサービスアカウントを作成し、BigQueryジョブユーザー等のロールを付与。キー管理も重要。
キーローテーションを定期的に実施し、漏洩時は速やかに無効化。監査ログ監視で不正アクセスを検知。
はじめに
本記事では、BigQueryとGAS(Google Apps Script)を連携させる際の、サービスアカウントの設定、ロール、権限管理について解説します。BigQueryを安全かつ効率的に利用するためには、サービスアカウントの適切な設定が不可欠です。
本ガイドでは、BigQueryのデータをGASから操作するための具体的な手順と、安全なデータアクセスを実現するためのロールと権限管理のベストプラクティスを、初心者にもわかりやすく解説します。この記事を通じて、BigQueryとGASの連携をスムーズに進め、データ活用を加速させましょう。
サービスアカウントとは?BigQueryにおける役割
BigQueryにおけるサービスアカウント は、データ連携や自動処理に不可欠です。本セクションでは、サービスアカウントの定義、種類、BigQueryでの利用シーンを解説します。
サービスアカウントの定義と種類
サービスアカウントは、特定のユーザーではなく、アプリケーションや仮想マシン(VM)インスタンスがGoogle Cloudリソースにアクセスするための特別なGoogleアカウントです。技術的には、サービスアカウントはメールアドレスのような形式を持ちますが、パスワードを持ちません。
認証には秘密鍵を使用し、これによりプログラムからの安全なアクセスが可能になります。ユーザーアカウントとの主な違いは、サービスアカウントが人間による操作を必要とせず、自動化されたプロセスで使用される点です。BigQueryにおけるサービスアカウントの種類は、BigQuery管理者、BigQueryデータ編集者、BigQueryデータ閲覧者、BigQueryジョブユーザーなどがあります。
これらのロールは、サービスアカウントに特定の権限を付与し、BigQueryリソースへのアクセスを制御します。例えば、BigQueryデータ編集者ロールを持つサービスアカウントは、BigQueryのデータを編集できます。一方、BigQueryデータ閲覧者ロールを持つサービスアカウントは、データの閲覧のみが可能です。このように、サービスアカウントの種類に応じて、BigQueryリソースへのアクセス権が異なります。
BigQueryにおけるサービスアカウントの利用シーン
BigQueryにおけるサービスアカウントは、データ連携や自動処理において重要な役割を果たします。例えば、BigQuery Data Transfer Service を利用して、Cloud StorageやAmazon S3などの外部データソースからBigQueryへデータを自動的に転送する際に、サービスアカウントが認証情報として使用されます。
また、Google Apps Script(GAS)からBigQueryのAPIを呼び出して、データの抽出、変換、ロード(ETL)処理を自動化する際にも、サービスアカウントが利用されます。具体的なユースケースとしては、毎晩バッチ処理で最新のトランザクションデータをBigQueryにロードし、翌朝までに分析可能な状態にする、といったシナリオが考えられます。
この場合、GASで記述されたスクリプトが、サービスアカウントの認証情報を使用してBigQueryにアクセスし、データのロード処理を実行します。また、特定のダッシュボードを定期的に更新するために、BigQueryからデータを抽出し、Googleスプレッドシートに書き出す処理も、サービスアカウントを利用して自動化できます。このように、サービスアカウントは、BigQueryと他のサービスとの連携を安全かつ効率的に行うための基盤となります。
BigQueryサービスアカウントの設定手順
BigQueryを安全に利用するためには、サービスアカウントの設定が不可欠です。ここでは、GCPコンソールでのサービスアカウント作成から必要な権限付与、キーの管理まで、具体的な手順を解説します。
GCPコンソールでのサービスアカウント作成
まず、Google Cloud Consoleにログインし、対象プロジェクトを選択します。次に、IAMと管理からサービスアカウントのページへ移動し、「サービスアカウントを作成」をクリックします。アカウント名には、役割がわかりやすい名前(例:bigquery-data-processor
)を設定し、説明欄にはアカウントの目的を簡潔に記述します。例えば、「BigQueryデータ処理用サービスアカウント」と記載します。
作成後、サービスアカウントのメールアドレスが生成されるので、控えておきましょう。このメールアドレスは、後続の手順で権限を付与する際に使用します。サービスアカウントの作成は、BigQueryを操作する上での最初のステップであり、適切な設定を行うことで、安全かつ効率的なデータ処理が可能になります。
プロジェクト内で複数のサービスアカウントを作成し、それぞれに異なる役割を与えることで、より詳細なアクセス制御を実現できます。例えば、データ分析用、データ書き込み用など、用途に応じてアカウントを分けることが推奨されます。
BigQueryに必要なロールの付与
サービスアカウントを作成したら、BigQueryを操作するために必要なロールを付与します。IAMと管理のロール管理ページで、先ほど作成したサービスアカウントを選択し、「プリンシパルにロールを付与」をクリックします。
BigQueryジョブユーザー(roles/bigquery.jobUser
)は、クエリの実行やジョブの作成に必要なロールです。BigQueryデータ閲覧者(roles/bigquery.dataViewer
)は、テーブルデータの読み取りに必要なロールです。最小権限の原則に従い、必要なロールのみを付与することが重要です。
例えば、データ閲覧のみが必要なサービスアカウントには、データ閲覧者ロールのみを付与します。不要な権限を与えないことで、セキュリティリスクを低減できます。また、BigQueryデータ編集者(roles/bigquery.dataEditor
)は、データの書き込みや更新に必要なロールです。
これらのロールを適切に組み合わせることで、サービスアカウントはBigQueryリソースに対して必要な操作を実行できるようになります。ロールの付与は、サービスアカウントのセキュリティを確保する上で非常に重要なステップです。
サービスアカウントキーの作成と管理
サービスアカウントキーは、GASなどの外部アプリケーションからBigQueryにアクセスするために使用します。サービスアカウントの詳細ページから「キー」タブを選択し、「キーを追加」>「新しいキーを作成」をクリックします。キーのタイプはJSON形式を選択し、「作成」をクリックすると、JSONファイルがダウンロードされます。
このJSONファイルには、サービスアカウントの認証情報が含まれています。JSONファイルは安全な場所に保管し、バージョン管理システムにコミットしないように注意してください。キーが漏洩した場合、BigQueryリソースへの不正アクセスが発生する可能性があります。
キーのローテーションを定期的に行い、古いキーを無効化することを推奨します。また、環境変数やシークレット管理ツールを使用して、キーをコードに直接埋め込まないようにしてください。例えば、GASのスクリプトプロパティにキーを保存し、コードから参照するようにします。キーの管理は、BigQueryのセキュリティを維持する上で非常に重要な要素です。
BigQueryのロールと権限管理:安全なデータアクセスのために
BigQuery では、ロールと権限の管理がデータセキュリティの要となります。適切なロール設定により、不正アクセスを防ぎ、安全なデータアクセスを実現するためのベストプラクティスを解説します。
BigQueryの主要ロール解説
BigQueryには、データへのアクセスを制御するための様々なロールが存在します。主要なロールとして、BigQueryデータ閲覧者、BigQueryジョブユーザー、BigQueryメタデータ ビューアーなどがあります。それぞれのロールが持つ権限と、具体的な利用シーンについて解説します。
BigQueryデータ閲覧者 は、特定のテーブルデータの閲覧に利用され、権限はviewfilteredtabledatadefinedbyarowaccesspolicy
です。
BigQueryジョブユーザー は、プロジェクト内でのクエリ実行を可能にし、runjobswithinthe project
の権限を持ちます。
BigQueryメタデータビューアー は、データセットやプロジェクトのメタデータ閲覧を許可し、viewmetadataatthedatasetprojectororganizationlevel
の権限を持ちます。
これらのロールを適切に使い分けることで、データへのアクセスを細かく制御できます。例えば、特定のユーザーにのみ特定のデータセットへのアクセスを許可したり、クエリの実行権限を限定したりすることが可能です。
また、BigQueryオブジェクト参照管理者 はオブジェクト参照リソースのリードおよびライト操作が可能で、BigQueryオブジェクト参照読者 はオブジェクト参照を通じてオブジェクトを読み取ることができます。
BigQueryリードセッションユーザー はリードセッションの作成と使用ができ、BigQueryリソース管理者 はスロット割り当て、コミットメント、予約の管理が可能です。
BigQueryリソースエディター はBigQueryワークロードの管理が可能ですが、スロットコミットメントの作成や修正はできません。
BigQueryリソースビューア はBigQueryワークロードの表示が可能ですが、予約やコミットメントの作成や修正はできません。
ロール 権限 説明 BigQueryデータ閲覧者 viewfilteredtabledatadefinedbyarowaccesspolicy
特定のテーブルデータの閲覧 BigQueryジョブユーザー runjobswithinthe project
プロジェクト内でのクエリ実行 BigQueryメタデータビューアー viewmetadataatthedatasetprojectororganizationlevel
データセットやプロジェクトのメタデータ閲覧 BigQueryオブジェクト参照管理者 オブジェクト参照リソースのリードおよびライト操作 オブジェクト参照リソースのリードおよびライト操作 BigQueryオブジェクト参照読者 オブジェクト参照を通じてオブジェクトを読み取る オブジェクト参照を通じてオブジェクトを読み取る BigQueryリードセッションユーザー リードセッションの作成と使用 リードセッションの作成と使用 BigQueryリソース管理者 スロット割り当て、コミットメント、予約の管理 スロット割り当て、コミットメント、予約の管理 BigQueryリソースエディター BigQueryワークロードの管理 BigQueryワークロードの管理(スロットコミットメントの作成や修正は不可) BigQueryリソースビューア BigQueryワークロードの表示 BigQueryワークロードの表示(予約やコミットメントの作成や修正は不可)
カスタムロールの作成と活用
BigQueryでは、標準ロールに加えて、カスタムロールを作成することで、より細やかな権限管理が可能です。カスタムロールは、特定のニーズに合わせて権限を組み合わせることで、柔軟なアクセス制御を実現します。
例えば、Data Transferを手動で実行するために必要なbigquery.transfers.update
権限や、転送状態の確認に必要なbigquery.transfers.get
権限を組み合わせたカスタムロールを作成できます。
カスタムロールを作成する際には、まず、必要な権限を洗い出し、それらを組み合わせたロールを定義します。次に、そのロールを特定のユーザーやサービスアカウントに付与します。
これにより、そのユーザーやサービスアカウントは、定義された範囲内でのみBigQueryリソースにアクセスできるようになります。
カスタムロールの活用例として、エンジニア全員に対してData Transferの実行を許可するケースが挙げられます。この場合、bigquery.transfers.update
とbigquery.transfers.get
の権限を付与したカスタムロールを作成し、エンジニアに割り当てることで、BigQuery Adminロールを付与せずに、Data Transferの実行を可能にします。
カスタムロールは、組織のセキュリティポリシーや業務要件に合わせて柔軟に設計できるため、BigQueryの権限管理において非常に重要な役割を果たします。
権限管理のベストプラクティス
BigQueryの権限管理においては、いくつかのベストプラクティスが存在します。最も重要な原則は、最小権限の原則を遵守することです。
各サービスアカウントには、必要最小限の権限のみを付与し、不要な権限は削除するようにします。また、プロジェクトの進行に伴い、定期的に権限を見直し、不要な権限を削除することも重要です。
BigQueryの監査ログを定期的にチェックし、異常なアクセスパターンを検出することも、セキュリティ対策として有効です。
一時的なアクセスが必要な場合は、期限付きの権限を付与し、過剰な権限付与を避けるべきです。
異なる目的や機能ごとに別々のサービスアカウントを使用し、権限の分離を図ることも推奨されます。例えば、本番環境と開発環境で異なるサービスアカウントを使用することで、誤操作による影響範囲を限定できます。
Data Transfersの実行においては、BigQuery Adminロールをすべてのユーザーに付与するのではなく、カスタムロールを作成し、手動転送権限のみを付与することが推奨されます。
これらのベストプラクティスを実践することで、セキュリティを強化し、効率的なプロジェクト管理を実現できます。
▶ データ活用支援について詳しく知る | 詳細はこちら
GASからBigQueryへの接続と操作
GASプロジェクトでBigQueryを利用するためには、まずGCP(Google Cloud Platform)プロジェクトとの連携が不可欠です。最初に、GASプロジェクトからGCPプロジェクトへのアクセスを許可するように設定します。
GASエディタを開き、「リソース」から「Cloud Platformプロジェクト」を選択し、関連付けるGCPプロジェクトのプロジェクト番号を入力します。
次に、BigQuery APIを有効化します。GCPコンソールにアクセスし、APIとサービスからBigQuery APIを検索して有効にします。
これにより、GASプロジェクトからBigQuery APIを利用するための基盤が整います。サービスアカウントを使用するには、GCPで作成したサービスアカウントの認証情報をGASプロジェクトに追加する必要があります。
GASのスクリプトプロパティに、サービスアカウントのクライアントメールアドレス、秘密鍵、プロジェクトIDを設定します。これらの情報は、サービスアカウントのJSONキーファイルから取得できます。
スクリプトプロパティは、GASエディタの「ファイル」から「プロジェクトのプロパティ」を選択し、「スクリプトのプロパティ」タブで設定します。
これにより、GASプロジェクトはサービスアカウントとしてBigQueryにアクセスできるようになります。
例えば、クライアントメールアドレスはexample@example.iam.gserviceaccount.com
、秘密鍵は-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----
、プロジェクトIDはyour-project-id
のように設定します。
これらの設定を正確に行うことで、GASからBigQueryへの安全な接続が可能になります。
設定項目 設定値の例 クライアントメールアドレス example@example.iam.gserviceaccount.com
秘密鍵 -----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----
プロジェクトID your-project-id
GASとBigQueryを連携させる際には、いくつかの注意点があります。まず、セキュリティリスクについてです。
サービスアカウントのキーが漏洩すると、BigQueryのデータが不正にアクセスされる可能性があります。キーの管理には十分注意し、定期的なローテーションを実施することが重要です。
また、GASのコード内にキーを直接埋め込むのは避け、スクリプトプロパティや環境変数を利用して安全に管理するようにしましょう。
APIの利用制限も考慮する必要があります。BigQuery APIには、1日あたりのクエリ数やデータ転送量に制限があります。
制限を超えるとエラーが発生し、スクリプトが正常に動作しなくなる可能性があります。APIの使用状況をモニタリングし、必要に応じて制限の緩和を申請することを検討しましょう。
GASの実行時間制限も考慮する必要があります。GASのスクリプトは、1回の実行時間が最大6分に制限されています。
BigQueryのクエリが複雑で実行時間が長くなる場合は、処理を分割したり、BigQueryの最適化を行うなどの対策が必要です。
例えば、クエリを最適化して実行時間を短縮したり、処理を複数のスクリプトに分割して実行するなどの方法があります。
また、BigQueryのジョブを非同期で実行し、GASの実行時間制限を超えないようにすることも可能です。
これらの注意点を守り、GASとBigQueryの連携を安全かつ効率的に行うようにしましょう。
注意点 詳細 対策 セキュリティリスク サービスアカウントのキー漏洩による不正アクセス キーの厳重な管理と定期的なローテーション、 スクリプトプロパティや環境変数の利用 APIの利用制限 1日あたりのクエリ数やデータ転送量の制限 API使用状況のモニタリング、 必要に応じた制限緩和の申請 GASの実行時間制限 1回の実行時間が最大6分 クエリの最適化、 処理の分割、 BigQueryジョブの非同期実行
サービスアカウントキーのローテーションとセキュリティ
サービスアカウントキーのローテーションとセキュリティは、BigQueryのデータを安全に保つために不可欠です。定期的なキーのローテーションは、不正アクセスやデータ漏洩のリスクを低減し、万が一キーが漏洩した場合でも迅速に対応できる体制を整えることが重要です。
キーローテーションの手順
サービスアカウントキーのローテーションは、セキュリティを維持するために重要なプロセスです。まず、GCPコンソールで新しいサービスアカウントキーを作成します。
次に、既存のアプリケーションやスクリプトで使用されている古いキーを、新しいキーに置き換えます。この際、GAS (Google Apps Script)などのスクリプトも忘れずに更新してください。
新しいキーが正常に動作することを確認した後、古いキーを無効化します。キーのローテーションを自動化するために、HashiCorp Vault のようなシークレット管理ツールの利用を検討することも有効です。
これにより、定期的なキーの更新作業が効率化され、人的ミスも防ぐことができます。例えば、Cloud Functions やCompute Engine で実行されているアプリケーションの場合、環境変数や設定ファイルに保存されているキー情報を更新する必要があります。
キーのローテーションは、少なくとも90日ごとに行うことが推奨されます。また、ローテーションの際には、必ず監査ログを確認し、不正なアクセスがないか監視してください。
キー漏洩時の対応
サービスアカウントキーが漏洩した場合、迅速な対応が不可欠です。まず、漏洩したキーを直ちに無効化し、不正なアクセスを遮断します。
次に、影響範囲を特定するために、監査ログを確認します。監査ログには、キーが使用された日時、アクセス元IPアドレス、実行されたクエリなどの情報が記録されています。
これらの情報を分析し、どのデータが不正にアクセスされた可能性があるかを特定します。漏洩したキーを使用してアクセスされた可能性のあるデータについては、バックアップからの復元やデータの再作成を検討します。
また、BigQuery のロールと権限を見直し、不要な権限が付与されていないか確認します。例えば、特定のユーザーにbigquery.dataViewer
ロールのみを付与するなど、最小限の権限で運用することが推奨されます。
さらに、Google Cloud のセキュリティ診断サービスを利用して、システム全体の脆弱性をチェックし、再発防止策を講じることが重要です。例えば、Security Command Center を使用すると、セキュリティに関する推奨事項や潜在的なリスクを自動的に検出できます。
トラブルシューティング:よくある問題と解決策
BigQueryとサービスアカウントの連携では、権限不足やAPI連携エラーが頻発します。これらの問題を解決し、スムーズなデータアクセスを実現するための具体的な手順を解説します。
権限不足エラーの解決
BigQueryのサービスアカウントで権限不足エラーが発生した場合、主な原因は必要なロールが付与されていないことです。まずは、エラーメッセージを確認し、どのロールが不足しているかを特定します。
例えば、「PERMISSION_DENIED
」というエラーメッセージが表示された場合、アカウントに必要なロールが付与されていません。必要なロールを付与するには、GCPコンソールでサービスアカウントの設定画面を開き、適切なロールを追加します。
BigQueryジョブを実行するにはBigQuery Job User
ロール、データ編集にはBigQuery Data Editor
ロールが必要です。カスタムロールを使用している場合は、そのロールに必要な権限が含まれているかを確認してください。
カスタムロールの権限が不足している場合は、必要な権限を追加して問題を解決します。また、Google Apps Script(GAS)からBigQueryにアクセスする際には、GASプロジェクトにサービスアカウントの認証情報が正しく設定されているかを確認してください。
認証情報が誤っている場合、権限不足エラーが発生することがあります。サービスアカウントのキー(jsonキー)を設定し、GASプロジェクトに認証情報を追加することで、権限不足エラーを解消できます。
{
"oauthScopes": [
"https://www.googleapis.com/auth/bigquery"
],
"projectId": "プロジェクトID",
"client_id": "クライアントID"
}
API連携エラーの解決
GASからBigQuery APIを連携する際にAPI連携エラーが発生した場合、APIの有効化状況とサービスアカウントキーの検証が重要です。まず、Google CloudコンソールでBigQuery APIが有効になっているかを確認します。
APIs & Services > Dashboard
に移動し、BigQuery APIが有効になっていることを確認してください。APIが無効になっている場合は、有効にすることでエラーが解消されることがあります。
次に、サービスアカウントキーが正しく設定されているかを確認します。GASプロジェクトに設定されたサービスアカウントキーが有効期限切れ、または誤ったキーである場合、API連携エラーが発生します。
新しいサービスアカウントキーを作成し、GASプロジェクトに再設定することで問題を解決できます。また、GASプロジェクトで使用するスコープがBigQuery APIに必要なスコープを含んでいるかを確認します。
BigQuery APIを使用するには、https://www.googleapis.com/auth/bigquery
スコープが必要です。GASプロジェクトのマニフェストファイル(appsscript.json)にこのスコープが含まれていることを確認してください。
{
"oauthScopes": [
"https://www.googleapis.com/auth/bigquery"
],
"projectId": "プロジェクトID",
"client_id": "クライアントID"
}
おわりに
この記事では、BigQueryとサービスアカウントの連携について、設定手順から権限管理、GASとの接続方法までを解説しました。これらの情報を活用することで、BigQueryをより安全かつ効率的に利用できるようになります。
もしデータ活用でお困りの際は、Hakkyのデータ活用支援サービスをご検討ください。お客様の課題に合わせた最適なソリューションをご提案し、データドリブンなビジネスの成長をサポートいたします。
お知らせ
貴社のデータ活用、お困りではありませんか?Hakkyでは、お客様の課題に合わせたデータ活用支援で、ビジネスの成長を加速させます。
関連記事
参考文献