Lakehouse Iceberg REST ACL を管理する

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

Lakehouse ランタイム カタログはメタデータを管理し、Identity and Access Management(IAM)ポリシーは権限を定義します。これらの IAM ポリシーを取得して設定するには、Google Cloud コンソールまたは gcloud CLI を使用します。

始める前に

  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 カタログのエンドポイントと Namespace があることを確認します。
  5. 指定したカタログと名前空間内に既存の Lakehouse Iceberg テーブルがあることを確認します。

必要なロール

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

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

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

仕組み

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

IAM ロールのスコープ

IAM ロールは、リソース階層のさまざまなレベルで付与できます。

  • プロジェクト レベル: プロジェクト内のすべての Lakehouse リソースへのアクセス権を付与します。
  • カタログレベル: 指定されたカタログに属するリソースへのアクセス権を付与します。
  • Namespace レベル: 指定された Namespace に属するリソースへのアクセス権を付与します。
  • テーブルレベル: 指定されたテーブルのみへのアクセス権を付与します。

関連する IAM ロール

次のリストは、Lakehouse リソースに適用できる一般的な IAM ロールの一部を示しています。使用可能なロールとそれに関連する権限の一覧については、Lakehouse IAM ロールをご覧ください。

  • roles/biglake.admin: Lakehouse リソースに対する完全な制御権限を付与します。
  • roles/biglake.user: プリンシパルが Lakehouse リソースを使用できるようにします(テーブルデータの読み取りと書き込みなど)。
  • roles/biglake.viewer: プリンシパルが 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 カタログ エンドポイントの名前。
    • PROJECT_ID: 実際の Google Cloudプロジェクト ID。
  2. このコマンドは、現在のロール バインディングとメンバーを示す IAM ポリシーを YAML 形式で出力します。

IAM ポリシーを設定する

Lakehouse Iceberg カタログの IAM ポリシーを更新するには、gcloud alpha biglake iceberg catalogs 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 alpha biglake iceberg catalogs set-iam-policy CATALOG_NAME POLICY_FILE \
        --project=PROJECT_ID
    

    次のように置き換えます。

    • CATALOG_NAME: Apache Iceberg REST カタログ エンドポイントの名前。
    • POLICY_FILE: ローカル ポリシー ファイルのパス。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

ACL ロールを Namespace に適用する

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

Google Cloud コンソールでは、継承された IAM ポリシーは表示または管理されません。

コンソール

  1. Google Cloud コンソールで、[Lakehouse] ページを開きます。

    [レイクハウス] に移動

  2. 既存のカタログを選択するか、まだ作成していない場合は新しいカタログを作成します。

  3. [Namespace details] テーブルで、Namespace を選択してメニュー オプション()を開きます。

  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: カタログ内のターゲット Namespace の名前。
    • CATALOG_NAME: Apache Iceberg REST カタログ エンドポイントの名前。
    • PROJECT_ID: 実際の Google Cloudプロジェクト ID。
  2. このコマンドは、現在のロール バインディングとメンバーを示す IAM ポリシーを YAML 形式で出力します。

IAM ポリシーを設定する

Lakehouse Iceberg Namespace の IAM ポリシーを更新するには、gcloud alpha biglake iceberg namespaces 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 alpha biglake iceberg namespaces set-iam-policy NAMESPACE_NAME POLICY_FILE \
        --catalog=CATALOG_NAME \
        --project=PROJECT_ID
    

    次のように置き換えます。

    • NAMESPACE_NAME: カタログ内のターゲット Namespace の名前。
    • POLICY_FILE: ローカル ポリシー ファイルのパス。
    • CATALOG_NAME: Apache Iceberg REST カタログ エンドポイントの名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

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

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

Google Cloud コンソールでは、継承された IAM ポリシーは表示または管理されません。

コンソール

  1. Google Cloud コンソールで、[Lakehouse] ページを開きます。

    [レイクハウス] に移動

  2. 既存のカタログを選択するか、まだ作成していない場合は新しいカタログを作成します。

  3. [Namespace details] テーブルで、テーブルを含む Namespace の名前をクリックします。

  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 カタログ エンドポイントの名前。
    • NAMESPACE_NAME: カタログ内の Namespace の名前。
    • PROJECT_ID: 実際の Google Cloudプロジェクト ID。
  2. このコマンドは、現在のロール バインディングとメンバーを示す IAM ポリシーを YAML 形式で出力します。

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: カタログ内の Namespace の名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のステップ