CREATE STORAGE INTEGRATION

계정에 새 저장소 통합을 만들거나 기존 통합을 바꿉니다.

저장소 통합은 허용되거나 차단된 저장소 위치(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)의 선택적 세트와 함께, 외부 클라우드 저장소에 대해 생성된 ID 및 액세스 관리(IAM) 엔터티를 저장하는 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>' ]
Copy

여기서:

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

필수 매개 변수

name

통합에 대한 식별자(즉, 이름)를 지정하는 문자열로, 계정에서 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 을 참조하십시오.

TYPE = EXTERNAL_STAGE

통합 유형 지정:

  • EXTERNAL_STAGE: Snowflake와 외부 클라우드 저장소 위치 간의 인터페이스를 만듭니다.

ENABLED = TRUE | FALSE

이 저장소 통합을 스테이지에 사용할 수 있을지 여부를 지정합니다.

  • TRUE 로 지정하면 사용자가 이 통합을 참조하는 새 스테이지를 만들 수 있습니다. 이 통합을 참조하는 기존 스테이지는 정상적으로 작동합니다.

  • FALSE 로 지정하면 사용자가 이 통합을 참조하는 새 스테이지를 만들지 못하게 됩니다. 이 통합을 참조하는 기존 스테이지는 스테이지 정의의 저장소 위치에 액세스할 수 없습니다.

STORAGE_ALLOWED_LOCATIONS = ('cloud_specific_url')

통합을 사용하여 하나 이상의 저장소 위치(즉, S3 버킷, GCS 버킷 또는 Azure 컨테이너)를 참조하는 외부 스테이지를 명시적으로 제한합니다. 기존 버킷의 URL로 구성된 쉼표로 구분된 목록을 지원하고, 선택적으로 로딩/언로딩할 데이터 파일을 저장하는 데 사용되는 경로도 지원합니다. 또는 《모든 버킷 및/또는 경로에 대한 액세스 허용》을 의미하는 * 와일드카드를 지원합니다.

STORAGE_ALLOWED_LOCATIONS 값에 특정 저장 위치가 포함된 경우, 동일한 위치의 모든 하위 경로가 허용되어야 합니다. STORAGE_BLOCKED_LOCATIONS 값에는 하위 경로를 포함할 수 없습니다. 예를 들어 STORAGE_ALLOWED_LOCATIONSstorage_location/ 이 포함되어 있으면 STORAGE_BLOCKED_LOCATIONSstorage_location/path1/ 이 포함될 수 없습니다. 마찬가지로, STORAGE_ALLOWED_LOCATIONSstorage_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')

통합을 사용하는 외부 스테이지가 하나 이상의 저장소 위치(즉, S3 버킷 또는 GCS 버킷)를 참조하는 것을 명시적으로 금지합니다. 기존 저장소 위치의 URL로 구성된 쉼표로 구분된 목록을 지원하고, 선택적으로 로딩/언로딩할 데이터 파일을 저장하는 데 사용되는 경로도 지원합니다. 일반적으로 STORAGE_ALLOWED_LOCATIONS가 * 와일드카드로 설정되어 있을 때 사용되어 차단된 저장소 위치 그리고 선택적으로 경로를 제외한 계정의 모든 버킷에 대한 액세스를 허용합니다.

참고

개별 클라우드 저장소 위치 URL만 따옴표로 묶어야 합니다. 전체 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) 역할의 ARN(Amazon Resource Name)을 지정합니다. 자세한 내용은 Amazon S3에 대한 보안 액세스 구성하기 를 참조하십시오.

STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'

AWS ACL(액세스 제어 목록)에 대한 지원을 사용하여 버킷 소유자에게 모든 권한을 부여합니다. 언로딩된 테이블 데이터의 Amazon S3 버킷에 만든 파일은 AWS ID 및 액세스 관리(IAM) 역할이 소유합니다. ACL은 한 AWS 계정의 IAM 역할이 하나 이상의 다른 AWS 계정에 있는 S3 버킷에 액세스하도록 구성된 사용 사례를 지원합니다. ACL 지원이 없으면, 버킷 소유자 계정의 사용자가 저장소 통합을 사용하여 외부(S3) 스테이지로 언로딩된 데이터 파일에 액세스할 수 없습니다.

사용자가 COPY INTO <위치> 을 사용하여 Snowflake 테이블 데이터를 S3 스테이지의 데이터 파일로 언로딩할 때 이 언로딩 작업은 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 tenant의 ID를 지정합니다. 저장소 통합은 하나의 tenant에만 인증할 수 있으므로, 허용 및 차단된 저장소 위치는 모두 이 tenant에 속하는 저장소 계정을 참조해야 합니다.

Tenant ID를 찾으려면 Azure 포털에 로그인하여 Azure Active Directory » Properties 를 클릭하십시오. tenant 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로 저장소 통합을 다시 만드는 작업이 백그라운드로 수행됩니다.

저장소 통합을 하나 이상의 스테이지에 연결한 후에 다시 만들어야 하는 경우 ALTER STAGE stage_name SET STORAGE_INTEGRATION = storage_integration_name 을 실행하여 각 스테이지와 저장소 통합 사이의 연결을 다시 설정해야 합니다.

  • 여기서 stage_name 은 스테이지의 이름입니다.

  • storage_integration_name 은 저장소 통합의 이름입니다.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

다음은 통합을 사용하여 두 버킷과 경로 중 하나를 참조하는 외부 스테이지를 명시적으로 제한하는 통합을 만드는 예입니다.

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/');
Copy

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/');
Copy

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/');
Copy

다음은 통합을 사용하는 외부 스테이지에서 명시적으로 차단된 버킷과 경로를 제외하고 계정의 모든 버킷과 경로를 참조하도록 허용하는 통합을 만드는 예입니다.

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/');
Copy

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/');
Copy

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/');
Copy