Snowflake Open Catalogのプライベート接続エンドポイントの管理: AWS

Snowflake Open CatalogアカウントのカタログのデータがAmazon Simple Storage Service(Amazon S3)ストレージバケットに保存されている場合、以下の手順に従って、送信ネットワークトラフィックのプライベート接続を設定します。

Open Catalog アカウント のプライベート接続を有効にするには、通常、このトピックの[設定の手順を1回実行するだけです。その後、Open Catalogアカウントの各 カタログ のアウトバウンドプライベート接続を有効にします。

例えば、設定の手順を完了してから後で新しい catalog1 カタログを作成する場合、通常は catalog1 の送信プライベート接続を有効にする必要があるだけです。カタログのプライベート接続を有効にする方法については、 カタログのアウトバウンドプライベート接続を有効にするをご参照ください。ただし、 catalog1 がバケットポリシーを更新していないストレージバケットを使用している場合は、バケットの バケットポリシーを更新する必要もあります。バケットポリシーを更新すると、バケットのネットワークアクセスはプライベート接続エンドポイントに制限されます。

前提条件

  • Open Catalogアカウントと外部クラウドストレージは、両方とも同じ AWS リージョンでホストされている必要があります。

  • Icebergテーブルが格納されている AWS ストレージバケットのバケットポリシーを変更するには、 AWS で IAM 権限が必要です。詳細については、 AWS ドキュメントの Amazon S3のバケットポリシー をご参照ください。

  • サードパーティのクエリエンジンまたはSnowflakeエンジンは、 AWS PrivateLink またはS3ゲートウェイエンドポイントを介してストレージバケットにアクセスできる必要があります。詳細については、 AWS ドキュメントの インターフェイスエンドポイントの構成 をご参照ください。それ以外の場合、アウトバウンドプライベート接続を有効にすると、エンジンはバケットに格納されたテーブルを読み書きできませんが、Open Catalogはバケットにメタデータを読み書きできます。

アカウントでのプライベート接続の設定

以下の手順に従って、Open Catalogアカウントのプライベート接続を設定します。

ステップ1: Open Catalog用のSnowflake CLI 接続を作成する

Open Catalogでプライベート接続を設定するには、Open Catalog用のSnowflake CLI 接続が必要です。この接続を作成するには、以下の手順に従ってください。Snowflake CLI がまだインストールされていない場合は、 Snowflake CLI のインストール をご参照ください。

始める前に

Open CatalogのSnowflake CLI 接続を作成するには、Open Catalogのアカウント識別子が必要です。アカウント識別子には、Snowflake組織名とOpen Catalogアカウント名が含まれます。例えば、 <orgname>.<my-snowflake-open-catalog-account-name> のようになります。

  • Snowflake 組織名(<orgname>)を調べるには、 アカウントの組織名とアカウント名を調べる <https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#label-account-name-find>_ をご参照ください。

  • Snowflake Open Catalog アカウント名(<my-snowflake-open-catalog-account-name>)を検索するには、 Snowflake Open Catalogアカウントのアカウント名を検索 <https://other-docs.snowflake.com/en/opencatalog/find-account-name>_ をご参照ください。

重要

この接続を作成するには、サービス管理権限を持つOpen Catalogユーザーである必要があります。サービス管理者の権限については、 サービス管理者のロール ご参照ください。

Snowflake Open Catalog用にSnowflake CLI 接続を追加する

プライベート接続を有効にしたいSnowflake Open Catalogアカウントの接続を追加します。

  • 以下の値で 接続を追加 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#add-a-connection>_ をします。その他のパラメーターについては、 Enter を押して、パラメーターの値の指定をスキップします。

    接続構成パラメーター

    この接続の名前

    接続の名前を指定します(例: myopencatalogconnection)。

    アカウント名

    Snowflake組織名の後にOpen Catalogのアカウント名をこの形式で指定します。

    <orgname>-<my-snowflake-open-catalog-account-name>

    例えば、 ABCDEFG-MYACCOUNT1 です。

    これらの名前を調べるには、 はじめに_ をご参照ください。

    ユーザー名

    Open Catalogのユーザー名を指定します(例: jsmith)。

    パスワード [任意]

    Open Catalogの接続を作成する場合、このパラメーターはオプション ではありません

    Open Catalogのパスワードを入力してください(例: MyPassword123456789)。

    接続のロール [任意]

    Open Catalogの接続を作成する場合、このパラメーターはオプション ではありません

    POLARIS_ACCOUNT_ADMIN を入力する必要があります

Snowflake CLI 接続のテスト

  • CLI 接続をテストするには、以下の例に従ってください。 myopencatalogconnection の接続をテストします。

    snow connection test -c myopencatalogconnection
    
    Copy

    応答は次のようになります。

    +------------------------------------------------------------------------------+
    | key              | value                                                     |
    |----------------------------+-------------------------------------------------|
    | Connection name  | myopencatalogconnection                                   |
    | Status           | OK                                                        |
    | Host             | ABCDEFG-MYACCOUNT1.snowflakecomputing.com                 |
    | Account          | ABCDEFG-MYACCOUNT1                                        |
    | User             | jsmith                                                    |
    | Role             | POLARIS_ACCOUNT_ADMIN                                     |
    | Database         | not set                                                   |
    | Warehouse        | not set                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

Snowflake Open CatalogのSnowflake CLI 接続をデフォルトに設定する

使用する接続に必要な POLARIS_ACCOUNT_ADMIN ロールが常に付与されるようにするには、Open Catalog用に作成したSnowflake CLI 接続をデフォルトの接続として設定します。デフォルト接続の詳細については、 デフォルト接続の設定 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#set-the-default-connection>_ をご参照ください。

  1. この例に従います。これは、 myopencatalogconnection 接続をデフォルトとして設定します。

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 正しいユーザーとロールを使用していることを確認するには、以下を実行してください。

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    応答はOpen Catalogのユーザー名を返し、 CURRENT ROLE は POLARIS_ACCOUNT_ADMIN である必要があります。

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

ステップ2: プライベート接続エンドポイントをプロビジョニングする

Open Catalog用のSnowflake CLI 接続を使用して、以下のシステム関数を呼び出します。

  1. ストレージバケットのプライベート接続エンドポイントをプロビジョニングするには、 SYSTEM$PROVISION_PRIVATELINK_ENDPOINTシステム関数を呼び出します。

  2. プライベート接続エンドポイントが使用可能であることを確認するには、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFOシステム関数を呼び出します。

手順については、Snowflakeドキュメントの プライベート接続エンドポイントのプロビジョニング をご参照ください。説明ではSnowflake Open CatalogアカウントではなくSnowflakeアカウントを参照していますが、Open Catalogでもプロセスは同じです。

重要

  • 説明で言及されている ACCOUNTADMIN ロールではなく、 POLARIS_ACCOUNT_ADMIN ロールを使用する必要があります。

  • 設定したデフォルトのSnowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN;

  • コマンドの場合、 $ の直前にスラッシュを入れなければなりません。例えば、 snow sql -q "SELECT SYSTEM\$GET_PRIVATELINK_CONFIG();" です。

注釈

プロビジョニングしたこのプライベート接続エンドポイントは、Open Catalogアカウントがホストされている同じ AWS リージョンにあるすべてのストレージバケットへのアクセスを許可するために使用できます。

例: プライベート接続エンドポイントのプロビジョニング

次の例では、Amazon S3への外部アクセスで PrivateLink を作成し、 us-west-2 リージョンのエンドポイントを構成します。

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
  'com.amazonaws.us-west-2.s3',
  '*.s3.us-west-2.amazonaws.com'
);
Copy

ステップ3: バケットポリシーを更新する

ストレージバケットへのネットワークアクセスを、前のステップで作成したプライベート接続エンドポイントに制限するには、 AWS でストレージバケットのバケットポリシーを更新します。手順については、 AWS ドキュメントの 特定の VPCendpoint へのアクセスを制限する をご参照ください。バケットポリシーの <vpce-id> に、前の手順で作成したプライベート接続エンドポイントの ID を指定します。

必要に応じて、Open Catalogに接続するバケットを追加する場合は、この手順を繰り返します。

重要

バケットポリシーに、追加後にブラウザからバケットとバケットポリシーにアクセスできる権限が含まれていることを確認してください。そうしないと、バケットポリシーを更新した後、ブラウザからバケットやバケットポリシーにアクセスできなくなります。

このバケットポリシーの例では、ブラウザからバケットとバケットポリシーにアクセスすることができます。

{
    "Version": "2012-10-17",
    "Id": "Policy1234567890123",
    "Statement": [
        {
            "Sid": "Deny public access",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:SourceVpc": "vpc-*"
                }
            }
        },
        {
            "Sid": "Access-to-specific-VPCE-only",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-xxxxxxxxxxx"
                }
            }
        }
    ]
}
Copy

カタログのアウトバウンドプライベート接続の有効化

このセクションでは、Open Catalogアカウントでカタログのアウトバウンドプライベート接続を有効にする方法について説明します。

ステップ1: プライベート接続を有効にする

新規または既存のカタログのプライベート接続を有効にできます。

新規カタログのプライベート接続の有効化

Amazon Simple Storage Service(Amazon S3)を使用してカタログを作成するの手順に従います。カタログに対して、 Private Link トグルが 有効 になっていることを確認します。

注釈

カタログのテーブルが格納されているバケットのポリシーを更新していない場合は、 バケットポリシーを更新するをご参照ください。バケットポリシーを更新すると、ストレージバケットへのネットワークアクセスがプライベート接続エンドポイントに制限されます。

既存カタログへのプライベート接続の有効化

  1. オープンカタログにサインインします。

  2. ナビゲーションメニューで、 カタログ を選択します。

  3. カタログのリストで、プライベート接続を有効にするカタログを選択します。

  4. カタログの詳細 タブで、 PrivateLink トグルを 有効 に設定します。

ステップ2: クエリエンジンを使ってテーブルを作成する

クエリエンジンが AWS PrivateLink を介してカタログに接続されていることを確認するには、クエリエンジンを使用してテーブルを作成し、そこにデータを挿入します。テーブルにデータを挿入できない場合は、クエリエンジンに AWS PrivateLink を構成していない可能性があります。

トラブルシューティング

このセクションでは、ネットワークトラフィックのアウトバウンドプライベート接続に関する問題のトラブルシューティングについて説明します。

Open Catalogでテーブルのスキーマを表示できない

症状

Open Catalogで、カタログ内のテーブル(例えば、 catalog1)を選択しましたが、「このリソースへのアクセス許可がありません」というエラーメッセージが表示されました。

原因

AWS では、 VPC エンドポイントを経由してネットワークトラフィックがルーティングされるよう、バケットポリシーを更新しました。しかし、Open Catalogではこのカタログのプライベート接続を有効にしていないため、Open Catalogはあなたのバケットにアクセスできません。

解決策

カタログのプライベート接続を有効にします(例: catalog1)。詳しくは、 カタログのプライベート接続を有効にするをご参照ください。