内部ステージ用の AWS VPC インターフェイスエンドポイント

このトピックでは、 AWS VPC インターフェイスエンドポイントを介してSnowflake内部ステージに接続するための概念と、詳細な手順について説明します。

このトピックの内容:

概要

AWS VPC インターフェイスエンドポイントAWS PrivateLink for Amazon S3 を組み合わせて、Snowflake内部ステージへの安全な接続を提供できます。この設定により、Snowflake内部ステージへのデータのロードとアンロードの操作には AWS 内部ネットワークを使用し、パブリックインターネットを介さないようになります。

AWS が内部ステージアクセス用の VPC インターフェイスエンドポイントをサポートする前は、Snowflake内部ステージへの安全なアクセスを容易にするため、 AWS VPC 内にプロキシファームを作成する必要がありました。Snowflake内部ステージ用の VPC インターフェイスエンドポイントのサポートが追加されたことで、ユーザーアプリケーションとクライアントアプリケーションは、プライベート AWS ネットワークを介してSnowflake内部ステージにアクセスできるようになりました。次の図は、この新しいサポートをまとめたものです。

Connect to internal stage using AWS PrivateLink for S3

BEFORE 図の番号に関して次の点に注意してください。

  • ユーザーには、Snowflake内部ステージに接続するための2つのオプションがあります。

    • オプションAは、番号1で示されているように、内部ステージへの直接のオンプレミス接続を許可します。

    • オプションBは、番号2および3で示されているように、プロキシファームを介した内部ステージへの接続を許可します。

  • プロキシファームを使用している場合、ユーザーは番号4で示されているようにSnowflakeに直接接続することもできます。

AFTER 図の番号に関して次の点に注意してください。

  • この機能の更新により、プロキシファームを介してSnowflakeまたはSnowflake内部ステージに接続する必要がなくなります。

  • オンプレミスユーザーは、番号5に示すようにSnowflakeに直接接続できます。

  • Snowflake内部ステージに接続するには、オンプレミスユーザーは、番号6のインターフェイスエンドポイントに接続し、次に番号7に示すように、 AWS PrivateLink for Amazon S3を使用してSnowflake内部ステージに接続します。

内部ステージの展開ごとに1つのAmazonS3バケットがあります。内部ステージのAmazon S3バケットの プレフィックス は、各Snowflakeアカウントのデータを整理するために使用されます。Amazon S3バケットのエンドポイント URLs は、バケットへの接続がプライベート接続を使用するかどうかによって異なります(つまり、 AWS PrivateLink for S3)。

Amazon S3グローバルパブリックエンドポイント URL

<バケット名>.s3.region.amazonaws.com/prefix

Amazon S3 プライベートエンドポイント URL

<vpceID>.s3.<リージョン>.vpce.amazonaws.com/prefix

利点

Snowflake内部ステージにアクセスするために VPC インターフェイスエンドポイントを実装すると、次の利点があります。

  • 内部ステージのデータは、パブリックインターネットを通過しません。

  • AWS VPC の外部で実行されるクライアントおよび SaaS アプリケーション(Microsoft PowerBI など)は、安全にSnowflakeに接続できます。

  • 管理者は、内部ステージデータにアクセスするためにファイアウォール設定を変更する必要がありません。

  • 管理者は、ユーザーがストレージアカウントに接続する方法に関して、一貫したセキュリティと監視を実装できます。

制限事項

AWS PrivateLink の制限については、 AWS ドキュメント をご参照ください。

はじめるにあたり

AWS とSnowflakeを構成し、 AWS PrivateLink 経由でSnowflake内部ステージにアクセスするリクエストを許可する前に、次を実行する必要があります。

前提条件

  • ENABLE_INTERNAL_STAGES_PRIVATELINK パラメーターを設定して、 AWS PrivateLink を介した内部ステージへの接続サポートを有効にします。このトピックで説明する実装戦略では、いずれもアカウント管理者が実行する必要があります。

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    
    Copy
  • AWS PrivateLink for S3

    重要

    AWS PrivateLink for S3は、クラウド環境で有効にする必要がある AWS サービスです。

    このサービスの構成と実装については、 AWS 内部管理者にお問い合わせください。

  • ファイアウォールの許可リストを次のように更新します。

    • 送信のファイアウォールを使用する場合は、Snowflakeに必要なすべての URLs が許可されていることを確認します。詳細については、 SnowCD (Connectivity Diagnostic Tool) をご参照ください。

  • us-east-1 のお客様 限定: 次のSnowflakeクライアントのいずれかを使用してSnowflakeに接続する場合は、次のようにクライアントバージョンにアップグレードします。

    • JDBC ドライバー3.13.3(またはそれ以上)

    • ODBC ドライバー2.23.2(またはそれ以上)

    • Snowflake用Pythonコネクタ: 2.5.1(またはそれ以上)

    • SnowSQL: 1.2.17 (またはそれ以上)

      • この機能を使用する前に、 SnowSQL をアップグレードします。詳細については、 SnowSQL のインストール をご参照ください。

      • SnowSQL --noup オプション を使用している場合、 SnowSQL 自動アップグレードは無効になり、新しい SnowSQL バージョンをダウンロードできないことに注意してください。アップグレードするには、 --noup オプションを無効にし、アップグレードの完了後に再度有効にします。

実装戦略の選択

適切な実装戦略の選択は、組織が AWS PrivateLink を使用して単一の内部ステージにアクセスするか、複数の内部ステージにアクセスするかに応じて異なります。

インターフェイスエンドポイントによる内部ステージへのアクセス

組織が 単一のアカウント の内部ステージにアクセスする場合は、次の実装戦略をお勧めします。VPC から複数の内部ステージにアクセスする場合は、 専用インターフェイスエンドポイントによる内部ステージへのアクセス をご参照ください。

Snowflake内部ステージにアクセスするように VPC インターフェイスエンドポイントを構成するには、組織内にある次のロール3つからのサポートが必要です。

  1. Snowflakeアカウント管理者(つまり、Snowflake ACCOUNTADMIN システムロールを持つユーザー)。

  2. AWS 管理者。

  3. ネットワーク管理者。

組織によっては、次の構成ステップを実装するために、構成作業で複数の人またはチームとの調整が必要になる場合があります。

手順

次のステップを実行して、 VPC エンドポイントを介したSnowflake内部ステージへの安全なアクセスを構成および実装します。

  1. Snowflakeアカウント管理者として、Snowflakeアカウントで次のステートメントを実行し、 privatelink_internal_stage キーで定義された値を記録します。Amazon S3バケット名は、左から右に読み取るときに URL の最初のセグメントで定義されることに注意してください。詳細については、 ENABLE_INTERNAL_STAGES_PRIVATELINK および SYSTEM$GET_PRIVATELINK_CONFIG をご参照ください。

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    select key, value from table(flatten(input=>parse_json(system$get_privatelink_config())));
    
    Copy
  2. AWS 管理者として、 AWS コンソールを使用して、 AWS PrivateLink for S3の VPC エンドポイントを作成します。次のステップで使用するためにVPCE DNS 名を記録します。 VPCE DNS ゾーン名は、記録 しません

    VPCE DNS 名は、エンドポイントの作成後に、 インターフェイスエンドポイント を説明することで検索できます。

    この例では、ワイルドカード(つまり、 *)が VPCE DNS 名の先頭文字としてリストされています。先頭のワイルドカードを前のステップのAmazonS3バケット名に置き換えます。例:

    置換

    *.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com

    使用

    <バケット名>.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com

  3. ネットワーク管理者として、次の URL を解決するように DNS 設定を更新します。

    先頭のワイルドカードがAmazonS3バケット名に置き換えられた後、 <バケット名>.s3.<リージョン>.amazonaws.com をVPCE DNS 名に変更します。

    この例では、 <バケット名>.s3.<リージョン>.amazonaws.com<バケット名>.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com に解決します。

    ちなみに

    • Snowflakeの外部にある他のAmazon S3バケットにアクセスすると影響を受ける可能性があるため、 DNS マッピングでワイルドカード文字(つまり *)は使用しないでください。

    • テストには別のSnowflakeアカウントを使用し、テスト VPC でプライベートホスト DNS ゾーンを構成して機能をテストすることにより、テストが分離されて他のワークロードに影響を与えないようにします。

    • 別のSnowflakeアカウントを使用できない場合は、テストユーザーを使用して、 DNS の変更を実行したテスト VPC からSnowflakeにアクセスします。

    • オンプレミスアプリケーションからテストするには、 DNS 転送を使用して、 DNS を設定する VPC 内にある AWS プライベートホストゾーンにリクエストを転送します。VPC とオンプレミスの両方にクライアントアプリケーションがある場合は、 AWS Transit Gatewayを使用します。

    • クライアントマシンから次のコマンドを実行して、返された IP アドレスがストレージアカウントのプライベート IP アドレスであることを確認します。

      dig <bucket_name>.s3.<region>.amazonaws.com
      
      Copy
  4. us-east-1 にあるSnowflakeアカウントの場合は、Snowflakeクライアントが最新バージョンであることを確認します。

専用インターフェイスエンドポイントによる内部ステージへのアクセス

組織が 複数のアカウント の内部ステージにアクセスする場合は、次の実装戦略をお勧めします。

S3_STAGE_VPCE_DNS_NAME パラメーターを使用すると、SnowflakeアカウントをAmazon S3インタフェイスエンドポイントの DNS 名に関連付けることができます。これにより、 AWS 展開で複数のSnowflakeアカウントを持つ組織は、各内部ステージを異なるインターフェイスエンドポイントに関連付けることができます。各内部ステージが独自のインターフェイスエンドポイントを持つ場合、特定の内部ステージへのネットワークトラフィックは、他の内部ステージへのネットワークトラフィックから隔離されます。

続行する前に、 前提条件を満たしている ことを確認してください。

利点

AWS 展開内の内部ステージが専用のAmazon S3インターフェイスエンドポイントを持つ戦略には、次のような利点があります。

セキュリティ

個々のインターフェイスエンドポイントは異なるセキュリティ構成を持つことができるため、各アカウントは異なるセキュリティ戦略を持つことができます。

チャージバックモデル

企業は、アカウントの種類(本番用と開発用など)に基づいてネットワークトラフィックを分離し、エンドポイントを流れるデータに関連するコストを正しいアカウントに帰属させることができます。

DNS 管理

Amazon S3インタフェイスエンドポイントの DNS 名は、特定のリージョン内で特定のエンドポイントを特定するグローバルに一意な名前です。AWS は自動的にこの DNS 名をパブリック DNS サービスに登録します。これは、公的に解決可能であるという意味です。これらの理由から、管理者は Amazon S3 インタフェイスエンドポイントを介して内部ステージにトラフィックをルーティングするために、 DNS 構成を追加する必要はありません。たとえば、管理者はAmazon Route 53 DNS サービスを構成する際にプライベートホストゾーン(PHZ)を設定したり、エンドポイントを指す DNS 名を登録したりする 必要はありません

設定

ネットワーク分離戦略は次のように構成されています。

  1. AWS では、管理者は組織内のすべてのSnowflakeアカウントに対して新しいAmazon S3インターフェイスエンドポイントを作成します。たとえば、Snowflakeの展開に2つのアカウントがある場合、管理者は2つのインターフェイスのエンドポイントを作成します。

  2. Snowflakeでは、管理者はS3_STAGE_VPCE_DNS_NAME パラメーターを使用して、各Snowflakeアカウントと専用インタフェイスのエンドポイントの DNS 名を関連付けます。アカウント内部ステージへのすべてのトラフィックは、このインターフェイスエンドポイントを経由します。

AWS 設定

VPC で AWS 管理者として:

  1. Snowflakeアカウントごとに 個別のAmazon S3インターフェイスエンドポイントを作成 します。

  2. これらのエンドポイントごとに、 AWS VPC 管理コンソールを使用して次を行います。

    1. エンドポイントを開いて Details を表示します。

    2. DNS Names フィールドを見つけて、リージョンスコープ DNS 名をコピーします。SnowflakeのS3_STAGE_VPCE_DNS_NAME パラメーターはこの値に設定されます。

      リージョンスコープ DNS 名の書式は *.vpce-sd98fs0d9f8g.s3.us-west-2.vpce.amazonaws.com のようになります。AWS にもアベイラビリティゾーン DNS 名が用意されていますが、Snowflakeでは、フェールオーバー機能による高可用性を実現するため、リージョンスコープ DNS 名を推奨しています。

Snowflakeの構成

AWS 管理者がSnowflakeアカウントの内部ステージのインターフェイスエンドポイントを作成した後、Snowflake管理者はS3_STAGE_VPCE_DNS_NAME パラメーターを使用して、そのエンドポイントの DNS 名をアカウントに関連付けることができます。

S3_STAGE_VPCE_DNS_NAME パラメーターは、特定の内部ステージに関連付けられたインターフェイスエンドポイントのリージョンスコープ DNS 名に設定する必要があります。標準形式はアスタリスク(*)で始まり、 vpce.amazonaws.com で終わります(例: *.vpce-sd98fs0d9f8g.s3.us-west-2.vpce.amazonaws.com)。

一例として、アカウント管理者はエンドポイントを現在のアカウントに関連付けるために次のように実行できます。

alter account set S3_STAGE_VPCE_DNS_NAME='*.vpce-sd98fs0d9f8g.s3.us-west2.vpce.amazonaws.com';
Copy

最終的な DNS 値

アカウントに関連付けられた最終的な DNS 名の形式: <bucketname>.bucket.vpce-<vpceid>.s3.<region>.vpce.amazonaws.com

条件:

  • <bucketname> は、内部ステージのAmazon S3バケットの名前です。

  • <vpceid> は、アカウントに関連付けられたAmazon S3インターフェイスのエンドポイントの一意の識別子です。

  • <region> は、 クラウドリージョン で、Snowflakeアカウントをホストします。

最終的な DNS 名は、内部ステージに接続する各ドライバーのログに表示されます。