使用 IAM 控制对各个表的访问权限

本文档介绍如何为各个 Dataform 表和视图授予和撤消 BigQuery Identity and Access Management (IAM) 角色。

Dataform 和 BigQuery 使用 IAM 进行访问权限控制。如需详细了解 IAM 中的 Dataform 角色和权限,请参阅使用 IAM 控制访问权限

Dataform 执行表或视图时,会在 BigQuery 中创建资源。在 Dataform 中开发期间,您可以向各个表和视图授予 BigQuery 角色,以便在执行后控制它们在 BigQuery 中的访问权限。

如需详细了解如何授予和撤消对资源的访问权限,请参阅授予对资源的访问权限

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 BigQuery and Dataform API。

    启用 API

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

    Go to project selector

  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. Files 窗格中,展开 definitions/ 目录。

  4. 选择您要授予访问权限的表或视图的 .sqlx 定义文件。

  5. 在文件中输入以下代码段:

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

    请替换以下内容:

    • ROLE_LIST:要授予的 BigQuery 角色或以英文逗号分隔的 BigQuery 角色列表。

    • RESOURCE_TYPETABLEVIEW

    • USER_LIST:向其授予相应角色的用户的逗号分隔列表。

      如需查看有效格式的列表,请参阅 user_list

  6. 可选:点击格式

  7. 执行表或视图。

  8. 如果您授予对增量表的访问权限,请在首次执行后从表定义文件中移除 GRANT 语句。

以下代码示例显示了在表上向用户授予的 BigQuery Viewer 角色:

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. Files 窗格中,展开 definitions/ 目录。

  4. 选择要撤消对其访问权限的表或视图的 .sqlx 定义文件。

  5. post_operations 代码块中,输入以下 REVOKE 语句:

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

    请替换以下内容:

    • ROLE_LIST:要撤消的 BigQuery 角色或以英文逗号分隔的 BigQuery 角色列表。
    • RESOURCE_TYPETABLEVIEW
    • 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 Viewer 角色:

config { type: "table" }

SELECT ...

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

统一管理表和视图的 BigQuery 角色

如需控制 BigQuery 对单个位置中各个表和视图的访问权限,您可以使用 GRANTREVOKE DCL 语句创建专用的 type: "operations" 文件。

如需在单个 type: "operations" 文件中管理 BigQuery 表访问权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Dataform 页面。

    转到 Dataform 页面

  2. 选择一个代码库,然后选择一个工作区。

  3. Files 窗格中,点击 definitions/ 旁边的 More 菜单。

  4. 点击创建文件

  5. 添加文件路径字段中,输入文件名,然后在 definitions/ 后添加 .sqlx。例如 definitions/table-access.sqlx

    文件名只能包含数字、字母、连字符和下划线。

  6. 点击创建文件

  7. Files 窗格中,展开 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_TYPETABLEVIEW
    • RESOURCE_NAME:表或视图的名称。
    • USER_LIST:向其授予或撤消相应角色的用户的逗号分隔列表。如需查看有效格式的列表,请参阅 user_list
  9. 根据需要添加 GRANTREVOKE 语句。

    1. 如需撤消文件的 GRANT 语句中授予的访问权限,请将 GRANT 语句替换为 REVOKE 语句。

      移除 GRANT 语句而不添加 REVOKE 语句不会撤消访问权限。

  10. 可选:点击格式

  11. 每次更新后执行该文件。

    1. 如果您授予或撤消了对增量表的访问权限,请在首次执行语句后从文件中移除 GRANTREVOKE 语句。

后续步骤