管理 Lakehouse Iceberg REST ACL

Lakehouse for Apache Iceberg 支持对 Cloud Storage 中使用 Lakehouse 运行时目录的 Apache Iceberg 表进行目录级、命名空间级和表级访问权限控制。

数据湖仓运行时目录用于管理元数据,而 Identity and Access Management (IAM) 政策用于定义权限。您可以使用Google Cloud 控制台或 gcloud CLI 来获取和设置这些 IAM 政策。

准备工作

  1. 验证是否已为您的 Google Cloud 项目启用结算功能

  2. 启用 BigLake API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    启用 API

  3. 安装并初始化 Google Cloud SDK。
  4. 验证您是否已拥有 Apache Iceberg REST Catalog 端点和命名空间。
  5. 验证您在指定目录和命名空间中是否已存在 Lakehouse Iceberg 表。

所需的角色

如需获得管理 Iceberg 目录、命名空间和表的访问控制列表 (ACL) 所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 所有用户: 项目的 BigLake Admin (roles/biglake.admin) 角色

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

工作原理

IAM 政策定义了哪些主账号对资源拥有特定角色和权限。您可以通过获取和设置这些政策来管理对资源的访问权限。

IAM 角色的范围

您可以在资源层次结构的不同级层授予 IAM 角色:

  • 项目级:授予对项目中所有 Lakehouse 资源的访问权限。
  • 目录级:授予对属于指定目录的资源的访问权限。
  • 命名空间级:授予对属于指定命名空间的资源的访问权限。
  • 表级:仅授予对指定表的访问权限。

相关 IAM 角色

以下列表显示了您可以应用于 Lakehouse 资源的一些常见 IAM 角色。如需查看可用角色及其关联权限的完整列表,请参阅 Lakehouse IAM 角色

  • roles/biglake.admin:提供对所有 Lakehouse 资源的完整访问权限。
  • roles/biglake.editor:提供对所有 Lakehouse 资源的读写权限。
  • roles/biglake.viewer:提供对所有 Lakehouse 资源的只读访问权限。
  • roles/biglake.metadataViewer:提供对所有 Lakehouse 资源的只读元数据访问权限。

最佳做法

  • 最小权限:仅向用户和服务账号授予必要的权限。
  • 使用 ETag:使用 set-iam-policy 时,请务必在政策文件中包含最近一次 get-iam-policy 调用的 etag,以避免意外覆盖。
  • 审核日志记录:确保已启用 Cloud Audit Logs 以跟踪对 IAM 政策的更改。
  • 版本控制:将政策文件存储在版本控制系统中。

将 ACL 角色应用于目录

以下部分介绍了如何将 ACL 应用于目录。

gcloud

获取 IAM 政策

如需查看 Lakehouse Iceberg 目录的当前 IAM 政策,请使用 gcloud alpha biglake iceberg catalogs get-iam-policy 命令。

  1. 如需获取 IAM 政策,请运行以下命令:

    gcloud alpha biglake iceberg catalogs get-iam-policy CATALOG_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • PROJECT_ID: Google Cloud项目 ID。
  2. 该命令会以 YAML 格式输出 IAM 政策,其中显示了当前的角色绑定和成员。

设置 IAM 政策

如需更新 Lakehouse Iceberg 目录的 IAM 政策,请使用 gcloud alpha biglake iceberg catalogs set-iam-policy 命令。此命令使用包含要应用的政策的本地 JSON 或 YAML 文件。

  1. 创建 JSON 或 YAML 格式的本地政策文件。政策文件必须包含绑定和 etagetag 值提供乐观并发控制,以防止覆盖更改。如需获取当前的 etag,请先运行 get-iam-policy 命令。

    以下示例展示了一个名为 policy.json 的政策文件:

    {
      "bindings": [
        {
          "role": "roles/biglake.viewer",
          "members": [
            "user:test-user@example.com"
          ]
        },
        {
          "role": "roles/biglake.editor",
          "members": [
            "user:someone@example.com"
          ]
        }
      ],
      "etag": "BwYXa9UuR8w=",
      "version": 3
    }
    
  2. 如需设置 IAM 政策,请运行以下命令:

    gcloud alpha biglake iceberg catalogs set-iam-policy CATALOG_NAME POLICY_FILE \
        --project=PROJECT_ID
    

    替换以下内容:

    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • POLICY_FILE:本地政策文件的路径。
    • PROJECT_ID:您的 Google Cloud 项目 ID。

将 ACL 角色应用于命名空间

以下部分介绍了如何将 ACL 应用于命名空间。

Google Cloud 控制台不会显示或管理继承的 IAM 政策。

控制台

  1. 在 Google Cloud 控制台中,打开 Lakehouse 页面。

    前往 Lakehouse

  2. 选择现有目录,或者创建目录(如果您还没有目录)。

  3. 命名空间详细信息表格中,选择一个命名空间,然后展开菜单选项 ()。

  4. 点击管理权限

    系统随即会显示共享权限对话框。

  5. 点击添加主账号

  6. 新的主账号字段中,输入要为其分配角色的主账号。

  7. 选择角色部分,选择要分配给主账号的角色。

  8. 点击保存

  9. 点击关闭

gcloud

获取 IAM 政策

如需查看 Lakehouse Iceberg 命名空间中的当前 IAM 政策,请使用 gcloud alpha biglake iceberg namespaces get-iam-policy 命令。

  1. 如需获取 IAM 政策,请运行以下命令:

    gcloud alpha biglake iceberg namespaces get-iam-policy NAMESPACE_NAME \
        --catalog=CATALOG_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • NAMESPACE_NAME:目录中目标命名空间的名称。
    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • PROJECT_ID: Google Cloud项目 ID。
  2. 该命令会以 YAML 格式输出 IAM 政策,其中显示了当前的角色绑定和成员。

设置 IAM 政策

如需更新 Lakehouse Iceberg 命名空间中的 IAM 政策,请使用 gcloud alpha biglake iceberg namespaces set-iam-policy 命令。此命令使用包含要应用的政策的本地 JSON 或 YAML 文件。

  1. 创建 JSON 或 YAML 格式的本地政策文件。政策文件必须包含绑定和 etagetag 值提供乐观并发控制,以防止覆盖更改。如需获取当前的 etag,请先运行 get-iam-policy 命令。

    以下示例展示了一个名为 policy.json 的政策文件:

    {
      "bindings": [
        {
          "role": "roles/biglake.viewer",
          "members": [
            "user:test-user@example.com"
          ]
        },
        {
          "role": "roles/biglake.editor",
          "members": [
            "user:someone@example.com"
          ]
        }
      ],
      "etag": "BwYXa9UuR8w=",
      "version": 3
    }
    
  2. 如需设置 IAM 政策,请运行以下命令:

    gcloud alpha biglake iceberg namespaces set-iam-policy NAMESPACE_NAME POLICY_FILE \
        --catalog=CATALOG_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • NAMESPACE_NAME:目录中目标命名空间的名称。
    • POLICY_FILE:本地政策文件的路径。
    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • PROJECT_ID:您的 Google Cloud 项目 ID。

将 ACL 角色应用于表

下一部分将介绍如何将 ACL 应用于表。

Google Cloud 控制台不会显示或管理继承的 IAM 政策。

控制台

  1. 在 Google Cloud 控制台中,打开 Lakehouse 页面。

    前往 Lakehouse

  2. 选择现有目录,或者创建目录(如果您还没有目录)。

  3. 命名空间详情表中,点击包含相应表的命名空间的名称。

  4. 表详细信息页面上,选择一个表,然后展开菜单选项 ()。

  5. 点击管理权限

    系统随即会显示共享权限对话框。

  6. 点击添加主账号

  7. 新的主账号字段中,输入要为其分配角色的主账号。

  8. 选择角色部分,选择要分配给主账号的角色。

  9. 点击保存

  10. 点击关闭

gcloud

获取 IAM 政策

如需查看 Lakehouse Iceberg 表的当前 IAM 政策,请使用 gcloud biglake iceberg tables get-iam-policy 命令。

  1. 如需获取 IAM 政策,请运行以下命令:

    gcloud biglake iceberg tables get-iam-policy TABLE_NAME \
        --catalog=CATALOG_NAME \
        --namespace=NAMESPACE_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • TABLE_NAME:目标 Lakehouse Iceberg 表的名称。
    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • NAMESPACE_NAME:目录中命名空间的名称。
    • PROJECT_ID: Google Cloud项目 ID。
  2. 该命令会以 YAML 格式输出 IAM 政策,其中显示了当前的角色绑定和成员。

设置 IAM 政策

如需更新 Lakehouse Iceberg 表的 IAM 政策,请使用 gcloud biglake iceberg tables set-iam-policy 命令。此命令使用包含要应用的政策的本地 JSON 或 YAML 文件。

  1. 创建 JSON 或 YAML 格式的本地政策文件。政策文件必须包含绑定和 etagetag 值提供乐观并发控制,以防止覆盖更改。如需获取当前的 etag,请先运行 get-iam-policy 命令。

    以下示例展示了一个名为 policy.json 的政策文件:

    {
      "bindings": [
        {
          "role": "roles/biglake.viewer",
          "members": [
            "user:test-user@example.com"
          ]
        },
        {
          "role": "roles/biglake.editor",
          "members": [
            "user:someone@example.com"
          ]
        }
      ],
      "etag": "BwYXa9UuR8w=",
      "version": 3
    }
    
  2. 如需设置 IAM 政策,请运行以下命令:

    gcloud biglake iceberg tables set-iam-policy TABLE_NAME POLICY_FILE \
        --catalog=CATALOG_NAME \
        --namespace=NAMESPACE_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • TABLE_NAME:目标 Lakehouse Iceberg 表的名称。
    • POLICY_FILE:本地政策文件的路径。
    • CATALOG_NAME:Apache Iceberg REST Catalog 端点的名称。
    • NAMESPACE_NAME:目录中命名空间的名称。
    • PROJECT_ID:您的 Google Cloud 项目 ID。

后续步骤