Lakehouse Iceberg REST カタログ テーブルの ACL を管理する

Lakehouse for Apache Iceberg は、 Lakehouse ランタイム カタログを使用する Cloud Storage 内の Apache Iceberg テーブルに対して、テーブルレベルのアクセス制御をサポートしています。

Lakehouse ランタイム カタログはテーブル メタデータを管理し、Identity and Access Management(IAM)ポリシーは権限を定義します。gcloud CLI には、これらの IAM ポリシーを取得して設定するために必要なコマンドが用意されています。

始める前に

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

  2. BigLake API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    API の有効化

  3. Google Cloud SDK をインストールして初期化します。
  4. 既存の Apache Iceberg REST カタログのエンドポイントと名前空間があることを確認します。
  5. 指定したカタログと名前空間に既存の Lakehouse Iceberg テーブルがあることを確認します。

必要なロール

Iceberg テーブルのアクセス制御リスト(ACL)を管理するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

  • すべて: プロジェクトに対する BigLake 管理者(roles/biglake.admin)

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

仕組み

IAM ポリシーは、リソースに対する特定のロールと権限を持つプリンシパルを定義します。これらのポリシーを取得して設定することで、リソースへのアクセスを管理できます。

関連する IAM ロール

次の一般的な IAM ロールを Lakehouse リソースに適用できます。

  • roles/biglake.admin: Lakehouse リソースに対する完全な制御を提供します。
  • roles/biglake.user: プリンシパルがテーブルデータの読み取りと書き込みなど、Lakehouse リソースを使用できるようにします。
  • roles/biglake.viewer: プリンシパルが Lakehouse リソースを表示し、テーブルデータを読み取れるようにします。

ベスト プラクティス

  • 最小権限: ユーザーと サービス アカウントに必要な権限のみを付与します。
  • Etag を使用する: 意図しない上書きを避けるため、set-iam-policy を使用する場合は、最近の get-iam-policy 呼び出しの etag を常にポリシー ファイルに含めます。
  • 監査ロギング: IAM ポリシーの変更を追跡できるように、Cloud Audit Logs が有効になっていることを確認します。
  • バージョン管理: ポリシー ファイルをバージョン管理システムに保存します。

テーブルに ACL ロールを適用する

次のセクションでは、テーブルに ACL を適用する方法について説明します。

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 カタログ エンドポイントの名前。
    • 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 形式でローカル ポリシー ファイルを作成します。ポリシー ファイルには、バインディングと etag が含まれている必要があります。etag 値は、変更の上書きを防ぐためにオプティミスティック同時実行制御を提供します。現在の etag を取得するには、最初に get-iam-policy コマンドを実行します。

    次の例は、policy.json という名前のポリシー ファイルを示しています。

    {
      "bindings": [
        {
          "role": "roles/biglake.viewer",
          "members": [
            "user:test-user@example.com"
          ]
        },
        {
          "role": "roles/biglake.user",
          "members": [
            "user:someone@example.com"
          ]
        }
      ],
      "etag": "BwYXa9UuR8w=",
      "version": 3
    }
    
  2. ポリシーを設定するには、次のコマンドを実行します。

    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 カタログ エンドポイントの名前。
    • NAMESPACE_NAME: カタログ内の名前空間の名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のステップ