AWS PrivateLink とSnowflake¶
このトピックでは、 AWS PrivateLink を構成して、Snowflakeアカウントを1つ以上の AWS Virtual Private Cloud( VPCs )に直接接続する方法について説明します。
AWS PrivateLink :概要¶
AWS PrivateLink は、パブリックインターネットを経由せずに、 AWS VPCs と Snowflake VPC 間の直接の安全な接続を可能にするプライベート VPC エンドポイントを作成するための AWS サービスです。 AWS PrivateLink 接続は、同じまたは異なる AWS リージョンにある VPC エンドポイントサービスと AWS VPCs をサポートします。AWS PrivateLink のクロスリージョン接続を使用すると、カスタムエンドポイントサービスを使用して、 AWS VPC リージョンとは異なるリージョンのSnowflakeアカウントに接続できます。リージョン間接続は現在、Amazon Simple Storage Service(Amazon S3)やキー管理サービス( KMS )などのPlatform as a Service( PaaS )サービスではサポートされていません。
詳細については、 AWS のブログページ AWS のクロスリージョン接続の概要 PrivateLink をご参照ください。アカウントのリージョン名の見つけ方については、 アカウントのリージョンのクラウドプロバイダー名を見つける をご参照ください。
外部関数を記述する場合 、 プライベートエンドポイント で AWS PrivateLink を使用することもできます。
非ホスト型データセンターなどのオンプレミス環境がある場合は、 AWS ダイレクト接続 と AWS PrivateLink を使用して、すべての仮想環境と物理環境を単一のプライベートネットワークに接続できます。
注釈
AWS Direct Connectは独立した AWS のサービスで、 AWS PrivateLink とは独立して実装する必要があり、このトピックの範囲外です。AWS Direct Connectの実装については、Amazonにお問い合わせください。
AWS PrivateLink を有効にします¶
注釈
このセクションのセルフサービス有効化プロセスは、現在、マネージドクラウドサービスまたはサードパーティベンダーからの AWS アカウント識別子の承認をサポートしていません。
このユースケースの AWS アカウント識別子を承認するには、ベンダーから AWS アカウント識別子を取得し、 `Snowflakeサポート `_ にご連絡ください。
Snowflakeアカウントで AWS PrivateLink を有効にするには、次のステップを実行します。
フェデレーション認証済みトークンを生成し、出力を保存します。
トークンを生成するには、コマンドラインで AWS CLI STS コマンドを実行します。
get-federation-tokenには、 AWS のIdentity and Access Managementユーザーまたは AWS アカウントのルートユーザーが必要です。詳細については、 AWS ドキュメント をご参照ください。重要
フェデレーショントークンは12時間後に期限切れになります。Snowflakeアカウントで AWS PrivateLink の使用を承認、検証、または無効化するためのシステム関数のいずれかを呼び出した後にトークンの有効期限が切れた場合は、AWS CLI STS コマンドを再度実行してトークンを再生成してください。
aws sts get-federation-token --name sam
後のステップで、このコマンドの出力を SYSTEM$AUTHORIZE_PRIVATELINK 関数の
federated_token引数として指定します。生成されたトークンから、
"FederatedUserId"フィールドの値を抽出します。たとえば、トークンに以下の値が含まれているとします。{ ... "FederatedUser": { "FederatedUserId": "185...:sam", "Arn": "arn:aws:sts::185...:federated-user/sam" }, "PackedPolicySize": 0 }
185...を抽出します。次のステップでは、この12桁の数字を SYSTEM$AUTHORIZE_PRIVATELINK 関数のaws_id引数として指定します。
ACCOUNTADMIN Snowflakeシステムロールを使用して、 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'に使用します。SYSTEM$GET_PRIVATELINK は、承認が成功すると
Account is authorized for PrivateLink.を返します。オプション:Snowflakeアカウントで AWS PrivateLink を 無効 にする必要がある場合は、
'aws_id'と'federated_token'に同じ引数値を使用して SYSTEM$REVOKE_PRIVATELINK 関数を呼び出します。
セキュリティ体制をさらに強化するために、SnowflakeではSnowflakeアカウントのプライベートエンドポイントを固定することを推奨しています。詳細については、 インバウンドトラフィックのプライベート接続エンドポイントのピン留め をご参照ください。
AWS VPC 環境の構成¶
注意
このセクションでは、 VPC 環境を構成するためのSnowflake固有の詳細のみを説明します。
Snowflakeは、必要な AWS VPC エンドポイント、セキュリティグループルール、ドメインネームシステム( DNS )レコードの実際の構成については :emph:`責任を負いません ` 。これらの構成タスクのいずれかで問題が発生した場合は、 AWS サポートに直接お問い合わせください。
AWS VPC エンドポイントを作成して構成する¶
AWS VPC 環境で VPC エンドポイントを作成して構成するには、次のステップを実行します。
Snowflake アカウントで、 ACCOUNTADMIN システムロールを使用して SYSTEM$GET_PRIVATELINK_CONFIG 関数を呼び出し、
privatelink-vpce-idの値を記録します。AWS 環境で、前のステップで取得した
privatelink-vpce-idの値を使用して VPC エンドポイントを作成します。注釈
VPC エンドポイントのSnowflakeリージョンが AWS VPC のリージョンと異なる場合、クロスリージョン接続を有効にするために2つの選択を行う必要があります。AWS VPC コンソールで Enable Cross Region endpoint を選択し、 Service Settings » Service Region でサービスのプライマリリージョンを選択します。
詳細な手順については、 AWS ドキュメントの クロスリージョン接続の構成 の詳細な設定手順をご参照ください。
アカウントのリージョン名を見つける方法については、 アカウントのリージョンのクラウドプロバイダー名を見つける をご参照ください。
AWS 環境で、Snowflakeの送信接続を VPCE CIDR (クラスレスドメイン間ルーティング)のポート
443および80に接続する、サービスのセキュリティグループを承認します。
詳細については、 AWS ドキュメントの以下のトピックをご参照ください。
アカウントのリージョンのクラウドプロバイダー名を見つける¶
SnowflakeとSnowflakeアカウントをホストするクラウドプロバイダーは、Snowflakeサービスをホストするリージョンに対して類似しているが異なる名前を使用します。システム関数を使用して、リージョン間の接続を確立するために使用するリージョン名を検索できます。Snowflakeアカウントをホストしているリージョンのクラウドプロバイダー名を確認するには、次の手順に従います。
CURRENT_REGION および SHOW REGIONS コマンドを実行します。
SHOW REGIONS で返される出力で、SELECT CURRENT REGION が返す出力と一致する
snowflake_region列の値を示す行を見つけます。この行の
region列の値は、Snowflakeアカウントをホストするリージョンのクラウドプロバイダーの名前です。
次の例では、 us-west-2 は、Snowflakeアカウントをホストする AWS_US_WEST という名前のリージョンのクラウドプロバイダーの名前です。
SELECT CURRENT_REGION();
出力:
+------------------+
| CURRENT_REGION() |
|------------------|
| AWS_US_WEST_2 |
+------------------+
SHOW REGIONS;
出力:
+------------------+-------+-----------|-----------------+
| snowflake_region | cloud | region | display_name |
|------------------|-------|-----------|-----------------|
| AWS_US_WEST_2 | aws | us-west-2 | US West (Oregon)|
+------------------+-------+-----------+-----------------+
VPC ネットワークを構成する¶
AWS PrivateLink エンドポイントを使用してSnowflakeにアクセスするには、 DNS に正規名( CNAME )レコードを作成して、 SYSTEM$GET_PRIVATELINK_CONFIG 関数からの適切なエンドポイント値を VPC エンドポイントの DNS 名に解決する必要があります。
SYSTEM$GET_PRIVATELINK_CONFIG の出力から取得する値は、プライベート接続を使用してアクセスするSnowflakeの機能によって異なります。取り得る値の説明については、 戻り値 を参照してください。
regionless-snowsight-privatelink-url と snowsight-privatelink-url の値により、プライベート接続を使用して Snowsight と Snowflake Marketplace にアクセスできることに注意してください。ただし、 URL リダイレクトを有効にする場合は、追加の構成があります。情報については、 Snowsightおよびプライベート接続 をご覧ください。
DNS 構成の詳細については、内部の AWS 管理者にお問い合わせください。
重要
オンライン証明書ステータスプロトコル( OCSP )キャッシュサーバーのホスト名の構造は、 Snowflakeクライアントの構成 で説明されているように、インストールされているクライアントのバージョンによって異なります。
記載されているバージョンまたはそれ以降のバージョンを使用する場合は、 Snowflakeクライアントの構成 に示されている形式を使用してください。この形式を使用すると、同じリージョンに複数のSnowflakeアカウント(開発、テスト、本番など)がある場合に、 DNS の解決が向上します。クライアントドライバーを更新して OCSP を PrivateLink と共に使用する場合、ファイアウォールルールを更新して OCSP ホスト名を許可します。
それ以前のバージョンのクライアントを使用している場合、 OCSP キャッシュサーバーのホスト名は、 :doc:` アカウント識別子 </user-guide/admin-account-identifier>` のない
ocsp.region_id.privatelink.snowflakecomputing.comの形式になります。DNS 記録は、 VPC 内のプライベート IP アドレスに解決される必要があります。パブリック アドレスに解決される場合は、記録が正しく構成されていません。
ステップ3:Amazon S3用 AWS VPC インターフェイスエンドポイントを作成する¶
このステップは、SnowflakeクライアントからのAmazon S3トラフィックが AWS バックボーンにとどまるために必要です。Snowflakeクライアント(例: Snowflake CLI 、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ゲートウェイエンドポイントを構成して、特定のユーザー、Amazon S3リソース、ルート、およびサブネットへのアクセスを制限できますが、Snowflakeではこの構成を必要としません。詳細については、 Amazon S3のゲートウェイエンドポイント をご参照ください。
Amazon S3ゲートウェイがSnowflake用のAmazon S3リソースのみを使用するように制限するには、以下のオプションのいずれかを選択します。
AWS エンドポイントポリシーで、Snowflakeアカウントで使用される特定のAmazon S3ホスト名アドレスを使用します。アカウントで使用されるホスト名の完全なリストについては、 SYSTEM$ALLOWLIST をご参照ください。
AWS エンドポイントポリシーでSnowflake S3ホスト名と一致するAmazon S3ホスト名パターンを使用します。このオプションでは、Snowflakeへの接続には VPC-to-VPC と On-Premises-to-VPC の2種類の可能なタイプがあります。
接続タイプに応じて、次の手順を実行します。
- VPC ツー VPC:
Amazon S3ゲートウェイエンドポイントが存在することを確認します。オプションで、次のAmazon S3ホスト名の表に示されている特定のホスト名パターンと一致するようにAmazon S3ゲートウェイエンドポイントポリシーを変更します。
- オンプレミスツー VPC:
Amazon S3トラフィックがパブリックゲートウェイで許可されて いないときは、ファイアウォールまたはプロキシ構成にAmazon 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に接続する前に、*オプション*で Snowflake接続診断ツール( SnowCD )を使用して、Snowflakeと AWS PrivateLink とのネットワーク接続を評価できます。
詳細については、 SnowCD および SYSTEM$ALLOWLIST_PRIVATELINK をご参照ください。
それ以外の場合は、プライベート接続アカウント URL を使用してSnowflakeに接続します。
AWS PrivateLink を介してSnowsightに接続する場合は、 Snowsightドキュメント の手順に従います。
パブリックアクセスのブロック --- 推奨¶
AWS PrivateLink を使用してSnowflakeへのプライベート接続をテストした後、オプションでSnowflakeへのパブリックアクセスをブロックできます。つまり、ユーザーは、接続リクエストがSnowflakeネットワークポリシーで指定された特定の IP ブロック範囲内の CIDR アドレスから発信された場合にのみSnowflakeにアクセスできます。
ネットワークポリシーを使用してパブリックアクセスをブロックするには、
新しいネットワークポリシーを作成するか、既存のネットワークポリシーを編集します。
組織の CIDR ブロック範囲を追加します。
アカウントのネットワークポリシーをアクティブにします。
詳細については、 ネットワークポリシーを使用したネットワークトラフィックの制御 をご参照ください。
Snowflakeクライアントの構成¶
以下のセクションでは、特定のユースケースに対応するSnowflakeクライアントの構成方法について説明します。
Snowflakeクライアントが OCSP キャッシュサーバーをサポートしていることを確認する¶
Snowflake OCSP キャッシュサーバーは、Snowflakeクライアントとサーバー間の接続の問題を軽減します。インストール済みのSnowflakeクライアントが OCSP サーバーキャッシュを使用できるようにするには、以下のクライアントバージョンを使用していることを確認してください。
Snowflake CLI 3.0.0(またはそれ以上)
SnowSQL 1.1.57 (またはそれ以上)
Pythonコネクタ 1.8.2(またはそれ以上)
JDBC ドライバー3.8.3(またはそれ以上)
ODBC ドライバー2.19.3(またはそれ以上)
注釈
Snowflake OCSP キャッシュサーバーはポート 80 でリッスンします。そのため、 AWS VPC エンドポイントを作成して構成する で AWS PrivateLink VPCE セキュリティグループがポート 80 とポート 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セグメントを含む アカウント識別子 (<account_identifier>.privatelink. Snowflake concatenates this name withsnowflakecomputing.com)を指定して、ホスト名を動的に構築します。
Snowflakeクライアントのアカウント名またはホスト名の指定の詳細については、各クライアントのドキュメントをご参照ください。
AWS PrivateLink と SSO の併用¶
Snowflakeは、AWS PrivateLinkでSSOの使用をサポートしています。詳細については、次をご参照ください。
AWS PrivateLink でのクライアントリダイレクトの使用¶
Snowflakeは、 AWS PrivateLink でのクライアントリダイレクトの使用をサポートしています。
詳細については、 クライアント接続のリダイレクト をご参照ください。
プライベート接続での複製と Tri-Secret Secure の使用¶
Snowflakeは、ターゲットアカウントで Tri-Secret Secure またはこの機能を有効にするかどうかに関係なく、ソースアカウントからターゲットアカウントへのデータの複製をサポートします。
トラブルシューティング¶
PrivateLink で発生する可能性のある問題をトラブルシューティングするには、次のSnowflakeコミュニティの記事をご参照ください。