인바운드 트래픽을 위한 비공개 연결 엔드포인트 고정하기

Amazon Web Services (AWS) 및 Microsoft Azure (Azure)의 Snowflake 계정의 경우 비공개 연결 엔드포인트를 계정에 고정(지정, 등록 및 매핑)할 수 있습니다. 비공개 엔드포인트를 계정에 고정함으로써 Snowflake는 고정된 엔드포인트에서 발생하는 인바운드 트래픽이 해당 엔드포인트를 고정시킨 계정으로만 이동하도록 보장합니다. 고정된 엔드포인트, 네트워크 정책 및 네트워크 규칙을 사용하여 네트워크 공격 표면을 Snowflake 계정으로 줄여 보안 태세를 강화할 것을 권장합니다.

고정을 사용하면 승인된 비공개 엔드포인트만 고객 네트워크에서 특정 Snowflake 계정으로 트래픽을 전송하는 데 사용할 수 있습니다. IPs 및 VPCE IDs/LinkIDs 의 특정 목록에서 Snowflake 계정에 대한 인바운드 액세스를 제한하려면 네트워크 정책네트워크 규칙 을 사용하십시오.

Snowflake는 비공개 연결을 통해 수신되는 모든 요청에 대해 진입 지점에서 비공개 엔드포인트 고정 검사를 시행합니다. 이 검사는 두 가지 핵심 정보를 비교합니다.

  • 요청 헤더에 제공된 엔드포인트 ID.

  • Snowflake의 메타데이터에 기록된 대로 엔드포인트를 고정시킨 계정입니다.

이것이 일치하는 경우, 즉 엔드포인트를 등록한 계정에서 요청이 시작된 경우 Snowflake는 연결을 허용합니다. 그렇지 않으면 Snowflake가 연결을 차단합니다.

예:

고정된 비공개 연결 엔드포인트를 통한 인바운드 트래픽에 대한 승인된 액세스 확인

고정된 비공개 엔드포인트

비공개 엔드포인트를 고정시킨 Snowflake 계정

요청 대상 Snowflake 계정

Snowflake 고정 확인 결정

PE1

A1

A1

ALLOW

PE1

A1

A2

DENY

PE2

A2

A1

DENY

PE2

A2

A2

ALLOW

전제 조건

비공개 엔드포인트를 고정하기 전에 반드시 해야 합니다.

  • AWS 또는 Azure에서 Snowflake 계정에 대한 비공개 링크를 구성합니다.

  • Snowflake 계정에 엔드포인트를 등록하는 데 사용하는 엑세스 토큰의 범위를 제한하십시오.

비공개 링크 구성에 대한 자세한 내용은 AWS PrivateLink 또는 Azure Private Link 섹션을 참조하십시오.

지연 시간 인자로 시행 관리하기

비공개 링크를 구성한 후 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 Snowflake 계정에 비공개 연결 엔드포인트를 등록합니다. 해당 함수 호출에서 선택적으로 지연 시간을 지정할 수 있습니다. 지연 시간은 비공개 엔드포인트 등록을 적용하기 전에 대기하는 시간(분)입니다. 지연 시간 값은 새 비공개 엔드포인트를 등록할 때 실수로 Snowflake에 액세스하지 못하도록 차단하는 것을 방지하는 데 도움이 됩니다. 최대 지연 시간은 1440분(24시간)이며 기본값은 60분입니다.

Snowflake 계정에 등록하는 비공개 엔드포인트는 다른 Snowflake 계정에도 등록할 수 있습니다. 예를 들어, 세 개의 Snowflake 계정이 있고 각 Snowflake 계정에 대한 연결이 등록된 비공개 엔드포인트 하나를 통해서만 이루어지도록 하고 싶을 수 있습니다. 지연 시간 인자를 60분으로 설정하면 각 Snowflake 계정에 비공개 연결 엔드포인트를 등록할 수 있는 충분한 시간을 확보할 수 있습니다.

그러나 비공개 연결 엔드포인트를 등록하고 지연 시간을 지정하는 경우 반드시 시스템 함수를 호출하는 첫 번째 계정 의 로컬 타임스탬프를 염두에 두어야 합니다. 적용 시간은 시스템 함수를 호출할 때 첫 번째 계정의 로컬 타임스탬프에 특정 비공개 연결 엔드포인트를 기준으로 지정한 지연 시간을 더한 값을 기준으로 합니다.

예를 들어, 하나의 비공개 연결 엔드포인트를 같은 타임존에 있는 3개의 계정과 함께 고정하는 경우를 생각해 보십시오:

  • 10:00 AM 에 account1 에서 시스템 함수를 호출하고 지연 시간을 60분으로 지정하면 실행 시간은 11:00 AM 입니다.

  • 10:30 AM 에 account2 에서 시스템 함수를 호출하면 실행 시간은 11:00 AM 입니다.

  • 11:01 AM 에 account3 에서 시스템 함수를 호출하면 실행 시간은 즉시(지금) 적용됩니다.

첫 번째 계정에 비공개 엔드포인트를 등록한 시점의 타임스탬프를 저장합니다. 특정 비공개 엔드포인트에 고정된 계정에 대한 기록을 유지하십시오.

여러 계정을 등록할 예정이고 1440분의 지연 시간이 충분하지 않은 경우 Snowflake 지원 으로 문의하십시오.

Microsoft Azure 에서 엑세스 토큰 범위 관리하기

비공개 엔드포인트를 Azure의 Snowflake 계정에 고정하기 전에 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 시스템 함수에 전달하는 엑세스 토큰의 범위를 제한해야 합니다. 호출자에게 엑세스 토큰의 범위를 비공개 엔드포인트로 설정하도록 요구하면 Snowflake가 엔드포인트에 대한 호출자의 액세스를 승인하는 데 도움이 됩니다. 즉, 토큰은 시스템 함수를 호출하는 비공개 엔드포인트와 Snowflake 계정에서만 유효합니다.

중요

SYSTEM$AUTHORIZE_PRIVATELINK 시스템 함수에 사용된 토큰을 사용하지 마십시오. 다음 단계는 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 에 고유한 토큰을 생성합니다.

Azure의 비공개 엔드포인트에 대한 엑세스 토큰의 범위를 제한하려면 Microsoft Azure 계정에서 다음 단계를 수행하십시오.

  1. snowflake-pep-role 이라는 역할에 대한 구독 사용자 지정 역할 정의를 만들고 subscription_id 자리 표시자를 구독의 ID 로 바꿉니다.

    az role definition create --role-definition '{"Name":"snowflake-pep-role","Description":
    "To generate advanced proof of access token for Snowflake private endpoint pinning","Actions":
    ["Microsoft.Network/privateEndpoints/read"],"AssignableScopes":["/subscriptions/<subscription_id>"]}'
    
    Copy

    ID 구독은 비공개 엔드포인트가 존재하는 구독과 일치해야 합니다. 구독에 대해 역할 정의는 한 번만 생성하면 됩니다.

  2. 역할 할당을 만들고 사용자(또는 그룹)에 snowflake-pep-role 역할 및 비공개 엔드포인트 범위를 할당 합니다. userprivate_endpoint_resource_id 의 자리 표시자를 바꿉니다.

    az role assignment create --assignee <user> --role snowflake-pep-role --scope <private_endpoint_resource_id>
    
    Copy
  3. SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 시스템 함수와 함께 사용할 액세스 토큰 을 생성합니다. subscription_id 자리 표시자를 구독의 ID 로 바꿉니다.

    az account get-access-token --subscription <subscription_id>
    
    Copy

Amazon Web Services 에서 엑세스 토큰 범위 관리하기

AWS 에서 비공개 엔드포인트를 Snowflake 계정에 고정하기 전에 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 시스템 함수에 전달할 엑세스 토큰의 범위를 제한해야 합니다. 호출자에게 엑세스 토큰의 범위를 비공개 엔드포인트로 설정하도록 요구하면 Snowflake가 엔드포인트에 대한 호출자의 액세스를 승인하는 데 도움이 됩니다. 즉, 토큰은 시스템 함수를 호출하는 비공개 엔드포인트와 Snowflake 계정에서만 유효합니다.

중요

SYSTEM$AUTHORIZE_PRIVATELINK 시스템 함수에 사용된 토큰을 사용하지 마십시오. 다음 단계는 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 에 고유한 토큰을 생성합니다.

AWS 에서 비공개 엔드포인트에 대한 엑세스 토큰의 범위를 제한하려면 다음 예와 같이 페더레이션 토큰을 생성합니다.

aws sts get-federation-token --name snowflake --policy
'{ "Version": "2012-10-17", "Statement":
  [ {
  "Effect": "Allow", "Action": ["ec2:DescribeVpcEndpoints"],
  "Resource": ["*"] }
  ] }'
Copy

대표적인 예로 엔드포인트를 등록하여 Snowflake 서비스에 대한 연결을 라우팅할 수 있습니다.

  1. AWS PrivateLink 또는 Snowflake 계정의 Azure Private Link 를 구성합니다. 이 서비스를 이미 구성한 경우 다음 단계로 건너뛰십시오.

  2. 공용 인터넷 URL 에 privatelink 세그먼트가 포함되지 않은 URL 을 사용하여 Snowflake에 로그인합니다.

  3. SYSTEM$REGISTER_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 VPC 엔드포인트를 Snowflake 계정에 등록합니다. token 인자는 잘린 값을 포함하며 지연 시간 단위는 분입니다.

    AWS

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      'vpce-0c1...',
      '123.....',
      '{
        "Credentials": {
          "AccessKeyId": "ASI...",
          "SecretAccessKey": "alD...",
          "SessionToken": "IQo...",
          "Expiration": "2024-12-10T08:20:20+00:00"
        },
        "FederatedUser": {
          "FederatedUserId": "0123...:snowflake",
          "Arn": "arn:aws:sts::174...:federated-user/snowflake"
        },
        "PackedPolicySize": 9,
        }',
      120
      );
    
    Copy

    Azure

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      '123....',
      '/subscriptions/0cc51670-.../resourceGroups/dbsec_test_rg/providers/Microsoft.Network/
      privateEndpoints/...',
      'eyJ...',
      120
    );
    
    Copy

#. Confirm the private connectivity endpoint mapping by calling the SYSTEM$GET_PRIVATELINK_ENDPOINT_REGISTRATIONS system function.

SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 Snowflake 계정에서 비공개 연결 엔드포인트의 등록을 취소할 수 있습니다.

중요

VPC 엔드포인트 또는 비공개 엔드포인트를 Snowflake에 등록하고 VPC 또는 VNet 에서 엔드포인트를 삭제한 경우, Snowflake 계정에서 SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 엔드포인트의 등록을 취소해야 합니다. 그렇지 않으면 Snowflake 서비스에 대한 연결은 비공개 연결을 사용할 수 없으며 공용 인터넷을 사용합니다.