プライベート接続エンドポイントの管理: AWS¶
このトピックでは、 AWS へのプライベート接続で使用するプライベート接続エンドポイントの管理方法について説明します。
プライベート接続エンドポイントのプロビジョニング¶
注釈
AWSは、Amazon S3サービスのクロスリージョンVPCインターフェースエンドポイントをサポートしていません。したがって、クロスリージョンPrivateLinkは、Amazon S3サービスを使用する外部ステージやボリュームへのアウトバウンド接続でサポートされていません。
AWS PrivateLinkのクロスリージョンサポートは、政府リージョンや中華人民共和国では利用できません。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を使用し、サービスまたはリソースとホスト名を指定して、プライベート接続エンドポイントを作成できます。このシステム関数を使用する場合は、ACCOUNTADMINロールを使用する必要があります。
注釈
外部ステージまたは外部ボリュームにプライベート接続を使用する場合は、ホスト名を指定する際にワイルドカード文字 * を使用する必要があります。ワイルドカードを使用しても、すべてのAmazon S3バケットがプライベート接続でアクセスされるわけではありません。プライベート接続が有効であるSnowflakeオブジェクト(つまり、外部ステージまたは外部ボリューム)から参照されるバケットのみ、VPCエンドポイント経由でアクセスできます。
例えば、Amazon S3に接続するPrivateLinkエンドポイントを作成するには、次のSQLステートメントを実行して us-west-2 用のエンドポイントを構成します。
SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'com.amazonaws.us-west-2.s3',
'*.s3.us-west-2.amazonaws.com'
);
注釈
Amazon S3またはKMSのような別のサービスとしてのプラットフォーム(PaaS)のエンドポイントを構成する場合、そのサービスはSnowflakeアカウントと同じリージョンにある必要があります。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 関数はプロバイダーサービス名とホスト名を引数として受け取ります。これらの値は、 AWS コマンドラインから describe-vpc-endpoint-services サブコマンドを使用して取得できます。AWS ドキュメント で説明されているように、この AWS サブコマンドは ServiceName フィールドと PrivateDnsName フィールドを含む JSON オブジェクトを返します。SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 関数にどの値を使用するかは、以下の表をご参照ください。
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 引数 |
|
|---|---|
|
|
|
外部ステージまたは外部ボリュームにプライベート接続を使用する場合は、値をワイルドカードで指定する必要があります。 |
You can create a private connectivity endpoint to a VPC endpoint service in an AWS region that is different from your Snowflake region. If you do, ensure that the VPC endpoint service supports the Snowflake region. For information about finding the region names for your account, see Find the cloud-provider's name of the region for your account.
重要
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT関数の引数として provider_service_name を指定する前に、 AWS PrivateLink価格設定 ページの地域間接続価格のセクションを参照し、適切な地域を決定してください。
ターゲットサービスが VPCエンドポイントサービス の場合、エンドポイントサービスはSnowflakeに接続を許可する必要があります。エンドポイントを作成する前に、 SYSTEM$GET_PRIVATELINK_CONFIG の出力から privatelink-account-principal の値をVPCエンドポイントサービスの `許可プリンシパル<https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions>`_ として追加します。
次のSQLステートメントは、VPCエンドポイントサービスにエンドポイントを設定します。
SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'com.amazonaws.vpce.us-west-2.vpce-svc-012345678910f1234',
'my.onprem.storage.com'
);
注釈
この例では、サービスはSnowflakeアカウントとは異なるリージョンにあるかもしれません。
エンドポイントを作成した後、エンドポイントを使用できるようになるまでには時間がかかります。作成したエンドポイントのステータスの確認については、 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_nameAWS エンドポイント Service name--- エンドポイントサービスの詳細セクションにある
endpoint_service_name値。host_nameDNS Name を作成したネットワークロードバランサーから取得します。
AWS で、 PrivateLink の接続を承認します。
作成したエンドポイントサービスのエンドポイント接続に移動します。
保留中のエンドポイント接続を選択します。
Accept Endpoint Connection Request をクリックします。
次のクエリを実行して、エンドポイントのステータスを確認します。
エンドポイントのステータスが
pendingAcceptanceからavailableに変わったことを確認します。SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
プライベート接続エンドポイントのホスト名を変更する¶
ネットワークリソースを変更することなく、以前にプロビジョニングしたプライベート接続エンドポイントのホスト名のみを変更できます。エンドポイントのホスト名を変更すると、このエンドポイントが別のホスト名を使用して同じサービスに接続するよう、Snowflakeに指示します。ホスト名を変更するには、 SYSTEM$SET_PRIVATELINK_ENDPOINT_HOSTNAME システム関数を呼び出します。
サービスへのプライベート接続エンドポイントの削除¶
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 ビューをクエリして、アカウントのプライベートエンドポイントをリストアップすることもできます。