AWS PrivateLink とSnowflake¶
このトピックでは、 AWS PrivateLink を構成して、Snowflakeアカウントを1つ以上の AWS VPCs に直接接続する方法について説明します。
AWS PrivateLink は、Snowflakeが提供するサービスでは ありません。PrivateLinkは、SnowflakeがSnowflakeアカウントでの使用をサポートしている AWS のサービスです。
このトピックの内容:
AWS PrivateLink とは¶
AWS PrivateLink は AWS のサービスで、プライベート VPC エンドポイントを作成するためのものです。これにより、パブリックインターネットを経由せずに、ご使用の AWS VPCs と Snowflake VPC の間の直接的かつ安全な接続が可能になります。接続は、同じ AWS リージョン内の AWS VPCs 用です。
外部関数の記述 の場合は、 AWS PrivateLink を プライベートエンドポイント で使用することもできます。
さらに、オンプレミス環境(例: ホストされていないデータセンター)がある場合は、 AWS Direct Connect と AWS PrivateLink を組み合わせて使用し、すべての仮想環境と物理環境を単一のプライベートネットワークで接続することを選択できます。
注釈
AWS Direct Connectは独立した AWS のサービスで、 AWS PrivateLink とは独立して実装する必要があり、このトピックの範囲外です。AWS Direct Connectの実装については、Amazonにお問い合わせください。
AWS PrivateLink の有効化¶
注釈
現在、このセクションのセルフサービス有効化プロセスは、マネージドクラウドサービスまたはサードパーティベンダーからの AWS アカウント識別子の承認をサポートしていません。
このユースケースの AWS アカウント識別子を承認するには、ベンダーから AWS アカウント識別子を取得し、 Snowflakeサポート にご連絡ください。
Snowflakeアカウントで AWS PrivateLink を有効にするには、次のステップを実行します。
コマンドライン環境で、次の AWS CLI STS コマンドを実行し、出力を保存します。出力は、次のステップで
federated_token
引数の値として使用されます。aws sts get-federation-token --name sam
get-federation-token
には、IDと AWS のアクセス管理ユーザーか、 AWS アカウントルートユーザーが必要です。詳細については、 AWS ドキュメント をご参照ください。"FederatedUserId"
値の12桁の数字を抽出します(切り捨て)。たとえば、トークンに次が含まれている場合、{ ... "FederatedUser": { "FederatedUserId": "185...:sam", "Arn": "arn:aws:sts::185...:federated-user/sam" }, "PackedPolicySize": 0 }
185...
を抽出します。この12桁の数字は、次のステップにあるaws_id
の値になります。Snowflakeアカウント管理者(つまり、 ACCOUNTADMIN システムロールを持つユーザー)として、 SYSTEM$AUTHORIZE_PRIVATELINK 関数を呼び出して、Snowflakeアカウントの AWS PrivateLink を承認(つまり、有効化)します。
select SYSTEM$AUTHORIZE_PRIVATELINK ( '<aws_id>' , '<federated_token>' );
条件:
'aws_id'
Amazon Web Services(AWS)アカウントを文字列として一意に識別する12桁の識別子。
'federated_token'
フェデレーションユーザーのアクセス認証情報を文字列として含むフェデレーショントークン値。
例:
use role accountadmin; select SYSTEM$AUTHORIZE_PRIVATELINK ( '185...', '{ "Credentials": { "AccessKeyId": "ASI...", "SecretAccessKey": "enw...", "SessionToken": "Fwo...", "Expiration": "2021-01-07T19:06:23+00:00" }, "FederatedUser": { "FederatedUserId": "185...:sam", "Arn": "arn:aws:sts::185...:federated-user/sam" }, "PackedPolicySize": 0 }' );
承認済みの構成を検証するには、 AWS のSnowflakeアカウントで SYSTEM$GET_PRIVATELINK 関数を呼び出します。この関数は、Snowflakeアカウントの承認に使用されたものと同じ引数値を 'aws_id'
と 'federated_token'
に使用します。
Snowflakeは、承認に成功すると Account is authorized for PrivateLink.
を返します。
Snowflakeアカウントで AWS PrivateLink を 無効 にする必要がある場合は、 'aws-id'
と 'federated_token'
に同じ引数値を使用して、 SYSTEM$REVOKE_PRIVATELINK 関数を呼び出します。
重要
federated_token
は12時間後に期限切れになります。
Snowflakeアカウントによる AWS PrivateLink の使用を承認、検証、または無効化するためのシステム関数を呼び出す際にトークンが無効な場合は、このセクションにある手順の最初に示されている AWS CLI STS コマンドを使用してトークンを再生成します。
AWS VPC 環境の構成¶
注意
このセクションでは、 VPC 環境を設定するためのSnowflake固有の詳細のみを説明します。
また、必要な AWS VPC のエンドポイント、セキュリティグループルール、および DNS 記録の実際の構成に対し、Snowflakeは責任を 負いません 。これらの構成タスクのいずれかで問題が発生した場合は、 AWS サポートに直接お問い合わせください。
VPC エンドポイント(VPCE)を作成および構成する¶
VPC エンドポイントを作成および構成するには、次のステップを実行します。AWS VPC 環境で、
Snowflakeアカウント管理者(つまり、 ACCOUNTADMIN システムロールを持つユーザー)として、 SYSTEM$GET_PRIVATELINK_CONFIG 関数を呼び出し、
privatelink-vpce-id
値を記録します。AWS 環境で、前のステップの
privatelink-vpce-id
値を使用して VPC エンドポイントを作成します。AWS 環境で、Snowflakeの送信接続を VPCE CIDR (クラスレスドメイン間ルーティング)のポート
443
および80
に接続する、サービスのセキュリティグループを承認します。
詳細については、AWS のドキュメントをご参照ください。
VPC ネットワークを構成する¶
AWS PrivateLink エンドポイントを介してSnowflakeにアクセスするには、 DNS に CNAME 記録を作成して、 SYSTEM$GET_PRIVATELINK_CONFIG 関数からのエンドポイント値を VPC エンドポイントの DNS 名に解決する必要があります。
これらのエンドポイント値により、Snowflake、 Snowsight、および Snowflake Marketplace にアクセスするのと同時に、 OCSP を使用して、Snowflakeクライアントが HTTPS および 接続 URLs を介してエンドポイントへの接続を試みる際に、証明書が取り消されていないかどうかを確認できるようになります。
取得する関数値は次のとおりです。
privatelink-account-url
privatelink-connection-ocsp-urls
privatelink-connection-urls
privatelink-ocsp-url
regionless-privatelink-account-url
regionless-snowsight-privatelink-url
snowsight-privatelink-url
regionless-snowsight-privatelink-url
と snowsight-privatelink-url
の値により、プライベート接続を使用して Snowsight と Snowflake Marketplace にアクセスできることに注意してください。ただし、 URL リダイレクトを有効にする場合は、追加の構成があります。
詳細については、 Snowsightおよびプライベート接続 をご参照ください。
DNS 構成の詳細については、内部の AWS 管理者にお問い合わせください。
重要
OCSPキャッシュサーバーのホスト名の構造は、 Snowflakeクライアントの構成 (このトピック内)のステップ1で説明されているように、インストールされているクライアントのバージョンによって異なります。
リストにあるバージョン(またはそれ以上)を使用している場合は、上記のフォームを使用します。これにより、同じ地域に複数のSnowflakeアカウント(例: 開発、テスト、運用)がある場合に DNS の解決度が向上します。クライアントドライバーを更新して OCSP を PrivateLink で使用する場合は、ファイアウォールルールを更新して OCSP ホスト名を許可します。
古いクライアントバージョンを使用している場合、 OCSP キャッシュサーバーのホスト名は
ocsp.<リージョンID>.privatelink.snowflakecomputing.com
(つまり、 アカウント識別子 なし)の形式を取ります。また、 DNS 記録は、使用する VPC 内のプライベート IP アドレスで解決する必要があります。パブリック IP アドレスに解決される場合は、記録が正しく構成されていません。
ステップ3: Amazon S3用 AWS VPC インターフェイスエンドポイントを作成する¶
このステップは、SnowflakeクライアントからのAmazon S3トラフィックが AWS バックボーンにとどまるために必要です。Snowflakeクライアント(例: SnowSQL、 JDBC ドライバー)は、さまざまなランタイム操作を実行するために、Amazon S3へのアクセスを必要とします。
AWS VPC ネットワークがパブリックインターネットへのアクセスを許可しない場合は、内部ステージへのプライベート接続を構成するか、Snowflakeクライアントに必要なAmazon S3ホスト名に、より多くのゲートウェイエンドポイントを構成する必要があります。
全体として、Amazon S3へのアクセスを設定するための3つのオプションがあります。最初の2つのオプションはパブリックインターネットを回避し、3番目のオプションは回避しません。
内部ステージ の AWS VPC インターフェイスエンドポイントを構成します。このオプションをお勧めします。
Amazon S3ゲートウェイエンドポイントを設定します。詳細については、以下の注意をご参照ください。
インターフェイスエンドポイントまたはゲートウェイエンドポイントを構成しないでください。これにより、パブリックインターネットを使用したアクセスが可能になります。
注意
Amazon S3バケットとSnowflakeを使用する AWS VPC の間の通信においてパブリックインターネットの使用を防止するには、Amazon S3ゲートウェイエンドポイントをAmazon S3バケットの AWS リージョンと同一の設定にします。この理由は、 AWS PrivateLink では VPCs 間での通信のみを許可し、Amazon S3バケットは VPC に含まれないためです。
Amazon S3ゲートウェイエンドポイントを構成して、特定のユーザー、S3リソース、ルート、およびサブネットへのアクセスを制限できますが、Snowflakeではこの構成を必要としません。詳細については、 Amazon S3用エンドポイント をご参照ください。
Amazon S3ゲートウェイエンドポイントポリシーを構成して、SnowflakeにAmazon S3リソースのみを使用するよう明確に制限するには、次のオプションのいずれかを選択します。
Snowflakeアカウントで使用される特定のAmazon S3ホスト名アドレスを使用します。アカウントで使用されるホスト名の包括的なリストについては、 SYSTEM$ALLOWLIST をご参照ください。
Snowflake S3ホスト名に一致するAmazon S3ホスト名パターンを使用します。このシナリオでは、Snowflakeへの接続には、 VPC ツー VPC または オンプレミスツー VPC の2種類の接続があります。
接続タイプに基づいて、次の点に注意します。
- VPC ツー VPC:
Amazon S3ゲートウェイエンドポイントが存在することを確認します。オプションで、S3ゲートウェイエンドポイントポリシーを変更して、 Amazon S3ホスト名 テーブルに示されている特定のホスト名パターンに一致させます。
- オンプレミスツー VPC:
Amazon S3トラフィックがパブリックゲートウェイで許可されて いない ときは、ファイアウォールまたはプロキシ構成にS3ホスト名パターンを含めるように設定を定義します。
アカウントのSnowflakeが管理するS3バケットに固有である必要がない場合に、ゲートウェイエンドポイントを作成できるAmazon S3ホスト名パターンを次のテーブルに示します。
Amazon S3ホスト名
メモ
すべての地域
sfc-*-stage.s3.amazonaws.com:443
US 東部以外のすべての地域
sfc-*-stage.s3-<地域ID>.amazonaws.com:443
パターンは、地域 ID の前にハイフン(
-
)を使用します。sfc-*-stage.s3.<地域ID>.amazonaws.com:443
パターンは、地域 ID の前にピリオド(
.
)を使用します。
ゲートウェイエンドポイントの作成の詳細については、 ゲートウェイ VPC エンドポイント をご参照ください。
Snowflakeに接続する¶
Snowflakeに接続する前に、 オプションで SnowCD (Snowflake Connectivity Diagnostic Tool)を活用して、Snowflakeおよび AWS PrivateLink とのネットワーク接続を評価できます。
詳細については、 SnowCD および SYSTEM$ALLOWLIST_PRIVATELINK をご参照ください。
それ以外の場合は、プライベート接続アカウント URL を使用してSnowflakeに接続します。
AWS PrivateLink を介してSnowsightに接続する場合は、 Snowsightドキュメント の手順に従います。
パブリックアクセスのブロック --- オプション¶
AWS PrivateLink を使用してSnowflakeへのプライベート接続をテストした後、 オプションで Snowflakeへのパブリックアクセスをブロックできます。つまり、ユーザーは、接続リクエストがSnowflakeネットワークポリシーで指定された特定の CIDR ブロック範囲内の IP アドレスから発信された場合にのみSnowflakeにアクセスできます。
ネットワークポリシーを使用してパブリックアクセスをブロックするには、
新しいネットワークポリシーを作成するか、既存のネットワークポリシーを編集します。組織の CIDR ブロック範囲を追加します。
アカウントのネットワークポリシーをアクティブにします。
詳細については、 ネットワークポリシーを使用したネットワークトラフィックの制御 をご参照ください。
Snowflakeクライアントの構成¶
Snowflakeクライアントが OCSP キャッシュサーバーをサポートしていることを確認する¶
Snowflake OCSP キャッシュサーバーは、Snowflakeクライアントとサーバー間の接続の問題を軽減します。インストール済みのSnowflakeクライアントが OCSP サーバーキャッシュを利用できるようにするには、次のクライアントバージョンを使用していることを確認してください。
SnowSQL 1.1.57 (またはそれ以上)
Pythonコネクタ 1.8.2(またはそれ以上)
JDBC ドライバー3.8.3(またはそれ以上)
ODBC ドライバー2.19.3(またはそれ以上)
注釈
Snowflake OCSP キャッシュサーバーは、ポート 80
をリッスンします。 VPC エンドポイント(VPCE)を作成および構成する で、 AWS PrivateLink VPCE セキュリティグループを構成し、このポートとあわせてポート 443
(他のすべてのSnowflakeトラフィックに必要)を受け入れるようにしたのはこのためです。
Snowflakeクライアントのホスト名を指定する¶
各Snowflakeクライアントには、Snowflakeアカウントに接続するためのホスト名が必要です。
ホスト名は、 VPC ネットワークの構成 の CNAME 記録で指定したホスト名と同じです。
このステップは、 Snowflake Marketplace へのアクセスには適用されません。
たとえば、 xy12345
という名前のアカウントの場合、
アカウントが US 西部にある場合、ホスト名は
xy12345.us-west-2.privatelink.snowflakecomputing.com
です。アカウントが EU (フランクフルト)にある場合、ホスト名は
xy12345.eu-central-1.privatelink.snowflakecomputing.com
です。
重要
ホスト名を指定する方法は、クライアントによって異なります。
Sparkコネクタと ODBC および JDBC ドライバーについては、ホスト名全体を指定します。
他のすべてのクライアントについては、ホスト名全体を指定 しません。
代わりに、 アカウント識別子 を
privatelink
セグメント(つまり、<アカウント識別子>.privatelink
)で指定します。これは、Snowflakeがsnowflakecomputing.com
と連結してホスト名を動的に構築します。
Snowflakeクライアントのアカウント名またはホスト名の指定の詳細については、各クライアントのドキュメントをご参照ください。
AWS PrivateLink と SSO の併用¶
Snowflakeは、AWS PrivateLinkでSSOの使用をサポートしています。詳細については、次をご参照ください。
AWS PrivateLink でのクライアントリダイレクトの使用¶
Snowflakeは、 AWS PrivateLink でのクライアントリダイレクトの使用をサポートしています。
詳細については、 クライアント接続のリダイレクト をご参照ください。
プライベート接続での複製とTri-Secret Secureの使用¶
Snowflakeは、ターゲットアカウントでTri-Secret Secureまたはこの機能を有効にするかどうかに関係なく、ソースアカウントからターゲットアカウントへのデータの複製をサポートします。
詳細については、 データベースの複製と暗号化 をご参照ください。
トラブルシューティング¶
次のSnowflakeコミュニティの記事に注意してください。