<やりたいこと>
AWSのS3バケットを外部ステージとして設定することで、S3バケットからSnowflakeのテーブルにCOPYコマンドでデータロードできます。
外部ステージを使ってデータロードする際、以下①~②の方法で、S3バケットへのアクセス権をSnowflakeに付与できます。
セキュリティの強化を考えると、①の"ストレージ統合を参照"の方が推奨されます。
ストレージ統合には、以下のセキュリティ上のメリットがあります。
・IAMロールでS3にアクセスできるため、アクセスキーやシークレットアクセスキーの認証情報の漏洩の心配がない
・SnowflakeからアクセスできるS3バケットとそのフォルダを制限できる
②の"アクセスキー + シークレットアクセスキーの指定"では、認証情報の漏洩のリスクがあります。
Snowflakeの管理者からすると、とくに本番環境では、①の"ストレージ統合を参照"での運用を希望すると思います。
Snowflakeの以下のアカウントパラメータを使用することで、アクセス権を付与する方法を①の"ストレージ統合を参照"のみに制限できます。
・REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION
⇒TRUEにすると、S3バケットにアクセスする外部ステージを作成するときに、ストレージ統合を指定しないとエラーになります。
・REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION
⇒TRUEにすると、S3バケットからデータロードするには、ストレージ統合を参照する外部ステージを使用しなければなりません。アクセスキーを使うと、エラーになります。
Snowflakeパラメータを設定するDDLは、以下になります。
alter account set REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION = TRUE;
alter account set REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION = TRUE;
<検証>
Snowflakeパラメータの効果を確認するため以下の検証を行います。
①ストレージ統合を参照しない外部ステージを作成できるかどうか(「REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION」の効力を確認)
②外部ステージ経由でのデータロードの際にアクセスキー + シークレットアクセスキーを指定できるか
(「REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION」の効力を確認)
①ストレージ統合を参照しない外部ステージを作成できるかどうか
①-1「REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION」にTRUEにする
①-2ストレージ統合を参照しない外部ステージを作成できないことを確認
②外部ステージ経由でのデータロードの際にアクセスキー + シークレットアクセスキーを指定できるか
②-1「REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION」にTRUEにする
②-2ストレージ統合を参照しない外部ステージ経由でのCOPYがエラーになることを確認
以下のCOPYコマンドでは、外部ステージ「my_stg_orc_dev」はストレージ統合を参照しないため、アクセスキーとシークレットアクセスキーを指定して認証します。
おわりに
開発標準等で運用ルールを決めることはもちろん重要ですが、Snowflakeのパラメータを使うことで許可する操作を決めることができます。私もパラメータについては、使い慣れていないため、運用を統一する上で有効なパラメータが他にないか勉強してみようと思います。
ご案内
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area