내부 스테이지용 Azure Private Endpoint

이 항목에서는 Microsoft Azure Private Endpoint를 통해 Snowflake 내부 스테이지로 연결하는 자세한 지침과 개념을 제공합니다.

이 항목의 내용:

개요

Azure Private EndpointAzure Private Link 를 함께 사용하여 Snowflake 내부 스테이지에 안전하게 연결할 수 있습니다. 이러한 설정을 통해 Snowflake 내부 스테이지로의 데이터 로딩 및 데이터 언로딩 작업에서 공용 인터넷을 통하지 않고 Azure 내부 네트워크를 사용할 수 있습니다.

Microsoft가 내부 스테이지 액세스를 위한 Private Endpoint를 지원하기 전에는 Azure VNet 내에서 프록시 팜을 생성하여 Snowflake 내부 스테이지로의 보안 액세스를 수립해야 했습니다. Snowflake 내부 스테이지를 위한 Private Endpoint가 지원됨에 따라, 사용자 및 클라이언트 애플리케이션은 이제 비공개 Azure 네트워크를 통해 Snowflake 내부 스테이지에 액세스할 수 있습니다. 다음 다이어그램은 이러한 새로운 지원을 요약하여 보여줍니다.

Connect to internal stage using Azure Private Link

BEFORE 다이어그램에서 숫자와 관련하여 다음에 유의하십시오.

  • Snowflake 내부 스테이지에 연결하기 위해 사용자에게 제공되는 옵션 2개는 다음과 같습니다.

    • 옵션 A를 사용하면 숫자 1에서와 같이 내부 스테이지로의 직접 온프레미스 연결이 가능합니다.

    • 옵션 B를 사용하면 숫자 2 및 3과 같이 프록시 팜을 통해 내부 스테이지에 연결할 수 있습니다.

  • 프록시 팜을 사용하면 사용자는 숫자 4로 표시된 Snowflake로의 직접 연결도 가능합니다.

AFTER 다이어그램에서 숫자와 관련하여 다음에 유의하십시오.

  • 명확성을 기하고자, 이 다이어그램에서 단일 Snowflake 내부 스테이지(6 및 7)를 가리키는 하나의 Azure VNet에서 Private Endpoint 엔드포인트를 보여줍니다.

    동일한 Snowflake 내부 스테이지를 가리키는 다른 VNet 내에 각각 여러 Private Endpoint를 구성할 수 있습니다.

  • 이 기능은 업데이트되어 프록시 팜을 통해 Snowflake 또는 Snowflake 내부 스테이지로 연결할 필요가 없습니다.

  • 숫자 5에서와 같이 온프레미스 사용자는 Snowflake에 직접 연결할 수 있습니다.

  • Snowflake 내부 스테이지에 연결하려면, 온프레미스 사용자는 숫자 6에 해당하는 Private Endpoint에 연결한 후 Azure Private Link를 사용하여 숫자 7에서와 같이 Snowflake 내부 스테이지에 연결합니다.

Azure에서 각 Snowflake 계정에는 내부 스테이지로 사용할 전용 저장소 계정이 있습니다. 저장소 계정 URIs는 저장소 계정으로의 연결에서 비공개 연결(즉, Azure Private Link)을 사용하는지 여부에 따라 다릅니다. 비공개 연결 URL에는 URL에 privatelink 세그먼트가 포함됩니다.

공용 저장소 계정 URI

<저장소_계정_이름>.blob.core.windows.net

비공개 연결 저장소 계정 URI

<저장소_계정_이름>.privatelink.blob.core.windows.net

이점

Snowflake 내부 스테이지에 액세스하기 위해 Private Endpoint를 구현할 때의 이점은 다음과 같습니다.

  • 내부 스테이지 데이터가 공용 인터넷을 트래버스할 필요가 없습니다.

  • Azure VNet 외부에서 실행되는 Microsoft PowerBI 등의 클라이언트 및 SaaS 애플리케이션을 Snowflake에 안전하게 연결할 수 있습니다.

  • 내부 스테이지 데이터에 액세스할 수 있도록 관리자가 방화벽 설정을 수정할 필요가 없습니다.

  • 관리자는 사용자가 저장소 계정에 연결하는 방법과 관련하여 일관적으로 보안 및 모니터링을 구현할 수 있습니다.

제한 사항

Microsoft Azure는 프라이빗 엔드포인트가 Snowflake와 상호 작용하는 방법을 정의합니다.

  • 단일 Private Endpoint는 단일 Snowflake Service Endpoint와 통신할 수 있습니다. 동일한 Snowflake 내부 스테이지에 연결하는 여러 가지 일대일 구성을 가질 수 있습니다.

  • Snowflake 내부 스테이지에 연결할 수 있는 저장소 계정의 최대 프라이빗 엔드포인트 수는 고정되어 있습니다. 자세한 내용은 표준 저장소 계정 한도 를 참조하십시오.

Snowflake 내부 스테이지에 액세스하기 위한 Private Endpoint 구성하기

Snowflake 내부 스테이지에 액세스하도록 Private Endpoint를 구성하려면, 조직에서 다음 3개의 역할을 지원해야 합니다.

  1. Snowflake 계정 관리자(즉, Snowflake ACCOUNTADMIN 시스템 역할 사용자).

  2. Microsoft Azure관리자.

  3. 네트워크 관리자.

조직에 따라, 2명 이상의 인력 또는 팀이 다음 구성 단계를 구현하는 구성 활동을 조율해야 할 수 있습니다.

다음 단계를 완료하여 Azure Private Endpoint를 통한 Snowflake 내부 스테이지로의 보안 액세스를 구성 및 구현하십시오.

  1. Azure 구독이 Azure Storage 리소스 관리자에 등록되었는지 확인합니다. 이 단계를 통해 프라이빗 엔드포인트에서 내부 스테이지에 연결할 수 있습니다.

  2. Snowflake 계정 관리자로 Snowflake 계정에서 다음 문을 실행하고 privatelink_internal_stage 키에 의해 정의된 내부 스테이지 저장소 계정의 ResourceID 를 기록합니다. 자세한 내용은 ENABLE_INTERNAL_STAGES_PRIVATELINKSYSTEM$GET_PRIVATELINK_CONFIG 섹션을 참조하십시오.

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    select key, value from table(flatten(input=>parse_json(system$get_privatelink_config())));
    
    Copy
  3. Azure 관리자로 Azure 포털을 통해 Private Endpoint를 생성합니다.

    Private Endpoint 속성을 보고 리소스 ID 값을 기록합니다. 다음 단계에서는 이 값이 privateEndpointResourceID 값이 됩니다.

    Target sub-resource 값이 blob 로 설정되었는지 확인합니다.

    자세한 내용은 Microsoft Azure Private Link 설명서 를 참조하십시오.

  4. Snowflake 관리자로 privateEndpointResourceID 값을 함수 인자로 사용하여 SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS 함수를 호출합니다. 이 단계에서는 Private Endpoint를 통한 Snowflake 내부 스테이지로의 액세스를 승인합니다.

    use role accountadmin;
    select system$authorize_stage_privatelink_access('<privateEndpointResourceID>');
    
    Copy

    필요한 경우 이런 단계를 완료하여 내부 스테이지에 대한 액세스 권한을 취소하십시오.

  5. 네트워크 관리자로 DNS 설정을 업데이트하여 다음과 같이 URLs을 확인합니다.

    <저장소_계정_이름>.blob.core.windows.net ~ <저장소_계정_이름>.privatelink.blob.core.windows.net

    Azure VNet에서 비공개 DNS 존을 사용하는 경우, <저장소_계정_이름>.privatelink.blob.core.windows.net 에 대한 별칭 레코드를 생성합니다.

    자세한 내용은 Azure Private Endpoint DNS 구성 을 참조하십시오.

    • 별도의 Snowflake 계정을 사용하여 테스트를 수행해야 하며, 테스트가 분리된 상태에서 다른 워크로드에 영향을 주지 않고 기능을 테스트하기 위해 테스트 VNet에서 비공개 DNS 존을 구성하십시오.

    • 별도의 Snowflake 계정을 사용하는 것이 불가능한 경우, 테스트 사용자를 사용하여 DNS가 변경되는 테스트 VPC에서 Snowflake에 액세스하십시오.

    • 온프레미스 애플리케이션에서 테스트하려면, DNS 전달을 사용하여 DNS가 설정되는 VNet의 Azure 비공개 DNS로 요청을 전달하십시오. 클라이언트 시스템에서 다음 명령을 실행하여 반환된 IP 주소가 저장소 계정의 개인 IP 주소인지 확인하십시오.

      dig <storage_account_name>.blob.core.windows.net
      
      Copy

공용 액세스 차단하기(선택 사항)

Azure Private Link를 통해 내부 스테이지에 액세스하도록 Private Endpoint를 구성한 후에는 공용 IP 주소에서 내부 스테이지로의 요청을 선택적으로 차단할 수 있습니다. 공개 액세스가 차단된 후에는 모든 트래픽이 Private Endpoint를 통과해야 합니다.

Azure 내부 스테이지에 대한 공개 액세스를 제어하는 것은 Snowflake 서비스에 대한 공개 액세스를 제어하는 것과 다릅니다. 내부 스테이지에 대한 요청을 차단하려면 네트워크 정책이 아닌 SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 함수를 사용합니다. 네트워크 정책과 달리, 이 함수는 어떤 공용 IP 주소는 차단하면서 다른 주소를 허용할 수는 없습니다. SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS를 호출하면 모든 공용 IP 주소가 차단됩니다.

중요

공개 액세스를 차단하기 전에 비공개 연결을 통한 트래픽이 내부 스테이지에 성공적으로 도달하는지 확인하십시오. 비공개 연결을 구성하지 않고 공개 액세스를 차단하면 Azure Data Factory와 같은 관리형 서비스 장애를 포함하여 의도하지 않은 중단이 발생할 수 있습니다.

SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 함수는 내부 스테이지가 있는 Azure 저장소 계정의 Networking 설정을 변경하여 제한 사항을 적용합니다. 이러한 Azure 설정을 일반적으로 《저장소 계정 방화벽 설정》이라고 합니다. Snowflake 함수를 실행하면 Azure에서 다음이 수행됩니다.

  • Public network access 필드가 Enabled from selected virtual networks and IP addresses 로 설정됩니다.

  • Snowflake VNet 서브넷 ID가 Virtual Networks 섹션에 추가됩니다.

  • Firewall 섹션에서 모든 IP 주소가 삭제됩니다.

공용 IP 주소에서 내부 스테이지로의 모든 트래픽을 차단하려면 다음을 실행하십시오.

SELECT SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS();
Copy

함수 실행을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

공개 액세스가 차단되었는지 확인하기

SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS 함수를 실행하여 공용 IP 주소가 내부 스테이지에 액세스할 수 있는지 여부를 확인할 수 있습니다.

Azure 설정이 현재 모든 공개 트래픽을 차단하고 있는 경우 함수는 Public Access to internal stages is blocked 를 반환합니다. 이는 SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 함수가 실행된 이후 설정이 변경되지 않았음을 확인합니다.

최소한 일부 공용 IP 주소가 내부 스테이지에 액세스할 수 있는 경우 함수는 Public Access to internal stages is unblocked 를 반환합니다.

공개 액세스 차단하기

SYSTEM$UNBLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 함수를 실행하여 이전에 차단된 내부 스테이지에 대한 공개 액세스를 허용할 수 있습니다.

이 함수를 실행하면 내부 스테이지가 있는 Azure 저장소 계정의 Networking 설정이 변경됩니다. Azure Public network access 필드가 Enabled from all networks 로 설정됩니다.

Snowflake 내부 스테이지에 액세스하기 위한 Private Endpoint 취소하기

다음 단계를 완료하여 Microsoft Azure Private Endpoint를 통한 Snowflake 내부 스테이지로의 액세스를 취소하십시오.

  1. Snowflake 관리자로서, ENABLE_INTERNAL_STAGES_PRIVATELINK 매개 변수를 FALSE 로 설정하고 Private Endpoint에 액세스 권한을 원래 부여하는 데 사용된 것과 동일한 privateEndpointResourceID 값을 사용하여 Private Endpoint에 대한 액세스를 취소하는 SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS 함수를 호출합니다.

    use role accountadmin;
    alter account set enable_internal_stages_privatelink = false;
    select system$revoke_stage_privatelink_access('<privateEndpointResourceID>');
    
    Copy
  2. Azure 관리자로서, Azure 포털을 통해 Private Endpoint를 삭제합니다.

  3. 네트워크 관리자로서, 저장소 계정 URL을 확인하는 데 사용된 DNS 및 별칭 레코드를 제거합니다.

그러면 이제 Private Endpoint에 대한 액세스가 취소되고 SYSTEM$GET_PRIVATELINK_CONFIG 함수 호출의 쿼리 결과가 privatelink_internal_stage 키와 그 값을 반환하면 안 됩니다.

문제 해결

공용 인터넷을 통해 Snowflake 스테이지에 액세스하고 프라이빗 DNS 서비스를 사용하여 서비스 호스트 이름을 확인하는 Azure 애플리케이션의 경우 이 항목에서의 설명과 같이 스테이지에 대한 비공개 엔드포인트 연결이 설정된 경우에는 Snowflake 스테이지에 액세스할 수 없습니다.

비공개 엔드포인트 연결이 생성되면 Microsoft Azure는 저장소 계정 호스트를 Azure Private Link 호스트(즉, .privatelink.blob.core.windows.net)로 가리키는 공용 DNS 서비스에 CNAME 레코드를 자동으로 생성합니다. 동일한 도메인에 비공개 DNS 리전을 구성한 애플리케이션이 있는 경우, Microsoft Azure는 프라이빗 DNS 서비스에 쿼리하여 저장소 계정 호스트를 확인하려고 시도합니다. 비공개 DNS 서비스에서 저장소 계정에 대한 항목을 찾을 수 없는 경우에는 연결 오류가 발생합니다.

이러한 문제를 해결하기 위한 2가지 옵션은 다음과 같습니다.

  1. 애플리케이션에서 비공개 DNS 리전을 제거하거나 연결을 해제합니다.

  2. 비공개 DNS 서비스에서 저장소 계정 프라이빗 호스트 이름(즉, <저장소_계정_이름>.privatelink.blob.core.windows.net)에 대한 CNAME 레코드를 생성합니다.

    dig CNAME <storage_account_name>.privatelink.blob.core.windows.net
    
    Copy