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アカウントとは異なるクラウドプラットフォームにある場合、ストレージの場所は仮想プライベート環境ではなく、パブリッククラウドにある必要があります。
クラウドプロバイダーは、各自のネットワークから転送されたデータ分を課金します。Snowflake(Amazon Web Services(AWS)、Google Cloud Platform、またはMicrosoft Azureでホストされている)から別の 地域 または異なるクラウドプロバイダーの外部ステージにデータがアンロードされる場合、これらの費用を回収するためにSnowflakeは、バイトごとの料金を請求します。Snowflakeは、データの入力(つまり、Snowflakeにデータをロードする場合)に対しては請求しません。詳細については、 価格設定ページ (Snowflakeウェブサイト)をご参照ください。
現在、ストレージ統合を使用した 政府リージョン のクラウドストレージへのアクセスは、同じ政府リージョンでホストされているSnowflakeアカウントに限定されています。直接認証情報を使用した、政府リージョン外でホストされているアカウントからクラウドストレージへのアクセスがサポートされています。
- こちらもご参照ください。
ALTER STORAGE INTEGRATION 、 DROP INTEGRATION 、 SHOW 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_EXTERNAL_ID = '<external_id>' ] [ 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>'
必須パラメーター¶
name
統合の識別子(つまり、名前)を指定する文字列。アカウント内で一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
TYPE = EXTERNAL_STAGE
統合のタイプを指定します。
EXTERNAL_STAGE
:Snowflakeと外部クラウドストレージの場所の間のインターフェイスを作成します。
ENABLED = TRUE | FALSE
このストレージ統合を段階的に使用できるかどうかを指定します。
TRUE
は、ユーザーがこの統合を参照する新しいステージを作成できます。この統合機能を通常参照する既存のステージ。FALSE
は、ユーザーがこの統合を参照する新しいステージを作成できないようにします。この統合を参照する既存のステージは、ステージ定義の保存場所にアクセスできません。
STORAGE_ALLOWED_LOCATIONS = ('cloud_specific_url')
統合を使用する外部ステージが1つ以上のストレージの場所(つまり、S3バケット、 GCS バケット、またはAzureコンテナー)を参照することを明示的に制限します。既存のバケットのコンマ区切りリスト URLs をサポートし、オプションで、ロード/アンロード用のデータファイルの保存に使用されるパスをサポートします。または、「すべてのバケットやパスへのアクセスを許可する」という意味の
*
ワイルドカードをサポートしています。STORAGE_ALLOWED_LOCATIONS
値に特定のストレージの場所が含まれている場合は、同じ場所にあるすべてのサブパスを許可する必要があることに注意してください。STORAGE_BLOCKED_LOCATIONS
値にサブパスを含めることはできません。たとえば、STORAGE_ALLOWED_LOCATIONS
にstorage_location/
が含まれている場合は、STORAGE_BLOCKED_LOCATIONS
にstorage_location/path1/
を含めることはできません。同様に、STORAGE_ALLOWED_LOCATIONS
にstorage_location/path1/
が含まれている場合は、STORAGE_BLOCKED_LOCATIONS
にstorage_location/path1/path2/
を含めることはできません。Amazon S3
STORAGE_ALLOWED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] )
|STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )
s3
プレフィックスは、パブリック AWS リージョンのS3ストレージを参照します。s3gov
プレフィックスは、 政府リージョン のS3ストレージを参照します。bucket
は、データファイルを保存するS3バケットの名前です(例:mybucket
)。path
は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。
Google Cloud Storage
STORAGE_ALLOWED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )
bucket
は、データファイルを保存する GCS バケットの名前です(例:mybucket
)。path
は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。
Microsoft Azure
STORAGE_ALLOWED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )
account
は、Azureストレージの名前です(例:myaccount
)。Data Lake Storage Gen2を含む、サポートされているすべてのタイプのAzure BLOBストレージアカウントに、blob.core.windows.net
エンドポイントを使用します。container
は、データファイルを保存するAzure BLOBストレージコンテナーの名前です(例:mycontainer
)。path
は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。
オプションのパラメーター¶
STORAGE_BLOCKED_LOCATIONS = ('cloud_specific_url')
統合を使用する外部ステージが1つ以上のストレージの場所(つまり、S3バケットまたは GCS バケット)を参照することを明示的に禁止します。既存の保存場所の URLs のコンマ区切りリスト、およびオプションで、ロード/アンロード用のデータファイルの保存に使用されるパスをサポートします。一般的に STORAGE_ALLOWED_LOCATIONS が
*
ワイルドカードに設定されている場合に使用され、アカウントのすべてのバケットへのアクセスを許可しますが、ブロックされた保管場所および、任意でパスは 例外 です。注釈
個々のクラウドストレージの場所 URLs のみを引用符で囲んでください。
STORAGE_BLOCKED_LOCATIONS
値全体を引用符で囲むと、その値は無効になります。その結果として、ユーザーがストレージ統合を参照するステージを作成すると、STORAGE_BLOCKED_LOCATIONS
パラメーター設定は無視されます。Amazon S3
STORAGE_BLOCKED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] )
|STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )
s3
プレフィックスは、パブリック AWS リージョンのS3ストレージを参照します。s3gov
プレフィックスは、 政府リージョン のS3ストレージを参照します。bucket
は、データファイルを保存するS3バケットの名前です(例:mybucket
)。path
は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。
Google Cloud Storage
STORAGE_BLOCKED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )
bucket
は、データファイルを保存する GCS バケットの名前です(例:mybucket
)。path
は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。
Microsoft Azure
STORAGE_BLOCKED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )
account
は、Azureストレージの名前です(例:myaccount
)。container
は、データファイルを保存するAzure BLOBストレージコンテナーの名前です(例:mycontainer
)。path
は、データファイルへのアクセスをさらに制限するバケット内のオプションのパス(または ディレクトリ)です。
COMMENT = 'string_literal'
統合のコメントを指定する文字列(リテラル)。
デフォルト: 値なし
クラウドプロバイダーのパラメーター(cloudProviderParams
)¶
Amazon S3
STORAGE_PROVIDER = { S3 | S3GOV }
データファイルを保存するクラウドストレージプロバイダーを指定します。
S3: パブリック AWS リージョンのS3ストレージ。
S3GOV: AWS 政府リージョンのS3ストレージ。
STORAGE_AWS_ROLE_ARN = 'iam_role'
データファイルを含むS3バケットに対する権限を付与する AWS IDおよびアクセス管理(IAM)ロールのAmazonリソースネーム(ARN)を指定します。詳細については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。
STORAGE_AWS_EXTERNAL_ID = 'external_id'
オプションで、Snowflakeが AWS との信頼関係を確立するために使用する外部 ID を指定します。このストレージ統合用に構成した IAM ロールの信頼ポリシーで、同じ外部 ID を指定する必要があります。詳細については、 サードパーティに AWS リソースへのアクセスを許可する場合の外部 ID の使用方法 をご参照ください。
このパラメーターに値を指定しない場合、Snowflakeはストレージ統合の作成時に自動で外部 ID を生成します。
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 = 'tenant_id'
許可およびブロックされたストレージアカウントが属するOffice 365テナントの ID を指定します。ストレージ統合は1つのテナントのみを認証できるため、許可およびブロックされたストレージの場所は、すべてこのテナントに属するストレージアカウントを参照する必要があります。
テナント ID を見つけるには、Azureポータルにログインして Azure Active Directory » Properties をクリックします。テナント ID が Tenant ID フィールドに表示されます。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE INTEGRATION |
アカウント |
Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed. |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
注意
ストレージ統合を再作成すると( CREATE OR REPLACE STORAGE INTEGRATION を使用)、ストレージ統合とそれを参照するすべてのステージとの関連付けが解除されます。これは、ステージがストレージ統合の名前ではなく、非表示の ID を使用してストレージ統合にリンクしているためです。バックグラウンドでは、 CREATE OR REPLACE 構文はオブジェクトをドロップし、別の非表示の IDでオブジェクトを再作成します。
1つ以上のステージにリンクされた後にストレージ統合を再作成する必要がある場合は、 ALTER STAGE stage_name
SET STORAGE_INTEGRATION = storage_integration_name
を実行して、各ステージとストレージ統合間の関連付けを再確立する必要があります。ここで、
stage_name
は、ステージの名前です。storage_integration_name
は、ストレージ統合の名前です。
メタデータについて、
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
例¶
次の例では、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/');