サービス アカウントは人間ではないユーザーを表す特別なタイプの Google アカウントで、Google API やプロダクトのデータにアクセスして認証を受けることができます。データポータルでは、オーナーの認証情報を使ってアクセス権を委任したり、閲覧者の認証情報を使って個々のレポート閲覧者にデータへのアクセス権を要求したりする代わりに、サービス アカウントを使ってデータにアクセスできます。
注: サービス アカウントの認証情報は、BigQuery データソースでのみ使用できます。
サービス アカウントについて、さらに学習する。
データポータルでサービス アカウントを使用するメリット
個々のユーザーの認証情報ではなくサービス アカウントを使用すると、以下のようなメリットがあります。
- サービス アカウントの認証情報を使用しているデータソースは、作成者が退職した場合でも悪影響を受けることはありません。
- サービス アカウントの認証情報を使用すると、デバイス ポリシーを使用する VPC Service Controls の境界の背後にあるデータにアクセスできます。
- スケジュール設定されたメール、アラート、スケジュール設定されたデータ抽出などの自動機能では、VPC Service Controls の境界の背後にあるデータソースが使用されます(重要な注意点については、制限事項のセクションをご覧ください)。
- 上り(内向き)ルールと下り(外向き)ルールを作成して、サービス アカウントがサービス境界で保護されているリソースとクライアントにアクセスできるようにします。
必要なロール
管理者向け
- データポータル サービス エージェントを取得するには、Google Workspace または Cloud Identity のユーザーである必要があります。
- サービス アカウントを設定するには、 Google Cloud プロジェクトに対するサービス アカウント管理者(
roles/iam.serviceAccountAdmin)またはサービス アカウント作成(roles/iam.serviceAccountCreator)のロールが必要です。サービス アカウントのロールの詳細をご覧ください。 - BigQuery テーブルまたはデータセットにアクセスするようにサービス アカウントを構成するには、テーブルまたはデータセットに対する BigQuery データオーナー(
roles/bigquery.dataOwner)ロール、またはbigquery.datasets.setIamPolicy権限を付与する別のロールが必要です。
サービス アカウントの場合
- サービス アカウントには、アクセスする必要がある特定のテーブルまたはデータセットに対する BigQuery データ閲覧者(
roles/bigquery.dataViewer)ロールが少なくとも付与されている必要があります。 - カスタムクエリ: データソースがカスタムクエリを使用する場合、サービス アカウントには、データを含む Google Cloud プロジェクトに対する BigQuery ジョブユーザー(
roles/bigquery.jobUser)ロールも付与する必要があります。
設定の手順
BigQuery データへのアクセスを提供するサービス アカウントを設定する手順は次のとおりです。
- データポータル サービス エージェントを取得する。このステップでは、次のステップで使用できるように、サービス エージェントのメールアドレスをコピーします。このアドレスは、データポータルによって自動的に作成されます。
- データポータル用のサービス アカウントを作成します。このステップでは、データにアクセスする非ユーザーを作成します。
- データポータル サービス エージェントにサービス アカウントへのアクセスを許可する。このステップでは、サービス アカウントに必要なロールをサービス エージェントに付与します。
- ユーザーロールを付与する。このステップでは、サービス アカウントの認証情報を使用するデータソースを作成できるように、必要なロールをユーザーに付与します。
- サービス アカウントで BigQuery のデータにアクセスできるようにします。このステップでは、サービス アカウントに BigQuery のテーブルまたはデータセットにアクセスするために必要なロールを付与します。
ステップ 1: データポータル サービス エージェントを取得する
サービス アカウントにデータへのアクセスを許可するには、組織のデータポータル サービス エージェントを指定する必要があります。サービス エージェントは、データポータルのヘルプページから取得できます。
- データポータル サービス エージェントのヘルプページに移動します。
- そのページに表示されるサービス エージェントのメールアドレスをコピーします。
ステップ 2: データポータル用のサービス アカウントを作成する
サービス アカウントの作成手順については、Google Cloud IAM ドキュメントをご覧ください。サービス アカウントは、 Google Cloud コンソールまたは Cloud Shell コマンドラインを使用して作成できます。
コンソール
- Google Cloud コンソールで、[サービス アカウントの作成] ページに移動します。
- プロジェクトを選択します。
- Google Cloud コンソールに表示するサービス アカウント名を入力します。
この名前に基づいて、 Google Cloud コンソールでサービス アカウント ID が生成されます。必要に応じて ID を編集してください。後で ID を変更することはできません。
- (省略可)サービス アカウントの説明を入力します。
- [作成して続行] をクリックします。
- [権限] で、データポータルで接続するデータを含むプロジェクトに対する [BigQuery ジョブユーザー] の IAM ロールをサービス アカウントに付与します。なお、これは、サービス アカウントを作成したプロジェクトとは異なる場合があります。
- [続行] をクリックします。
- [サービス アカウント ユーザーロール] フィールドに、このサービス アカウントを使ってデータソースの認証情報を提供できるユーザーを追加します。ユーザーを追加する準備ができていない場合は、ユーザーロールを付与するの手順に沿って後で追加できます。
- [完了] をクリックしてサービス アカウントを保存し、プロジェクトのサービス アカウントのリストのページに戻ります。
gcloud
サービス アカウントの作成と管理の Cloud Shell に記載された一般的な手順を行います。
- Cloud Shell を開きます。
- 必要に応じてプロジェクトを選択します。
- サービス アカウントを作成するには、gcloud iam service-accounts create コマンドを実行します。任意のアカウント名、説明、表示名を使用できます。
例:
gcloud iam service-accounts create looker-studio-service-account \ --description="Use for Data Studio access to BigQuery" \ --display-name="LS_BQ"
-
データポータルで使用する Google Cloud プロジェクトの BigQuery データにアクセスするには、そのプロジェクトの
bigquery.jobs.create権限をサービス アカウントに付与します。この権限を付与するには、BigQuery ジョブユーザーの IAM ロールを付与します。また、データポータルで使用するプロジェクトまたはデータセットに対するサービス アカウントに、
bigquery.tables.getDataとbigquery.tables.getの権限を付与します。これらの権限を付与するには、BigQuery データ閲覧者のロール(roles/bigquery.dataViewer)を付与します。これらのロールを付与するには、gcloud projects add-iam-policy-binding コマンドを実行します。次の例では、PROJECT_ID をプロジェクト ID に置き換えます。
例: BigQuery ジョブユーザーのロールを付与する
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:looker-studio-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/bigquery.jobUser"
例: BigQuery データ閲覧者のロールを付与する
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:looker-studio-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/bigquery.dataViewer"
ステップ 3: データポータル サービス エージェントにサービス アカウントへのアクセスを許可する
データポータル サービス エージェントにサービス アカウントを使用してデータにアクセスできるようにするには、サービス エージェントにサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与します。
コンソール
- Google Cloud コンソールのサービス アカウントのリストに戻ります。
- 作成した新しいデータポータル サービス アカウントをリスト内でクリックして選択します。
- [アクセス権を持つプリンシパル] をクリックします。
- person_add [アクセス権を付与] をクリックします。
- [
PROJECT_IDにプリンシパルを追加する] で、(上記のステップ 1 でコピーした)データポータル サービス エージェントのメールアドレスを [新しいプリンシパル] ボックスに貼り付けます。サービス エージェントのアドレスは次のようになります。 ORG-ID は、 Google Cloud 組織 ID に置き換えます。service-org-ORG-ID@gcp-sa-datastudio.iam.gserviceaccount.com - サービス エージェントに
iam.serviceAccounts.getAccessToken権限を付与するロールを選択します。たとえば、サービス アカウント トークン作成者のロールを使用できますが、この権限を付与する任意のカスタムロールも使用できます。 - [保存] をクリックします。
gcloud
gcloud iam service-accounts add-iam-policy-binding コマンドを実行します。次の例では、ORG_ID を組織の ID に置き換えます。
例:
gcloud iam service-accounts add-iam-policy-binding looker-studio-service-account@PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:service-org-ORG_ID@gcp-sa-datastudio.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
ステップ 4: ユーザーロールを付与する
データソースを作成または編集するデータポータルのユーザーには、サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)など、iam.serviceAccounts.actAs 権限を含むロールを付与する必要があります。このロールは、プロジェクトまたは個別のサービス アカウントに付与できますが、サービス アカウントにのみ付与することをおすすめします。手順については、サービス アカウントの権限借用を管理するをご覧ください。
サービス エージェント以外のユーザーにはサービス アカウント トークン作成者のロールは付与しないことをおすすめします。これはデータポータルでは必要ありません。
コンソール
- コンソールのサービス アカウントのリストに移動します。
- データポータル サービス アカウントをリスト内でクリックして選択します。
- [アクセス権を持つプリンシパル] をクリックします。
- person_add [アクセス権を付与] をクリックします。
- [サービス アカウントのプリンシパルとロールを追加] で、ユーザーのメールアドレスを [新しいプリンシパル] ボックスに入力します。
- サービス アカウント ユーザーのロールを選択します。
- [保存] をクリックします。
gcloud
サービス アカウント ユーザーのロールを付与するには、gcloud projects add-iam-policy-binding コマンドを実行します。次の例では、PROJECT_ID はプロジェクト ID に、USER_EMAIL は 1 つ以上の有効なメールアドレスに置き換えます(複数のメールアドレスを指定する場合はカンマで区切ります)。
例:
gcloud iam service-accounts add-iam-policy-binding looker-studio-service-account@PROJECT_ID.iam.gserviceaccount.com \ --member="user:USER_EMAIL" \ --role="roles/iam.serviceAccountUser"
ステップ 5: サービス アカウントで BigQuery のデータにアクセスできるようにする
データポータルにデータへのアクセスを許可するには、テーブルレベルまたはデータセット レベルでサービス アカウントに [BigQuery データ閲覧者] のロールを付与します。プロジェクト レベルでサービス アカウントのアクセス権を付与することはおすすめしません。
この手順を完了するには、前述のステップ 1. データポータル サービス エージェントを取得するで説明したように、データポータル サービス エージェントのメールアドレスをコピーし、指示されたときに [プリンシパルを追加] ダイアログに貼り付けられるようにします。
コンソール
テーブルへのアクセス権を付与するには:
- ステップ 2: データポータル用のサービス アカウントを作成するで説明したように、データポータル サービス アカウントをコピーします。
- Google Cloud コンソールのサービス アカウントのリストに移動します。
- BigQuery に移動して、プロジェクトを選択します。
- [データセット] [データセット] をクリックし、データセットを選択します。
- テーブルを選択します。
- ツールバーで、[person_add 共有] メニューをクリックし、[共有] をクリックします。
- [共有権限] パネルで、person_add [プリンシパルを追加] をクリックします。
- [新しいプリンシパル] ボックスに、データポータル サービス エージェントのメールアドレスを貼り付けます。
- [BigQuery データ閲覧者] のロールを選択します。
- [保存] をクリックします。
データセットへのアクセス権を付与するには:
- ステップ 2: データポータル用のサービス アカウントを作成するで説明したように、データポータル サービス アカウントをコピーします。
- Google Cloud コンソールのサービス アカウントのリストに移動します。
- BigQuery に移動して、プロジェクトを選択します。
- [データセット] データセットをクリックし、データセットを選択します。
- その他アイコン(more_vert)[アクション] chevron_forward [共有] chevron_forward [権限の管理] をクリックします。
- [共有権限] パネルで、person_add [プリンシパルを追加] をクリックします。
- [新しいプリンシパル] ボックスに、データポータル サービス エージェントのメールアドレスを貼り付けます。
- [BigQuery データ閲覧者] のロールを選択します。
- [保存] をクリックします。
gcloud
Google Cloud コンソールの手順に沿ってデータへのアクセス権を付与することをおすすめします。bq コマンドライン ツールを使用してデータへのアクセス権を付与するには、BigQuery ドキュメントの
データセットへのアクセスの制御をご覧ください。
データポータルのユーザーにデータポータルのサービス アカウントを提供する
データポータルを使用するユーザーは、データソースの作成時に使用するサービス アカウントを把握している必要があります。利用可能なサービス アカウントのリストをデータポータル内から確認することはできないため、組織のドキュメント、社内ウェブサイト、またはメールでこの情報を提供する必要があります。
サービス アカウントの認証情報を使用するデータソースを作成する
データポータル ユーザーがサービス アカウントの認証情報を使用するデータソースを作成するには、他のデータの認証情報の種類向けの手順と同じ基本的な手順を行います。
- BigQuery データソースを作成または編集します。
- ツールバーで [データの認証情報] をクリックします。
- [サービス アカウント認証情報] を選択します。
- ボックスにサービス アカウントのメールアドレスを入力します。
- [更新] をクリックします。
サービス アカウントの認証情報を使用したデータソースを編集する
ユーザーがサービス アカウントの認証情報を使用したデータソースを編集すると、データポータルは、ユーザーがそのサービス アカウントの権限を持っているかどうかをチェックします。権限を持っていない場合、データソースでは、そのユーザーの認証情報を使用するよう設定が切り替わります。
サービス アカウントを使用してデータにアクセスしたユーザーを確認する
Google Cloud コンソールでサービス アカウントの監査ログを確認できます。サービス アカウントの監査ログを受信するには、データアクセス アクティビティの IAM 監査ログを有効にする必要があります。
サービス アカウントのシナリオの例
自社のデータポータル ユーザーが自国の子会社のデータにのみアクセスできるようにするとします。その場合、解決策としては、国ごとにサービス アカウントを作成し、その国のデータポータル ユーザーにのみ、サービス アカウントとして機能するための権限を付与します。
設定例
この例では、英国、フランス、ドイツ向けに 3 つのサービス アカウントを作成します。次に、サービス アカウントを使用するデータソースを作成できるようにするサービス エージェントと任意のユーザーをプリンシパルとして割り当てます。また、それぞれに適切なロールを割り当てます。
英国のサービス アカウント
service-account-1@example-org-uk-example-project.iam.gserviceaccount.com
英国のプリンシパル
| プリンシパル | ロール |
|
サービス エージェントです。 |
Service Account Token Creator |
| ユーザー 1 | Service Account User |
| ユーザー 2 | Service Account User |
フランスのサービス アカウント
service-account-1@example-org-fr-example-project.iam.gserviceaccount.com
フランスのプリンシパル
| プリンシパル | ロール |
|
サービス エージェントです。 |
Service Account Token Creator |
| ユーザー 3 | Service Account User |
| ユーザー 4 | Service Account User |
ドイツのサービス アカウント
service-account-1@example-org-de-example-project.iam.gserviceaccount.com
ドイツのプリンシパル
| プリンシパル | ロール |
|
サービス エージェントです。 |
Service Account Token Creator |
| ユーザー 5 | Service Account User |
| ユーザー 6 | Service Account User |
エラー
このセクションでは、データポータルのデータソース作成者とレポート閲覧者がサービス アカウントを使用しようとした際に表示されるエラーについて説明します。ほとんどの場合、これらのエラーの根本原因は、サービス アカウントの設定が間違っているか不完全であることです。
サービス エージェントのロールが指定されていない
メッセージ
|
原因サービス エージェントにサービス アカウント トークン作成者 のロール(または |
解決策サービス エージェントにサービス アカウント トークン作成者 のロールを付与します。 |
データにアクセスできない
メッセージこのサービス アカウントは基盤データセットにアクセスできません。 |
原因
|
解決策の
|
ユーザーロールが割り当てられていない
メッセージこのサービス アカウントを使用する権限がありません。 |
原因ユーザーは、サービス アカウント ユーザーのロールを持つプリンシパルとしてサービス アカウントに追加されていません。 |
解決策のサービス アカウントのサービス アカウント ユーザーのロールをユーザーに付与します。 |
アカウントでサービス エージェントを利用できない
メッセージ
|
原因ユーザーは、サービス アカウントで管理されているデータに標準の(一般ユーザー向け)Google アカウントからアクセスしようとしています。 |
解決策のGoogle Workspace アカウントまたは Cloud Identity アカウントを使用してデータにアクセスします。 |
認証情報のダイアログでサービス エージェントを使用できない
メッセージデータポータルのサービス エージェントはデータに直接アクセスできません。代わりにサービス アカウントを使用してください。 |
解決策のサービス エージェントとサービス アカウントは異なります。認証情報のダイアログでサービス アカウントを入力します。使用可能なサービス アカウントのリストは、 Google Cloud コンソールまたは Cloud Shell で確認できます。 コンソール
gcloud
例: |
上限
- サービス アカウントの認証情報は、BigQuery データソースでのみ使用できます。サービス アカウントには IAM の上限が適用されます。
- サービス アカウントの権限に対する変更がデータポータルで反映されるまでに数分かかることがあります。
- 送信日時を設定したメール配信とアラートは、VPC Service Controls で IP ベースのアクセスレベルを使用して保護されているデータでは機能しません(受信者がレポートを表示するときに、データポータルはメール受信者の IP アドレスを渡しません)。