外部ステージへの AWS プライベート接続¶
このトピックでは、 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
プロパティを使用する場合は、フローを変更する必要があります。
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');
この関数はプライベートエンドポイントをホスト名にバインドし、ストレージ統合がプライベートエンドポイントを使用してストレージロケーションに接続できるようにします。
Snowflakeで、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 関数を呼び出します。
関数の出力に
"status": "APPROVED
が含まれる場合、Snowflakeからストレージアカウントへの接続はプライベート接続を使用できるようになります(他の必要なSnowflakeオブジェクトがアウトバウンドプライベート接続で有効になった後)。"APPROVED"
のステータスを待つ間、次のステップに進むことができます。バケットポリシーを以下のように更新して、S3バケットへのアクセスを VPC エンドポイント経由のみに制限します。
{ "Sid": "Access-to-specific-VPCE-only", "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" }, }, }
限定
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;
ストレージ統合を参照する外部ステージを作成します。
CREATE OR REPLACE STAGE my_storage_private_stage URL = 's3://mybucket1/path1/' STORAGE_INTEGRATION = outbound_private_link_int;
プライベートエンドポイントが「APPROVED」ステータスになったら、Snowflakeから外部ステージへのデータのアンロードをテストします。
COPY INTO @my_storage_private_stage FROM mytable FILE_FORMAT = (FORMAT_NAME = my_csv_format);
結果を AWS ステージで表示します。
エンドポイントのデプロビジョン¶
外部ステージのプライベート接続エンドポイントが不要になった場合は、ステージまたはストレージ統合の USE_PRIVATELINK_ENDPOINT
プロパティを設定解除してから、 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出します。