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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. BigQuery and Dataform API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. BigQuery and Dataform API を有効にします。

    API を有効にする

テーブルまたはビューに 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 ステートメントに置き換えます。

    Removing the `GRANT` statement without adding the `REVOKE` statement
    does not revoke access.
    
  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" ファイルを作成します。

1 つの 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 ステートメントを削除します。

次のステップ