Apache Iceberg REST カタログ エンドポイントの ACL を管理する

Borderless Lakehouse は、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 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。

    API の有効化

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

必要なロール

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

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

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

仕組み

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

IAM ロールのスコープ

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

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

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

IAM ポリシーを設定する

Lakehouse で管理されている Apache 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.editor",
          "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: ターゲットの Apache Iceberg テーブルの名前。
    • POLICY_FILE: ローカル ポリシー ファイルのパス。
    • CATALOG_NAME: Apache Iceberg REST カタログ エンドポイントの名前。
    • NAMESPACE_NAME: カタログ内の Namespace の名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のステップ