データポータル用に Google Cloud サービス アカウントを設定する

データポータルでは、オーナーの認証情報を使ってアクセス権を委任したり、閲覧者の認証情報を使って個々のレポート閲覧者にデータへのアクセス権を要求したりする代わりに、サービス アカウントを使ってデータにアクセスできます。サービス アカウントは人間ではないユーザーを表す特別なタイプの Google アカウントで、Google API やサービスのデータにアクセスして認証を受けることができます。

サービス アカウントについて、さらに学習する。

データポータルでサービス アカウントを使用するメリット

個々のユーザーの認証情報ではなくサービス アカウントを使用すると、以下のようなメリットがあります。

  • サービス アカウントの認証情報を使用しているデータソースは、作成者が退職した場合でも悪影響を受けることはありません。
  • サービス アカウントの認証情報を使用すると、デバイス ポリシーを使用する 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 データへのアクセスを提供するサービス アカウントを設定する手順は次のとおりです。

  1. データポータル サービス エージェントを取得します。この手順では、次の手順で使用できるように、サービス エージェントのメールアドレスをコピーします。このアドレスはデータポータルによって自動的に作成されます。
  2. データポータル用のサービス アカウントを作成します。このステップでは、データにアクセスする非ユーザーを作成します。
  3. データポータル サービス エージェントにサービス アカウントへのアクセスを許可します。この手順では、サービス アカウントに必要なロールをサービス エージェントに付与します。
  4. ユーザーロールを付与する。このステップでは、サービス アカウントの認証情報を使用するデータソースを作成できるように、必要なロールをユーザーに付与します。
  5. サービス アカウントで BigQuery のデータにアクセスできるようにします。このステップでは、サービス アカウントに BigQuery テーブルまたはデータセットにアクセスするために必要なロールを付与します。

ステップ 1: データポータル サービス エージェントを取得する

サービス アカウントにデータへのアクセスを許可するには、組織のデータポータル サービス エージェントを指定する必要があります。サービス エージェントは、データポータルのヘルプページから取得できます。

  1. データポータル サービス エージェントのヘルプページに移動します。
  2. そのページに表示されるサービス エージェントのメールアドレスをコピーします。

ステップ 2: データポータル用のサービス アカウントを作成する

サービス アカウントの作成手順については、Google Cloud IAM ドキュメントをご覧ください。サービス アカウントは、 Google Cloud コンソールまたは Cloud Shell コマンドラインを使って作成できます。

コンソール

  1. Google Cloud コンソールで、[サービス アカウントの作成] ページに移動します。

    [サービス アカウントの作成] に移動

  2. プロジェクトを選択します。
  3. Google Cloud コンソールに表示するサービス アカウント名を入力します。

    この名前に基づいて、 Google Cloud コンソールでサービス アカウント ID が生成されます。必要に応じて ID を編集してください。後で ID を変更することはできません。

  4. (省略可)サービス アカウントの説明を入力します。
  5. [作成して続行] をクリックします。
  6. [権限] で、データポータルで接続するデータを含むプロジェクトに対する [BigQuery ジョブユーザー] の IAM ロールをサービス アカウントに付与します。なお、これは、サービス アカウントを作成したプロジェクトとは異なる場合があります。
  7. [続行] をクリックします。
  8. [サービス アカウント ユーザーロール] フィールドに、このサービス アカウントを使ってデータソースの認証情報を提供できるユーザーを追加します。ユーザーを追加する準備ができていない場合は、ユーザーロールを付与するの手順に沿って後で追加できます。
  9. [完了] をクリックしてサービス アカウントを保存し、プロジェクトのサービス アカウントのリストのページに戻ります。

gcloud

サービス アカウントの作成と管理の Cloud Shell に記載された一般的な手順を行います。

  1. Cloud Shell を開きます。
  2. 必要に応じてプロジェクトを選択します。
  3. サービス アカウントを作成するには、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"
  1. データポータルで使用する 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)をサービス エージェントに付与します。

コンソール

  1. Google Cloud コンソールのサービス アカウントのリストに戻ります。
  2. 作成した新しいデータポータル サービス アカウントをリスト内でクリックして選択します。
  3. [アクセス権を持つプリンシパル] をクリックします。
  4. [person_addアクセスを許可] をクリックします。
  5. [PROJECT_ID にプリンシパルを追加する] で、(上記のステップ 1 でコピーした)データポータル サービス エージェントのメールアドレスを [新しいプリンシパル] ボックスに貼り付けます。サービス エージェントのアドレスは次のようになります。
        service-org-ORG-ID@gcp-sa-datastudio.iam.gserviceaccount.com
    
    ORG-ID は実際の Google Cloud 組織 ID に置き換えます。
  6. サービス エージェントに iam.serviceAccounts.getAccessToken 権限を付与するロールを選択します。たとえば、サービス アカウント トークン作成者のロールだけでなく、この権限を付与する任意のカスタムロールも使用できます。
  7. [保存] をクリックします。

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: ユーザーロールを付与する

データソースを作成または編集するデータポータルのユーザーには、iam.serviceAccounts.actAs 権限を含むロール(サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)など)を付与する必要があります。このロールはプロジェクトまたは個々のサービス アカウントに付与できますが、サービス アカウントにのみ付与することをおすすめします。手順については、サービス アカウントの権限借用の管理をご覧ください。

サービス エージェント以外のユーザーにはサービス アカウント トークン作成者のロールは付与しないことをおすすめします。これはデータポータルでは必要ありません。

コンソール

  1. コンソールのサービス アカウントのリストに移動します。
  2. データポータル サービス アカウントをリスト内でクリックして選択します。
  3. [アクセス権を持つプリンシパル] をクリックします。
  4. [ person_add アクセス権を付与] をクリックします。
  5. [サービス アカウントのプリンシパルとロールを追加] で、ユーザーのメールアドレスを [新しいプリンシパル] ボックスに入力します。
  6. サービス アカウント ユーザーのロールを選択します。
  7. [保存] をクリックします。

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 データ閲覧者] のロールを付与します。サービス アカウントにアクセス権をプロジェクト レベルで付与することはおすすめしません。

この手順を完了するには、前述のステップ 2 で説明したように、データポータル サービス アカウントのメールアドレスをコピーします。データポータル サービス アカウントを作成します。これにより、指示されたときに [プリンシパルを追加] ダイアログに貼り付けることができます。

コンソール

テーブルへのアクセス権を付与するには:

  1. ステップ 2: データポータル用のサービス アカウントを作成するで説明したように、データポータル サービス アカウントをコピーします。
  2. BigQuery に移動して、プロジェクトを選択します。
  3. [データセット] [データセット] をクリックし、データセットを選択します。
  4. テーブルを選択します。
  5. ツールバーで、[person_add 共有] メニューをクリックし、[共有] をクリックします。
  6. [共有権限] パネルで、person_add [プリンシパルを追加] をクリックします。
  7. [新しいプリンシパル] ボックスに、データポータル サービス アカウントのメールアドレスを貼り付けます。
  8. [BigQuery データ閲覧者] のロールを選択します。
  9. [保存] をクリックします。

データセットへのアクセス権を付与するには:

  1. ステップ 2: データポータル用のサービス アカウントを作成するで説明したように、データポータル サービス アカウントをコピーします。
  2. BigQuery に移動して、プロジェクトを選択します。
  3. [データセット] データセットをクリックし、データセットを選択します。
  4. [more_vert] [操作] chevron_forward [共有] chevron_forward [権限を管理] をクリックします。
  5. [共有権限] パネルで、person_add [プリンシパルを追加] をクリックします。
  6. [新しいプリンシパル] ボックスに、データポータル サービス アカウントのメールアドレスを貼り付けます。
  7. [BigQuery データ閲覧者] のロールを選択します。
  8. [保存] をクリックします。

gcloud

Google Cloud コンソールの手順に沿ってデータへのアクセス権を付与することをおすすめします。bq コマンドライン ツールを使用してデータへのアクセス権を付与するには、BigQuery ドキュメントの データセットへのアクセスの制御をご覧ください。

データポータルのユーザーにデータポータルのサービス アカウントを提供する

データポータルを使用するユーザーは、データソースの作成時に使用するサービス アカウントを把握している必要があります。利用可能なサービス アカウントのリストをデータポータル内から確認することはできないため、組織のドキュメント、社内ウェブサイト、またはメールでこの情報を提供する必要があります。

サービス アカウントの認証情報を使用するデータソースを作成する

データポータル ユーザーがサービス アカウントの認証情報を使用するデータソースを作成するには、他のデータの認証情報の種類向けの手順と同じ基本的な手順を行います。

  1. BigQuery データソースを作成または編集します。
  2. ツールバーで [データの認証情報] をクリックします。
  3. [サービス アカウント認証情報] を選択します。
  4. ボックスにサービス アカウントのメールアドレスを入力します。
  5. [更新] をクリックします。

サービス アカウントの認証情報を使用したデータソースを編集する

ユーザーがサービス アカウントの認証情報を使用したデータソースを編集すると、データポータルは、ユーザーがそのサービス アカウントの権限を持っているかどうかをチェックします。権限を持っていない場合、そのユーザーの認証情報を使用するようデータソースの設定が切り替わります。

サービス アカウントを使用してデータにアクセスしたユーザーを確認する

Google Cloud コンソールでサービス アカウントの監査ログを確認できます。サービス アカウントの監査ログを受信するには、データアクセス アクティビティの IAM 監査ログを有効にする必要があります。

サービス アカウントのシナリオの例

自社のデータポータル ユーザーが自国の子会社のデータにのみアクセスできるようにするとします。その場合、ソリューションとしては、国ごとにサービス アカウントを作成し、その国のデータポータル ユーザーにのみ、サービス アカウントとして機能するための権限を付与します。

設定例

この例では、英国、フランス、ドイツ向けに 3 つのサービス アカウントを作成します。次に、サービス アカウントを使用するデータソースを作成できるようにするサービス エージェントと任意のユーザーをプリンシパルとして割り当てます。また、それぞれに適切なロールを割り当てます。

英国のサービス アカウント

service-account-1@example-org-uk-example-project.iam.gserviceaccount.com

英国のプリンシパル

プリンシパル ロール

service-org-12345@gcp-sa-datastudio.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-org-12345@gcp-sa-datastudio.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-org-12345@gcp-sa-datastudio.iam.gserviceaccount.com

サービス エージェントです。

Service Account Token Creator
ユーザー 5 Service Account User
ユーザー 6 Service Account User

エラー

このセクションでは、データポータルのデータソース作成者とレポート閲覧者がサービス アカウントを使用しようとした際に表示されるエラーについて説明します。ほとんどの場合、これらのエラーの根本原因は、サービス アカウントの設定が間違っているか不完全であることです。

サービス エージェントのロールが指定されていない

メッセージ

  • データポータルのサービス エージェントには、このサービスの iam.serviceAccounts.getAccessToken 権限がありません。
  • このデータソースのサービス アカウントで使用されているサービス エージェントには、「サービス アカウント トークン作成者」のロールがありません。

原因

サービス エージェントにサービス アカウント トークン作成者 のロール(または iam.serviceAccounts.getAccessToken 権限を含む別のロール)が付与されていません。

解決策

サービス エージェントにサービス アカウント トークン作成者 のロールを付与します。

データにアクセスできない

メッセージ

このサービス アカウントは基盤データセットにアクセスできません。

原因

  • プロジェクトのデータへのアクセス権がサービス アカウントに付与されていません。
  • 課金プロジェクトが、サービス アカウントがアクセスできないプロジェクトに接続されている。
  • データソースでカスタムクエリが使用されているが、サービス アカウントにプロジェクトの BigQuery ジョブユーザーのロールがない。

解決策の

  • 基になるテーブル、データセット、プロジェクトのサービス アカウントには、少なくとも BigQuery データ閲覧者のロールを付与します。
  • カスタムクエリを使用している場合は、クエリが実行されるプロジェクトのサービス アカウントに BigQuery ジョブユーザーのロールも付与します。

ユーザーロールが割り当てられていない

メッセージ

このサービス アカウントを使用する権限がありません。

原因

ユーザーは、サービス アカウント ユーザーのロールを持つプリンシパルとしてサービス アカウントに追加されていません。

解決策の

サービス アカウントのサービス アカウント ユーザーのロールをユーザーに付与します。

アカウントでサービス エージェントを利用できない

メッセージ

  • このアカウントではサービス エージェントを生成できません。Google Workspace または Cloud Identity の管理対象アカウントでもう一度お試しください。
  • サービス エージェントの認証情報は、Google Workspace または Cloud Identity の管理対象組織でのみ使用できます。この機能を使用するには、別のアカウントを使用してください。

原因

ユーザーは、サービス アカウントで管理されているデータに標準の(一般ユーザー向け)Google アカウントからアクセスしようとしています。

解決策の

Google Workspace アカウントまたは Cloud Identity アカウントを使用してデータにアクセスします。

認証情報のダイアログでサービス エージェントを使用できない

メッセージ

データポータルのサービス エージェントはデータに直接アクセスできません。サービス アカウントを使用してください。

解決策の

サービス エージェントとサービス アカウントは異なります。認証情報のダイアログでサービス アカウントを入力し、使用可能なサービス アカウントのリストは、 Google Cloud コンソールまたは Cloud Shell を使用して確認できます。

コンソール

  1. [Google Cloud Platform] > [IAM と管理] > [サービス アカウント] のページに移動します。
  2. 必要に応じてプロジェクトを選択します。
  3. [プロジェクトのサービス アカウント] ページで、データポータルで BigQuery データへのアクセスに使用するサービス アカウントを見つけます。
  4. そのアカウントのメールアドレスをコピーします。

gcloud

  1. Cloud Shell を開きます。
  2. 必要に応じてプロジェクトを選択します。
  3. アクセス権を持つサービス アカウントを一覧表示するには、gcloud iam service-accounts list コマンドを実行します。

例:

gcloud iam service-accounts list

サービス アカウント認証情報の注意事項と上限

  • サービス アカウントの認証情報は、BigQuery データソースでのみ使用できます。サービス アカウントには IAM の制限事項が適用されます。
  • サービス アカウントの権限に対する変更がデータポータルで反映されるまでに数分かかることがあります。
  • データポータルは、動的 IP アドレスとプロジェクト割り当てを使用して Google 管理のインフラストラクチャで実行されるため、静的 IP 許可リストまたはプロジェクト ルールを使用して VPC Service Controls 境界を構成することはできません。VPC Service Controls の境界を介してデータポータルにアクセスできるようにするには、アクセスレベルまたは上り(内向き)ルールと下り(外向き)ルールのプリンシパルとしてサービス アカウントを追加する必要があります。