カテゴリ:

ユーザーとセキュリティ DDL (サードパーティのサービス統合)

CREATE STORAGE INTEGRATION

アカウントに新しいストレージ統合を作成するか、既存の統合を置き換えます。

ストレージ統合は、外部クラウドストレージ用に生成されたIDおよびアクセス管理(IAM)エンティティを、許可またはブロックされたストレージの場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)のオプションセットとともに格納するSnowflakeオブジェクトです。組織のクラウドプロバイダー管理者は、生成されたエンティティにストレージの場所に対するアクセス許可を付与します。このオプションにより、ユーザーは、ステージの作成時またはデータのロードまたはアンロード時に認証情報の提供を回避できます。

単一のストレージ統合は、複数の外部ステージをサポートできます。ステージ定義にある URL は、 STORAGE_ALLOWED_LOCATIONS パラメーターのために指定された保管場所に合わせる必要があります。

注釈

Snowflakeアカウントをホストするクラウドプロバイダーに関係なく、Amazon S3、Google Cloud Storage、またはMicrosoft Azureクラウドストレージをサポートするようにストレージ統合を構成できます。

クラウドプロバイダーは、各自のネットワークから転送されたデータ分を課金します。Snowflake(Amazon Web Services(AWS)、Google Cloud Platform、またはMicrosoft Azureでホストされている)から別の 地域 または異なるクラウドプロバイダーの外部ステージにデータがアンロードされる場合、これらの費用を回収するためにSnowflakeは、バイトごとの料金を請求します。Snowflakeは、データの入力(つまり、Snowflakeにデータをロードする場合)に対しては請求しません。詳細については、 価格設定ページ (Snowflake Webサイト)をご参照ください。

こちらもご参照ください:

ALTER STORAGE INTEGRATIONDROP INTEGRATIONSHOW INTEGRATIONS

このトピックの内容:

構文

CREATE [ OR REPLACE ] STORAGE INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_STAGE
  cloudProviderParams
  ENABLED = { TRUE | FALSE }
  STORAGE_ALLOWED_LOCATIONS = ('<cloud>://<bucket>/<path>/', '<cloud>://<bucket>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('<cloud>://<bucket>/<path>/', '<cloud>://<bucket>/<path>/') ]
  [ COMMENT = '<string_literal>' ]

条件:

cloudProviderParams (for Amazon S3) ::=
  STORAGE_PROVIDER = S3
  STORAGE_AWS_ROLE_ARN = '<iam_role>'
  [ STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' ]
cloudProviderParams (for Google Cloud Storage) ::=
  STORAGE_PROVIDER = GCS
cloudProviderParams (for Microsoft Azure) ::=
  STORAGE_PROVIDER = AZURE
  AZURE_TENANT_ID = '<tenant_id>'

必須パラメーター

名前

統合の識別子(つまり、名前)を指定する文字列。アカウント内で一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

TYPE = EXTERNAL_STAGE

統合の型を指定します。

  • EXTERNAL_STAGE :Snowflakeと外部クラウドストレージの場所の間のインターフェイスを作成します。

ENABLED = TRUE | FALSE

このストレージ統合を段階的に使用できるかどうかを指定します。

  • TRUE は、ユーザーがこの統合を参照する新しいステージを作成できます。この統合機能を通常参照する既存のステージ。

  • FALSE は、ユーザーがこの統合を参照する新しいステージを作成できないようにします。この統合を参照する既存のステージは、ステージ定義の保存場所にアクセスできません。

STORAGE_ALLOWED_LOCATIONS = ('クラウド固有のURL')

統合を使用する外部ステージが1つ以上のストレージの場所(つまり、S3バケット、 GCS バケット、またはAzureコンテナー)を参照することを明示的に制限します。既存のバケットのコンマ区切りリスト URLs をサポートし、オプションで、ロード/アンロード用のデータファイルの保存に使用されるパスをサポートします。または、「すべてのバケットやパスへのアクセスを許可する」という意味の * ワイルドカードをサポートしています。

STORAGE_ALLOWED_LOCATIONS 値に特定のストレージの場所が含まれている場合は、同じ場所にあるすべてのサブパスを許可する必要があることに注意してください。 STORAGE_BLOCKED_LOCATIONS 値にサブパスを含めることはできません。たとえば、 STORAGE_ALLOWED_LOCATIONSストレージの場所/ が含まれている場合は、 STORAGE_BLOCKED_LOCATIONSストレージの場所/path1/ を含めることはできません。同様に、 STORAGE_ALLOWED_LOCATIONSストレージの場所/path1/ が含まれている場合、 STORAGE_BLOCKED_LOCATIONS には ストレージの場所/path1/path2/ を含めることはできません。

Amazon S3

STORAGE_ALLOWED_LOCATIONS = ('s3://バケット/パス/', 's3://バケット/パス/')

  • バケット は、データファイルを保存するS3バケットの名前です(例: mybucket)。

  • パス は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。

Google Cloud Storage

STORAGE_ALLOWED_LOCATIONS = ('gcs://バケット/パス/', 'gcs://バケット/パス/')

  • バケット は、データファイルを保存する GCS バケットの名前です(例: mybucket)。

  • パス は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。

Microsoft Azure

STORAGE_ALLOWED_LOCATIONS = ('azure://アカウント.blob.core.windows.net/コンテナー/パス/', 'azure://アカウント.blob.core.windows.net/コンテナー/パス/')

  • アカウント は、Azureストレージの名前です(例: myaccount)。Data Lake Storage Gen2を含む、サポートされているすべてのタイプのAzure BLOBストレージアカウントに、 blob.core.windows.net エンドポイントを使用します。

  • コンテナー は、データファイルを保存するAzure BLOBストレージコンテナーの名前です(例: mycontainer)。

  • パス は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。

オプションのパラメーター

STORAGE_BLOCKED_LOCATIONS = ('クラウド固有のURL')

統合を使用する外部ステージが1つ以上のストレージの場所(つまり、S3バケットまたは GCS バケット)を参照することを明示的に禁止します。既存の保存場所の URLs のコンマ区切りリスト、およびオプションで、ロード/アンロード用のデータファイルの保存に使用されるパスをサポートします。一般的に STORAGE_ALLOWED_LOCATIONS が * ワイルドカードに設定されている場合に使用され、アカウントのすべてのバケットへのアクセスを許可しますが、ブロックされた保管場所および、任意でパスは 例外 です。

Amazon S3

STORAGE_BLOCKED_LOCATIONS = ('s3://バケット/パス/', 's3://バケット/パス/')

  • バケット は、データファイルを保存するS3バケットの名前です(例: mybucket)。

  • パス は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。

Google Cloud Storage

STORAGE_BLOCKED_LOCATIONS = ('gcs://バケット/パス/', 'gcs://バケット/パス/')

  • バケット は、データファイルを保存する GCS バケットの名前です(例: mybucket)。

  • パス は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。

Microsoft Azure

STORAGE_BLOCKED_LOCATIONS = ('azure://アカウント.blob.core.windows.net/コンテナー/パス/', 'azure://アカウント.blob.core.windows.net/コンテナー/パス/')

  • アカウント は、Azureストレージの名前です(例: myaccount)。

  • コンテナー は、データファイルを保存するAzure BLOBストレージコンテナーの名前です(例: mycontainer)。

  • パス は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。

COMMENT = '文字列リテラル'

統合のコメントを指定する文字列(リテラル)。

デフォルト:値なし

クラウドプロバイダーのパラメーター(cloudProviderParams

Amazon S3

STORAGE_PROVIDER = S3

データファイルを保存するクラウドストレージプロバイダーを指定します。

STORAGE_AWS_ROLE_ARN = iamロール

データファイルを含むS3バケットに対する権限を付与する AWS IDおよびアクセス管理(IAM)ロールのAmazonリソースネーム(ARN)を指定します。詳細については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。

STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'

AWS アクセス制御リスト(ACLs)のサポートを有効にして、バケット所有者に包括的な制御を付与します。アンロードされたテーブルデータからAmazonS3バケットに作成されたファイルは、 AWS Identity and Access Management(IAM)ロールによって所有されます。ACLs は、1つの AWS アカウントの IAM ロールが、1つ以上の他の AWS アカウントにある、Amazon S3バケットにアクセスするように設定されているユースケースをサポートします。ACL のサポートがないと、バケット所有者アカウントのユーザーは、ストレージ統合を使用して、外部(S3)ステージにアンロードされたデータファイルにアクセスすることはできませんでした。

ユーザーが COPY INTO <場所> を使用してS3ステージのデータファイルにSnowflakeテーブルデータをアンロードすると、アンロード操作はアンロードされたデータファイルに ACL を適用します。データファイルは、ファイルに "s3:x-amz-acl":"bucket-owner-full-control" 権限を適用し、S3バケットの所有者にファイルの完全な制御を付与します。

Google Cloud Storage

STORAGE_PROVIDER = GCS

データファイルを保存するクラウドストレージプロバイダーを指定します。

Microsoft Azure

STORAGE_PROVIDER = AZURE

データファイルを保存するクラウドストレージプロバイダーを指定します。

AZURE_TENANT_ID = 'テナントID'

許可およびブロックされたストレージアカウントが属するOffice 365テナントの ID を指定します。ストレージ統合は1つのテナントのみを認証できるため、許可およびブロックされたストレージの場所は、すべてこのテナントに属するストレージアカウントを参照する必要があります。

テナント IDを見つけるには、Azureポータルにログインして Azure Active Directory » Properties をクリックします。テナント ID が Directory ID フィールドに表示されます。

アクセス制御の要件

この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE INTEGRATION

アカウント

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 Snowflakeのアクセス制御 をご参照ください。

使用上の注意

ご用心

ストレージ統合を再作成すると( CREATE OR REPLACE STORAGE INTEGRATION を使用)、ストレージ統合とそれを参照するすべてのステージとの関連付けが解除されます。これは、ステージがストレージ統合の名前ではなく、非表示の ID を使用してストレージ統合にリンクしているためです。バックグラウンドでは、 CREATE OR REPLACE 構文はオブジェクトをドロップし、別の非表示の IDでオブジェクトを再作成します。

1つ以上のステージにリンクされた後にストレージ統合を再作成する必要がある場合は、 ALTER STAGE ステージ名 SET STORAGE_INTEGRATION = ストレージ統合名 を実行して、各ステージとストレージ統合間の関連付けを再確立する必要があります。

  • ステージ名 は、ステージの名前です。

  • ストレージ統合名 は、ストレージ統合の名前です。

  • メタデータについて、

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

次の例では、2つのバケットとパスのいずれかを参照するために統合を使用する外部ステージを明示的に制限する統合を作成します。

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = S3
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/', 's3://mybucket2/path2/');

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = GCS
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/');

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = AZURE
  ENABLED = TRUE
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_ALLOWED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path1/', 'azure://myaccount.blob.core.windows.net/mycontainer/path2/');

次の例では、統合を使用して、明示的にブロックされたもの を除く 、アカウント内の 任意 のバケットとパスを参照できる外部ステージの統合を作成します。

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = S3
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('s3://mybucket3/path3/', 's3://mybucket4/path4/');

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = GCS
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket3/path3/', 'gcs://mybucket4/path4/');

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = AZURE
  ENABLED = TRUE
  AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path3/', 'azure://myaccount.blob.core.windows.net/mycontainer/path4/');
最上部に戻る