プライベート接続エンドポイントの管理: AWS¶
このトピックでは、 AWS へのプライベート接続で使用するプライベート接続エンドポイントの管理方法について説明します。
プライベート接続エンドポイントのプロビジョニング¶
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を使用し、サービスまたはリソースとホスト名を指定して、プライベート接続エンドポイントを作成できます。このシステム関数を使用する場合は、 ACCOUNTADMIN ロールを使用する必要があります。
注釈
外部ステージまたは外部ボリュームにプライベート接続を使用する場合は、ホスト名を指定する際にワイルドカード文字 (*
) を使用する必要があります。ワイルドカードを使用しても、すべてのS3バケットがプライベート接続でアクセスされるわけではありません。プライベート接続が有効であるSnowflakeオブジェクト(つまり、外部ステージまたは外部ボリューム)から参照されるバケットのみ、 VPC エンドポイント経由でアクセスできます。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 関数はプロバイダーサービス名とホスト名を引数として受け取ります。これらの値は、 AWS コマンドラインから describe-vpc-endpoint-services
サブコマンドを使用して取得できます。 AWS ドキュメント で説明されているように、この AWS サブコマンドは ServiceName
フィールドと PrivateDnsName
フィールドを含む JSON オブジェクトを返します。SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 関数にどの値を使用するかは、以下の表をご参照ください。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 引数 |
|
---|---|
|
|
|
外部ステージまたは外部ボリュームにプライベート接続を使用する場合は、値をワイルドカードで指定する必要があります。 |
例えば、Amazon S3への外部アクセスで PrivateLink を作成するには、次の SQL ステートメントを実行して us-west-2
エンドポイントを構成します。
SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'com.amazonaws.us-west-2.s3',
'*.s3.us-west-2.amazonaws.com'
);
ターゲットサービスが VPC エンドポイントサービス の場合、エンドポイントサービスは Snowflake に接続を許可する必要があります。エンドポイントを作成する前に、 SYSTEM$GET_PRIVATELINK_CONFIG の出力から privatelink-account-principal
の値を 許可プリンシパル として VPC エンドポイントサービスに追加します。
次の SQL ステートメントは、エンドポイントを VPC エンドポイントサービスに構成します。Snowflakeアカウントと同じリージョンのサービスである必要があります。
SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'com.amazonaws.vpce.us-west-2.vpce-svc-012345678910f1234',
'my.onprem.storage.com'
);
エンドポイントを作成した後、エンドポイントを使用できるようになるまでには時間がかかります。作成したエンドポイントのステータスの確認については、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO を参照してください。
直接アクセスできないエンドポイントへの接続セットアップ¶
すべてのサービスで、Snowflakeがインターフェイスエンドポイントを通じて特定のインスタンスに直接接続できるわけではありません。このような場合、代わりに プロキシをセットアップし、サービスを VPC エンドポイントサービス として公開することで、サービスへのアクセスを可能にすることができます。
Amazon RDS に特化したウォークスルーについては、ブログポスト Connecting To Amazon RDS Using Private Connectivity from Snowflake を参照してください。
ダイレクトアクセスが可能なサービスかどうかの確認¶
Snowflakeは通常、以下のいずれかが真であれば、プライベート接続を介して AWS サービスに直接アクセスできます。
サービスの DNS 名---その AWS DescribeVpcEndpointServices の出力から
PrivateDnsName
値---にはワイルドカードがプレフィックスとして付きます。サービスの DNS 名がワイルドカード文字
*
で始まる場合、 AWS がそのサービス上の個々のリソースへの直接アクセスをサポートしている可能性があります。DNS 名は通常この形式です。*.<service>.<region>.amazonaws.com
サービスは純粋にデータプレーンです。 AWS Bedrock Runtime がその例です。
特定のサービスについての情報は、 AWS のドキュメントやブログ記事を参照してください。
直接アクセスできない場合のサービスへのアクセス¶
インターフェイスエンドポイントを介した直接アクセスでサービスが可用性にならない場合、プロキシをセットアップし、 VPC エンドポイントサービスとしてサービスを公開することで、サービスへのアクセスを可能にすることができます。
そのようなサービスの例としては、以下のようなものがあります。
ec2.us-west-2.amazonaws.com
のAmazon EC2 のインスタンス。rds.us-west-2.amazonaws.com
の Amazon Relational Database Service (RDS) サーバー。
プロキシ経由でのアクセス用に AWS をセットアップします。¶
プロキシを通してサービスインスタンスを公開するには、仮想プライベートクラウド (VPC) とロードバランサー (AWS) をセットアップし、 AWS エンドポイントサービスのサービス名とロードバランサー (DNS) 名を使用して Snowflake プライベートリンクエンドポイントを作成します。
以下、基本的な手順を説明します。
AWS 上に、3つの異なる利用可能ゾーンにまたがるサブネットを持つ 仮想プライベートクラウド (VPC) を作成します。
リソースの初期利用可能ゾーン (たとえば、az1とaz2) を選択します。Snowflakeはリージョンによっては新しい AZs をサポートしない場合があります。エンドポイントとその他のリソースが同じ可用性ゾーンに作成されていることを確認し、クロスゾーントラフィックを回避します。
アクセスするサービス・インスタンスのネットワーク設定で、インスタンスが作成した VPC にあることを確かめます。
アクセスしたいサービスインスタンスを含む ターゲットグループ を作成します。
作成したターゲットグループにトラフィックを転送する ネットワークロードバランサー を作成します。
作成したネットワークロードバランサーで エンドポイントサービス を作成します。
エンドポイントサービス名---
endpoint_service_name
---を記録し、Snowflakeがサービスにアクセスできるようにセットアップする際に使用します。Snowflakeで以下のクエリを実行して、エンドポイントの作成を許可するSnowflakeアカウントプリンシパルを取得します。
SELECT key, value FROM TABLE(FLATTEN(INPUT => PARSE_JSON(SYSTEM$GET_PRIVATELINK_CONFIG())));
クエリの結果から、
privatelink-account-principal
キーを見つけ、その値をメモします。AWS で、作成したエンドポイントサービスについて、 Allow principals セクションを更新して、 ARN が Snowflake の
privatelink-account-principal
キー値であるプリンシパルを追加します。Snowflakeで、作成した AWS エンドポイントサービスへの プライベートエンドポイントを作成します。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 関数を実行する場合、引数として以下の値を使用します。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 引数
AWS 構成からの値
provider_service_name
AWS エンドポイント Service name--- エンドポイントサービスの詳細セクションにある
endpoint_service_name
値。host_name
DNS Name を作成したネットワークロードバランサーから取得します。
AWS で、 PrivateLink の接続を承認します。
作成したエンドポイントサービスのエンドポイント接続に移動します。
保留中のエンドポイント接続を選択します。
Accept Endpoint Connection Request をクリックします。
次のクエリを実行して、エンドポイントのステータスを確認します。
エンドポイントのステータスが
pendingAcceptance
からavailable
に変わったことを確認します。SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
サービスへのプライベート接続エンドポイントの削除¶
SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT システム関数を使用し、サービスまたはリソースを指定して、プライベート接続エンドポイントを削除できます。
エンドポイントが削除されると、そのエンドポイントはキューに入り、7日後に削除されます。
このシステム関数を使用する場合は、 ACCOUNTADMIN ロールを使用する必要があります。
例えば、Amazon S3への外部アクセスで PrivateLink を削除するには、次の SQL ステートメントを実行します。
SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
サービスへのプライベート接続エンドポイントの復元¶
SYSTEM$RESTORE_PRIVATELINK_ENDPOINT システム関数を使用し、サービスまたはリソースを指定して、削除キューに残っている削除済みのプライベート接続エンドポイントを復元できます。削除キューにエンドポイントが見つからない場合、エンドポイントを復元することはできません。
このシステム関数を使用する場合は、 ACCOUNTADMIN ロールを使用する必要があります。
例えば、Amazon S3への外部アクセスで PrivateLink を復元するには、次の SQL ステートメントを実行します。
SELECT SYSTEM$RESTORE_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
サービスへのプライベート接続エンドポイントのリストアップ¶
SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO システム関数を使用すると、アカウント内のすべてのプライベート接続エンドポイント、およびエンドポイントに関する情報をリストアップできます。
このシステム関数を使用する場合は、 ACCOUNTADMIN ロールを使用する必要があります。
例えば、すべての AWS PrivateLink エンドポイントを AWS サービスでリストアップするには、次の SQL ステートメントを実行します。
SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
[
{
"provider_service_name": "com.amazonaws.us-west-2.s3",
"snowflake_endpoint_name": "vpce-123456789012abcdea",
"endpoint_state": "CREATED",
"host": "*.s3.us-west-2.amazonaws.com",
"status": "Available"
},
...
]
関数によって返される JSON オブジェクトのフィールドについては、 戻り値 をご参照ください。
注釈
ACCOUNT_USAGE スキーマの OUTBOUND_PRIVATELINK_ENDPOINTS ビューをクエリして、アカウントのプライベートエンドポイントをリストアップすることもできます。