Azure의 외부 볼륨 구성

외부 볼륨을 사용하여 자신의 Microsoft Azure 컨테이너에 대한 제한된 액세스 권한을 Snowflake에 부여합니다. Snowflake는 외부 볼륨에 대해 다음과 같은 Azure 클라우드 저장소 서비스를 지원합니다.

  • Blob 저장소

  • Data Lake Storage Gen2

  • 범용 v1

  • 범용 v2

  • Microsoft Fabric OneLake

참고

보안 태세를 강화하려면 네트워크 트래픽에 공용 인터넷이 아닌 비공개 연결을 사용하도록 외부 볼륨을 구성할 수 있습니다. 자세한 내용은 Microsoft Azure 용 외부 볼륨에 대한 비공개 연결 섹션을 참조하십시오.

Azure용 외부 볼륨을 구성하려면 :ref:`SQL을 사용 <label-configure_external_volume_azure_create_sql>`하거나 :ref:`Snowsight를 사용 <label-configure_external_volume_azure_create_snowsight>`하면 됩니다.

전제 조건

외부 볼륨을 구성하기 전에 다음을 수행해야 합니다.

  • Azure 저장소 컨테이너.

  • IAM 정책 및 역할을 만들고 관리할 수 있는 Azure의 권한. Azure 관리자가 아닌 경우 Azure 관리자에게 이러한 작업을 수행하도록 요청합니다.

Azure 저장소 방화벽을 사용하여 저장소 계정에 대한 무단 트래픽을 차단하는 경우 Allow the VNet subnet IDs 의 지침에 따라 Azure 저장소 계정에 대한 Snowflake 액세스 권한을 명시적으로 부여합니다.

SQL을 사용하여 외부 볼륨 구성

1단계: Snowflake에서 외부 볼륨 만들기

CREATE EXTERNAL VOLUME 명령을 사용하여 외부 볼륨을 생성합니다.

참고

계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)만 이 SQL 명령을 실행할 수 있습니다.

다음 예에서는 암호화로 Azure 저장소 위치를 정의하는 외부 볼륨을 생성합니다.

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );
Copy

참고

  • STORAGE_BASE_URL 값을 지정할 때 https:// 가 아닌 azure:// 접두사를 사용하십시오.

  • OneLake 위치 지정(미리 보기 기능)에 대한 자세한 내용은 CREATE EXTERNAL VOLUME 참조 페이지를 참조하십시오.

  • Microsoft Fabric OneLake 저장소 위치에 리전 엔드포인트를 사용하는 경우, Microsoft Fabric 용량과 동일한 리전을 사용하십시오. 또한 이 리전은 Snowflake 계정을 호스팅하는 리전과 동일해야 합니다.

2단계: 저장소 위치에 Snowflake 액세스 권한 부여

  1. Microsoft 권한 요청 페이지의 URL을 검색하려면 DESCRIBE EXTERNAL VOLUME 명령을 사용하십시오. 이전에 생성한 외부 볼륨의 이름을 지정합니다.

    DESC EXTERNAL VOLUME exvol;
    
    Copy

    다음 속성의 값을 기록합니다.

    속성

    설명

    AZURE_CONSENT_URL

    Microsoft 권한 요청 페이지에 대한 URL입니다.

    AZURE_MULTI_TENANT_APP_NAME

    계정에 대해 생성된 Snowflake 클라이언트 애플리케이션의 이름입니다. 이 섹션의 이후 단계에서는 허용되는 저장소 위치에 대한 액세스 토큰을 획득하기 위한 권한을 이 애플리케이션에 부여해야 합니다.

    다음 단계에서 이러한 값을 사용합니다.

  2. 웹 브라우저에서 Microsoft 권한 요청 페이지(AZURE_CONSENT_URL)로 이동합니다.

  3. Accept 를 선택합니다. 이 작업을 통해 Snowflake 계정에 대해 생성된 Azure 서비스 주체에게 tenant 내부의 모든 리소스에 대한 액세스 토큰이 부여됩니다. 액세스 토큰은 서비스 주체에 저장소 계정 수준에 적절한 권한을 부여한 경우에만 획득이 가능합니다(다음 단계 참조).

    Microsoft 권한 요청 페이지가 Snowflake 회사 사이트(snowflake.com)로 리디렉션됩니다.

  4. Microsoft Azure 포털에 로그인합니다.

  5. Azure Services » Storage Accounts 로 이동합니다. Snowflake 서비스 주체가 액세스해야 하는 저장소 계정의 이름을 선택합니다.

    참고

    컨테이너 수준이 아닌 저장소 계정 수준에서 외부 볼륨에 대한 IAM 권한을 설정해야 합니다.

  6. Access Control (IAM) » Add role assignment 를 선택합니다.

  7. Storage Blob Data Contributor 역할을 선택하여 Snowflake 서비스 주체에 읽기 및 쓰기 액세스 권한을 부여합니다.

    참고

    Storage Blob Data Contributor 역할은 외부 볼륨 위치에 대한 쓰기 액세스 권한을 부여합니다. 쓰기 액세스 권한을 완전히 구성하려면, 외부 볼륨의 ALLOW_WRITES 매개 변수를 TRUE (기본값)로 설정해야 합니다.

  1. + Select members 을 선택합니다.

  1. Snowflake 서비스 포털 주체를 검색합니다. DESC EXTERNAL VOLUME 출력(1단계)에서 AZURE_MULTI_TENANT_APP_NAME 속성의 ID입니다. AZURE_MULTI_TENANT_APP_NAME 속성에서 밑줄 앞의 문자열을 검색합니다.

    중요

    • Azure에서 이 섹션의 Microsoft 요청 페이지를 통해 요청한 Snowflake 서비스 주체를 생성하기 위해서는 1시간이 이상 걸릴 수 있습니다. 서비스 주체를 즉시 사용할 수 없는 경우 1~2시간 기다린 후 다시 검색하십시오.

    • 서비스 주체를 삭제하면 외부 볼륨이 작동을 중지합니다.

    Azure Storage Console에서 역할 할당 추가하기
  2. Review + assign 을 선택합니다.

    참고

    역할을 할당하면 변경 사항이 적용되는 데 최대 10분이 걸릴 수 있습니다. 자세한 내용은 Microsoft Azure 설명서의 증상 - 역할 할당 변경 사항이 감지되지 않음 을 참조하십시오.

3단계: 저장소 액세스 확인

Snowflake가 저장소 공급자를 성공적으로 인증할 수 있는지 확인하려면 SYSTEM$VERIFY_EXTERNAL_VOLUME 함수를 호출합니다.

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_external_volume');
Copy

참고

다음 오류가 발생하면 계정 관리자가 Snowflake 배포 리전에서 AWS STS를 활성화해야 합니다. 지침은 AWS 설명서의 `AWS 리전에서 AWS STS 관리<https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html>`_를 참조하세요.

Error assuming AWS_ROLE:
STS is not activated in this region for account:<external volume id>. Your account administrator can activate STS in this region using the IAM Console.

Snowsight 에서 외부 볼륨 구성

  1. Snowsight 에 로그인합니다.

  2. 왼쪽 하단에서 이름 » :ui:`Switch role`을 선택하고 :ui:`ACCOUNTADMIN`을 선택하거나 CREATE EXTERNAL VOLUME 권한이 있는 역할을 선택합니다.

    자세한 내용은 기본 역할 전환 섹션을 참조하십시오.

  3. 탐색 메뉴에서 Catalog » External data 를 선택합니다.

  4. External volumes 탭을 선택합니다.

  5. + Create 을 선택합니다.

  6. Microsoft Azure & OneLake 을 선택한 다음 Next 를 선택합니다.

  7. Prerequisites 페이지에서 :ui:`Azure tenant ID`에 Azure 테넌트 ID를 지정합니다.

    Azure 테넌트 ID를 찾으려면 Microsoft Entra 설명서의 `Microsoft Entra 테넌트 ID를 찾는 방법 <https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant>`_을 참조하세요.

  8. Next 을 선택합니다.

  9. Grant storage access 페이지에서 Snowflake에 저장소 위치에 대한 액세스 권한을 부여하려면 다음 단계를 따릅니다.

    1. Snowflake가 Azure 저장소 또는 Microsoft OneLake에 연결하는 데 동의하려면 :ui:`Provide consent`를 선택합니다.

      새 브라우저 탭에서 Microsoft 권한 요청 페이지가 열립니다.

    2. Microsoft 권한 요청 페이지에서 :extui:`Accept`를 선택합니다. 이 작업을 통해 Snowflake 계정에 대해 생성된 Azure 서비스 주체에 테넌트 내부의 지정된 리소스에 대한 액세스 토큰이 부여됩니다. 액세스 토큰은 서비스 주체에 저장소 계정 수준에 대한 적절한 권한을 부여한 경우에만 얻을 수 있습니다(다음 단계 참조).

      Microsoft 권한 요청 페이지가 Snowflake 회사 사이트(snowflake.com)로 리디렉션됩니다.

    3. Snowflake의 Multi-tenant app name 필드에서 계정용으로 생성된 Snowflake 클라이언트 애플리케이션의 이름을 텍스트 편집기에 복사합니다. 다음 단계에서는 허용된 저장소 위치에 대한 액세스 토큰을 얻을 수 있도록 이 애플리케이션에 권한을 부여합니다.

  10. 허용된 저장소 위치에 대한 액세스 토큰을 얻을 수 있도록 애플리케이션에 권한을 부여하려면 다음 단계를 따릅니다.

    1. Microsoft Azure 포털에 로그인합니다.

    2. Azure Services » Storage Accounts 로 이동합니다. Snowflake 서비스 주체가 액세스해야 하는 저장소 계정의 이름을 선택합니다.

      참고

      컨테이너 수준이 아닌 저장소 계정 수준에서 외부 볼륨에 대한 IAM 권한을 설정해야 합니다.

    3. Access Control (IAM) » Add role assignment 를 선택합니다.

    4. Storage Blob Data Contributor 역할을 선택하여 Snowflake 서비스 주체에 읽기 및 쓰기 액세스 권한을 부여합니다.

      참고

      Storage Blob Data Contributor 역할은 외부 볼륨 위치에 대한 쓰기 액세스 권한을 부여합니다. 쓰기 액세스 권한을 완전히 구성하려면, 외부 볼륨의 ALLOW_WRITES 매개 변수를 TRUE (기본값)로 설정해야 합니다.

    5. + Select members 을 선택합니다.

    6. Snowflake 서비스 포털 주체를 검색합니다.

      이전 단계에서 Snowflake에서 복사한 다중 테넌트 앱 이름 입니다.

      중요

      • Azure에서 이 섹션의 Microsoft 요청 페이지를 통해 요청한 Snowflake 서비스 주체를 생성하기 위해서는 1시간이 이상 걸릴 수 있습니다. 서비스 주체를 즉시 사용할 수 없는 경우 1~2시간 기다린 후 다시 검색하십시오.

      • 서비스 주체를 삭제하면 외부 볼륨이 작동을 중지합니다.

      Azure Storage Console에서 역할 할당 추가하기
    7. Review + assign 을 선택합니다.

      참고

      역할을 할당하면 변경 사항이 적용되는 데 최대 10분이 걸릴 수 있습니다. 자세한 내용은 Microsoft Azure 설명서의 증상 - 역할 할당 변경 사항이 감지되지 않음 을 참조하십시오.

  11. Snowflake에서 :ui:`Next`를 선택합니다.

  12. Snowflake의 Configure external volume 페이지에서 외부 볼륨을 구성하려면 해당 필드를 작성합니다.

    필드

    설명

    External volume name

    외부 볼륨의 이름을 입력합니다.

    Storage base URL

    클라우드 저장소 위치의 기본 URL을 지정합니다.

    Access scope

    외부 볼륨에 대해 쓰기 작업이 허용되는지 여부를 지정합니다. 다음 테이블의 경우 :ui:`Allow writes`로 설정해야 합니다.

    • Snowflake를 카탈로그로 사용하는 Iceberg 테이블.

    • 외부 카탈로그를 사용하고 쓰기 가능한 Iceberg 테이블. 외부 관리 Iceberg 테이블은 ALLOWED_WRITE_OPERATIONS 매개 변수가 TRUE로 설정된 카탈로그 연결 데이터베이스를 통해 액세스하는 경우에 쓰기 가능합니다.

    Delta 테이블 파일에서 생성된 Iceberg 테이블의 경우 이 매개 변수를 Allow writes`로 설정하면 Snowflake가 외부 저장소에 Iceberg 메타데이터를 쓸 수 있습니다. 자세한 내용은 :ref:`label-tables_iceberg_metadata_delta 섹션을 참조하십시오.

    이 매개 변수의 값은 지정된 각 저장소 위치에 대해 클라우드 저장소 계정에 설정한 권한과도 일치해야 합니다.

    참고

    외부 관리 Iceberg 테이블을 읽는 데 외부 볼륨을 사용하려는 경우 이 필드를 Off로 설정하면 됩니다. 외부 Iceberg 카탈로그에서 테이블을 읽을 때 Snowflake는 클라우드 저장소에 데이터나 Iceberg 메타데이터 파일을 쓰지 않습니다.

    Scope

    이 외부 볼륨을 향후 Iceberg 테이블의 기본 위치로 설정할 위치를 선택합니다. 가능한 값은 다음과 같습니다.

    • Do not set a default: 어느 곳에서도 외부 볼륨을 기본값으로 설정하지 않습니다.

    • Account: 전체 계정에서 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다.

    • Specific database: 지정하는 데이터베이스 아래에 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다. 이 데이터베이스를 지정하려면 Specific database`를 선택할 때 표시되는 :ui:`Database 드롭다운을 사용합니다.

    • Specific schema: 지정하는 스키마 아래에 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다. 이 스키마를 지정하려면 표시되는 Database 드롭다운을 사용하여 먼저 스키마의 상위 데이터베이스를 선택한 다음 스키마를 선택합니다.

    Comment (optional)

    외부 볼륨에 대한 설명을 지정합니다.

    Connectivity

    보안 태세를 강화하기 위해 아웃바운드 비공개 연결을 사용할지 여부를 지정합니다. 아웃바운드 비공개 연결 사용에 대한 내용은 Microsoft Azure 용 외부 볼륨에 대한 비공개 연결 섹션을 참조하세요. 가능한 값은 다음과 같습니다.

    • Public (default): 공용 인터넷을 사용합니다.

    • Private (Azure Private Endpoint): 아웃바운드 비공개 연결을 사용합니다.

  13. Next 을 선택합니다.

    Verify connection & create volume 페이지에서 Snowflake는 Azure에 대한 연결을 확인한 다음 “성공적으로 연결됨” 메시지를 표시합니다.

    참고

    Snowflake가 연결을 확인할 수 없는 경우 권한 또는 외부 볼륨 구성을 확인한 다음 :ui:`Verify again`을 선택합니다.

  14. Create 을 선택합니다.

다음 단계

외부 볼륨을 구성하면 Iceberg 테이블을 생성할 수 있습니다.