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
応答は次のようになります。
+------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------+
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>
_ をご参照ください。
この例に従います。これは、
myopencatalogconnection
接続をデフォルトとして設定します。snow connection set-default myopencatalogconnection
正しいユーザーとロールを使用していることを確認するには、以下を実行してください。
snow sql -q "Select current_user(); select current_role();"
応答はOpen Catalogのユーザー名を返し、 CURRENT ROLE は POLARIS_ACCOUNT_ADMIN である必要があります。
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
ステップ2: プライベート接続エンドポイントをプロビジョニングする¶
Open Catalog用のSnowflake CLI 接続を使用して、以下のシステム関数を呼び出します。
ストレージバケットのプライベート接続エンドポイントをプロビジョニングするには、 SYSTEM$PROVISION_PRIVATELINK_ENDPOINTシステム関数を呼び出します。
プライベート接続エンドポイントが使用可能であることを確認するには、 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'
);
ステップ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"
}
}
}
]
}
カタログのアウトバウンドプライベート接続の有効化¶
このセクションでは、Open Catalogアカウントでカタログのアウトバウンドプライベート接続を有効にする方法について説明します。
ステップ1: プライベート接続を有効にする¶
新規または既存のカタログのプライベート接続を有効にできます。
新規カタログのプライベート接続の有効化¶
Amazon Simple Storage Service(Amazon S3)を使用してカタログを作成するの手順に従います。カタログに対して、 Private Link トグルが 有効 になっていることを確認します。
注釈
カタログのテーブルが格納されているバケットのポリシーを更新していない場合は、 バケットポリシーを更新するをご参照ください。バケットポリシーを更新すると、ストレージバケットへのネットワークアクセスがプライベート接続エンドポイントに制限されます。
既存カタログへのプライベート接続の有効化¶
オープンカタログにサインインします。
ナビゲーションメニューで、 カタログ を選択します。
カタログのリストで、プライベート接続を有効にするカタログを選択します。
カタログの詳細 タブで、 PrivateLink トグルを 有効 に設定します。
ステップ2: クエリエンジンを使ってテーブルを作成する¶
クエリエンジンが AWS PrivateLink を介してカタログに接続されていることを確認するには、クエリエンジンを使用してテーブルを作成し、そこにデータを挿入します。テーブルにデータを挿入できない場合は、クエリエンジンに AWS PrivateLink を構成していない可能性があります。
トラブルシューティング¶
このセクションでは、ネットワークトラフィックのアウトバウンドプライベート接続に関する問題のトラブルシューティングについて説明します。
Open Catalogでテーブルのスキーマを表示できない¶
症状
Open Catalogで、カタログ内のテーブル(例えば、 catalog1
)を選択しましたが、「このリソースへのアクセス許可がありません」というエラーメッセージが表示されました。
原因
AWS では、 VPC エンドポイントを経由してネットワークトラフィックがルーティングされるよう、バケットポリシーを更新しました。しかし、Open Catalogではこのカタログのプライベート接続を有効にしていないため、Open Catalogはあなたのバケットにアクセスできません。
解決策
カタログのプライベート接続を有効にします(例: catalog1
)。詳しくは、 カタログのプライベート接続を有効にするをご参照ください。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT コマンド実行時の「Business Critical」エラー¶
症状
Snowflake CLI 接続で、 SYSTEM\$PROVISION_PRIVATELINK_ENDPOINT
コマンドを実行しましたが、以下のエラーメッセージを受け取りました: 「この操作にはBusiness Criticalまたはそれ以上のエディションが必要です。有効なエディションにアップグレードしてから、再試行してください」。
原因
あなたのOpen CatalogアカウントのエディションはBusiness Criticalではありません。
プライベート接続エンドポイントのプロビジョニングを含む、送信ネットワークトラフィックのプライベート接続を有効にするには、Snowflake Open Catalogアカウントの エディション がBusiness Criticalである必要があります。
解決策
Open CatalogアカウントのBusiness Criticalへのアップグレードについては、 Snowflakeサポート までご連絡ください。