SnowflakeOpen 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のバケットポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)をご参照ください。
サードパーティのクエリエンジンまたはSnowflakeエンジンは、 AWSPrivateLink またはS3ゲートウェイエンドポイントを通じてストレージバケットにアクセスできる必要があります。詳細については、 AWS ドキュメントのインターフェースエンドポイントの構成をご参照ください。それ以外の場合、アウトバウンドプライベート接続を有効にすると、エンジンはバケットに格納されたテーブルを読み書きできませんが、Open Catalogはバケットにメタデータを読み書きできます。
アカウントのプライベート接続を設定する¶
以下の手順に従って、Open Catalogアカウントのプライベート接続をセットアップします。
ステップ1:Open Catalog用の Snowflake CLI 接続を作成します。¶
Open Catalogでプライベート接続を設定するには、Open Catalog用のSnowflake CLI 接続が必要です。この接続を作成するには、以下のステップを実行します。Snowflake CLI がまだインストールされていない場合は、[Snowflake CLI のインストール](https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation)をご参照ください。
始める前に¶
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:クエリエンジンを使用してテーブルを作成する¶
クエリエンジンが AWSPrivateLink を通してカタログに接続されていることを確認するには、クエリエンジンを使ってテーブルを作成し、そこにデータを挿入します。テーブルにデータを挿入できない場合は、クエリエンジン用の AWSPrivateLink が構成されていない可能性があります。
トラブルシューティング¶
このセクションでは、ネットワークトラフィックのアウトバウンドプライベート接続に関する問題のトラブルシューティングを提供します。
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サポートにお問い合わせください。