IAM を使用して個々のテーブルへのアクセスを制御する

このドキュメントでは、個別の Dataform テーブルとビューに対して BigQuery Identity and Access Management(IAM)ロールを付与または取り消す方法について説明します。

Dataform と BigQuery は、アクセス制御に IAM を使用します。IAM の Dataform ロールと権限の詳細については、IAM によるアクセスの制御をご覧ください。

Dataform は、テーブルまたはビューを実行すると、BigQuery にリソースを作成します。Dataform の開発中に、BigQuery のロールを個別のテーブルとビューに付与して、実行後に BigQuery でアクセスを制御できます。

リソースへのアクセス権の付与と取り消しについて詳しくは、リソースへのアクセス権の付与をご覧ください。

準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

テーブルまたはビューに BigQuery ロールを付与する

Dataform のテーブルまたはビューに BigQuery のロールを付与するには、GRANT DCL ステートメントを使用して post_operations ブロックを選択したテーブルまたはビューの .sqlx 定義ファイルに追加します。

選択したテーブルまたはビューに BigQuery のロールを付与するには、次の手順に沿って操作します。

  1. Google Cloud コンソールの [Dataform] ページに移動します。

    [Dataform] ページに移動

  2. リポジトリを選択し、ワークスペースを選択します。

  3. [ファイル] ペインで definitions/ ディレクトリを開きます。

  4. アクセス権を付与するテーブルまたはビューの .sqlx 定義ファイルを選択します。

  5. ファイルに次のコード スニペットを入力します。

    post_operations {
        GRANT "ROLE_LIST"
        ON "RESOURCE_TYPE" ${self()}
        TO "USER_LIST"
    }
    

    以下を置き換えます。

    • ROLE_LIST: 付与する BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。

    • RESOURCE_TYPE: TABLE または VIEW

    • USER_LIST: ロールが付与されているユーザーのカンマ区切りのリスト。

      有効な形式の一覧については、user_list をご覧ください。

  6. 省略可: [書式] をクリックします。

  7. テーブルまたはビューを実行します。

  8. 増分テーブルに対してアクセス権を付与した場合は、最初の実行後にテーブル定義ファイルから GRANT ステートメントを削除します。

次のコードサンプルは、ユーザーにテーブルに対して付与される BigQuery 閲覧者のロールを示しています。

config { type: "table" }

SELECT ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON TABLE ${self()}
  TO "user:222larabrown@gmail.com"
}

テーブルまたはビューから BigQuery ロールを取り消す

テーブルまたはビューから BigQuery のロールを取り消すには、REVOKE DCL ステートメントを使用して post_operations ブロックを選択したテーブルまたはビューの .sqlx 定義ファイルに追加します。

選択したテーブルまたはビューから BigQuery ロールを取り消す手順は次のとおりです。

  1. Google Cloud コンソールの [Dataform] ページに移動します。

    [Dataform] ページに移動

  2. リポジトリを選択し、ワークスペースを選択します。

  3. [ファイル] ペインで definitions/ ディレクトリを開きます。

  4. アクセス権を取り消すテーブルまたはビューの .sqlx 定義ファイルを選択します。

  5. post_operations ブロックで、次の REVOKE ステートメントを入力します。

        REVOKE "ROLE_LIST"
        ON "RESOURCE_TYPE" ${self()}
        TO "USER_LIST"
    

    以下を置き換えます。

    • ROLE_LIST: 取り消す BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。
    • RESOURCE_TYPE: TABLE または VIEW
    • USER_LIST: ロールを取り消す対象ユーザーのカンマ区切りのリスト。有効な形式の一覧については、user_list をご覧ください。
  6. ファイル内の GRANT ステートメントで付与されたアクセス権を取り消すには、GRANT ステートメントを REVOKE ステートメントに置き換えます。

  7. 省略可: [書式] をクリックします。

  8. テーブルまたはビューを実行します。

  9. 増分テーブルに対してアクセス権を取り消した場合は、最初の実行後にテーブル定義ファイルから REVOKE ステートメントを削除します。

次のサンプルコードは、ユーザーから取り消されたテーブルに対する BigQuery 閲覧者のロールを示しています。

config { type: "table" }

SELECT ...

post_operations {
  REVOKE `roles/bigquery.dataViewer`
  ON TABLE ${self()}
  FROM "user:222larabrown@gmail.com"
}

テーブルとビューの BigQuery のロールを集約的に管理する

1 つのロケーションの個別のテーブルとビューに対する BigQuery アクセスを制御するには、GRANT および REVOKE の DCL ステートメントを使用して専用の type: "operations" ファイルを作成します。

単一の type: "operations" ファイルで BigQuery テーブルへのアクセスを管理する手順は次のとおりです。

  1. Google Cloud コンソールの [Dataform] ページに移動します。

    [Dataform] ページに移動

  2. リポジトリを選択し、ワークスペースを選択します。

  3. [ファイル] ペインで、definitions/ の横にある [その他] メニューをクリックします。

  4. [ファイルを作成] をクリックします。

  5. [ファイルパスを追加] フィールドに、ファイルの名前の後に definitions/ の後に .sqlx を入力します。例: definitions/table-access.sqlx

    ファイル名 には数字、英字、ハイフン、アンダースコアのみを使用できます。

  6. [ファイルを作成] をクリックします。

  7. [ファイル] ペインで definitions/ ディレクトリを展開し、新しく作成されたファイルを選択します。

  8. ファイルに次のコード スニペットを入力します。

      config { type: "operations" }
    
      GRANT "ROLE_LIST"
      ON RESOURCE_TYPE RESOURCE_NAME
      TO "USER_LIST"
    
      REVOKE "ROLE_LIST"
      ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME
      TO "USER_LIST"
    

    以下を置き換えます。

    • ROLE_LIST: 付与または取り消しを行う BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。
    • RESOURCE_TYPE: TABLE または VIEW
    • RESOURCE_NAME: テーブルまたはビューの名前。
    • USER_LIST: ロールの付与または取り消しを行う対象ユーザーのカンマ区切りのリスト。有効な形式の一覧については、user_list をご覧ください。
  9. 必要に応じて、GRANT ステートメントと REVOKE ステートメントを追加します。

    1. ファイル内の GRANT ステートメントで付与されたアクセス権を取り消すには、GRANT ステートメントを REVOKE ステートメントに置き換えます。

      REVOKE ステートメントを追加せずに GRANT ステートメントを削除しても、アクセス権は取り消されません。

  10. 省略可: [書式] をクリックします。

  11. 更新するたびにファイルを実行します。

    1. 増分テーブルに対してアクセス権の付与または取り消しを行った場合は、ステートメントを最初に実行した後にファイルから GRANT ステートメントまたは REVOKE ステートメントを削除します。

次のステップ