Amazon Web Services の外部ステージへのプライベート接続

このトピックでは、 AWS の外部ステージへのアウトバウンドプライベート接続をセットアップするための構成の詳細を説明します。アウトバウンドパブリック接続とアウトバウンドプライベート接続の主な違いは、ストレージ統合またはステージの構成方法です。例えば、ストレージ統合に USE_PRIVATELINK_ENDPOINT プロパティを指定し、外部ステージでこのストレージ統合を参照することができます。外部ステージは、ストレージ統合からプライベートエンドポイントの構成を継承します。その後、 AWS S3ステージへの接続は、 AWS 内部ネットワークを経由します。アウトバウンドプライベート接続を使用するようにストレージ統合とステージを構成することで、ストレージアカウントへのパブリックアクセスをブロックし、データアンロードオペレーションにさらなるセキュリティを追加します。

アウトバウンド プライベート接続コスト

各プライベート・コネクティビティ・エンドポイントの料金は、処理されるデータ総量に応じて支払われます。これらのアイテムの価格については、 Snowflake Service Consumption Table をご参照ください。

ACCOUNT_USAGE および ORGANIZATION_USAGE スキーマで請求ビューをクエリする際、以下のサービスタイプでフィルターをかけることで、これらの項目のコストを調べることができます。

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

例えば、 USAGE_IN_CURRENCY_DAILY 表示をクエリし、これらのサービスタイプでフィルターをかけることができます。

考慮事項

同じストレージアカウントに対して、アウトバウンドパブリック接続とアウトバウンドプライベート接続を構成できます。この場合、アウトバウンドパブリック接続専用のストレージ統合を作成し、 USE_PRIVATELINK_ENDPOINT = FALSE を指定します。

構文の更新

ストレージ統合

1つ以上のロケーションを持つストレージ統合を作成するときに、 USE_PRIVATELINK_ENDPOINT プロパティを指定できます。

CREATE OR REPLACE STORAGE INTEGRATION my_int
  ...
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

ストレージ統合を変更し、 USE_PRIVATELINK_ENDPOINT プロパティをセットできます。

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
外部ステージ

USE_PRIVATELINK_ENDPOINT プロパティを指定するストレージ統合を参照するステージは、プライベートエンドポイント構成を継承します。結果、ステージで USE_PRIVATELINK_ENDPOINT プロパティを指定する必要はなく、ステージを変更して USE_PRIVATELINK_ENDPOINT プロパティをセットすることもできません。

ストレージ統合を参照する代わりにステージの CREDENTIALS プロパティを使用する場合、ステージを作成または変更するときに USE_PRIVATELINK_ENDPOINT プロパティを指定する必要があります。

CREATE OR REPLACE STAGE my_sas_private_stage
  URL = '...'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

ALTER STAGE my_sas_private_stage
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

DESCRIBE STAGE コマンドは、 USE_PRIVATELINK_ENDPOINT プロパティとその値を含みます。

外部ステージアクセスの構成

これらの手順は、 AWS の外部ステージにデータをアンロードするために、ストレージ統合でアウトバウンドプライベート接続を使用する場合に固有のものです。ストレージ統合を参照する代わりにステージの CREDENTIALS プロパティを使用する場合は、フローを変更する必要があります。

  1. Snowflakeで、 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出して、Snowflake VNet にプライベート接続エンドポイントをプロビジョニングし、Snowflakeがプライベート接続を使用して外部 AWS S3ストレージに接続できるようにします。

    次の例で示すように、 AWS S3バケットを個別に指定するのではなく、ワイルドカード文字(*)を使用する必要があります。ワイルドカードを使用しても、すべてのS3バケットがプライベート接続でアクセスされるわけではありません。VPC エンドポイントを経由してアクセスできるのは、プライベート接続に構成された外部ステージから参照されるバケットのみです。

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
        'com.amazonaws.us-west-2.s3',
        '*.s3.us-west-2.amazonaws.com');
    

    この関数はプライベートエンドポイントをホスト名にバインドし、ストレージ統合がプライベートエンドポイントを使用してストレージロケーションに接続できるようにします。

  2. Snowflakeで、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 関数を呼び出します。

    When the output of the function includes "status": "APPROVED", your connection from Snowflake to your storage account will be able to use private connectivity (after the other necessary Snowflake objects are enabled for outbound private connectivity).

    "APPROVED" のステータスを待つ間、次のステップに進むことができます。

  3. バケットポリシーを以下のように更新して、S3バケットへのアクセスを VPC エンドポイント経由のみに制限します。

    {
      "Sid": "AccesstospecificVPCEonly",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::001234567890:role/myrole"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::mybucket1",
        "arn:aws:s3:::mybucket1/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-01c31eb5f4a1e817d"
        }
      }
    }
    
  4. 限定 STORAGE_AWS_ROLE_ARN ロールと USE_PRIVATELINK_ENDPOINT プロパティの両方を指定するストレージ統合を作成します。

    CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = 'S3'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
      STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/')
      USE_PRIVATELINK_ENDPOINT = TRUE
      ENABLED = TRUE;
    

    注釈

    ストレージ統合のロールの作成に関する情報については、 Amazon S3にアクセスするための Snowflake ストレージ統合の構成 を参照してください。

  5. ストレージ統合を参照する外部ステージを作成します。

    CREATE OR REPLACE STAGE my_storage_private_stage
      URL = 's3://mybucket1/path1/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
  6. プライベートエンドポイントが「APPROVED」ステータスになったら、Snowflakeから外部ステージへのデータのアンロードをテストします。

    COPY INTO @my_storage_private_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
  7. 結果を AWS ステージで表示します。

エンドポイントのデプロビジョン

外部ステージのプライベート接続エンドポイントが不要になった場合は、ステージまたはストレージ統合の USE_PRIVATELINK_ENDPOINT プロパティを設定解除してから、 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出します。