Snowflake의 종단 간 암호화 이해하기

이 항목에서는 Snowflake의 종단 간 암호화와 관련된 개념을 제공합니다.

이 항목의 내용:

개요

E2EE(종단 간 암호화)는 미사용 상태이거나 Snowflake와 주고받는 동안 제3자가 데이터를 읽지 못하도록 데이터를 보호하고 공격 표면을 최소화하는 방법입니다.

그림은 Snowflake의 E2EE 시스템을 보여줍니다.

E2EE in Snowflake

E2EE 시스템이 포함된 구성 요소는 다음과 같습니다.

  • 기업 네트워크의 Snowflake 고객.

  • 고객 제공 또는 Snowflake 제공 데이터 파일 스테이징 영역.

  • Snowflake는 클라우드 플랫폼에 따라 안전한 VPC(가상 사설 클라우드) 또는 VNet(가상 네트워크)에서 실행됩니다.

Snowflake는 데이터 파일에 대해 내부(Snowflake 제공) 및 외부(고객 제공) 스테이지를 모두 지원합니다. Snowflake는 데이터를 테이블에 로드하기 전 데이터 파일을 업로드하고 그룹화할 수 있는 내부 스테이지를 제공합니다(이미지 B).

고객 제공 스테이지는 고객이 제어 및 관리하는 지원형 클라우드 저장소 서비스(예: Amazon S3) 내의 컨테이너 또는 디렉터리입니다(이미지 A). 고객 제공 스테이지는 고객이 클라우드 저장소 서비스에 이미 저장되어 있는 데이터를 Snowflake로 복사하려는 경우에 선택할 수 있는 매력적인 옵션입니다.

이 섹션의 그림에 따라, Snowflake에서 E2EE의 흐름은 다음과 같습니다.

  1. 사용자는 1개 이상의 데이터 파일을 스테이지로 업로드합니다.

    스테이지가 외부 스테이지(이미지 A)인 경우 사용자는 선택적으로 클라이언트 측 암호화를 사용하여 데이터 파일을 암호화할 수 있습니다(자세한 내용은 클라이언트 측 암호화 참조). Snowflake는 외부 스테이지에 있는 데이터 파일의 경우 클라이언트 측 암호화를 권장하지만, 데이터가 암호화되지 않은 경우 Snowflake는 데이터가 테이블에 로드될 때 즉시 데이터를 암호화합니다.

    스테이지가 내부(즉, Snowflake) 스테이지(이미지 B)인 경우 데이터 파일은 스테이지로 로딩된 후 암호화되는 것 외에도, 내부 스테이지로 전송되기 전 사용자의 로컬 시스템의 Snowflake 클라이언트에 의해 자동으로 암호화됩니다.

  2. 사용자는 스테이지에서 테이블로 데이터를 로드합니다.

    데이터는 Snowflake의 독점 파일 형식으로 변환되어 클라우드 저장소 컨테이너에 저장됩니다. Snowflake에서 모든 미사용 데이터는 항상 암호화되고 전송 중에 TLS로 암호화됩니다. 또한 Snowflake는 데이터가 테이블에서 변환되거나 연산될 때 데이터의 암호를 해독한 다음, 변환 및 연산이 완료되면 데이터를 다시 암호화합니다.

  3. 사용자는 쿼리 결과를 외부 또는 내부 스테이지로 언로딩할 수 있습니다.

    결과는 고객 관리 스테이지로 언로드될 때 클라이언트 측 암호화를 사용하여 선택적으로 암호화되며, Snowflake 제공 스테이지로 언로드될 때 자동으로 암호화됩니다.

  4. 사용자는 스테이지에서 데이터 파일을 다운로드하고 클라이언트 측에서 데이터를 해독합니다.

클라이언트 측 암호화

클라이언트 측 암호화는 클라이언트가 데이터를 암호화한 후 클라우드 저장소 스테이징 영역에 복사한다는 뜻입니다. 클라이언트 측 암호화는 클라우드 저장소의 데이터를 관리하기 위한 안전한 시스템을 제공합니다.

클라이언트 측 암호화는 클라우드 저장소 서비스에서 정의한 특정 프로토콜을 따릅니다. 서비스 SDK 및 서드 파티 도구가 이 프로토콜을 구현합니다.

다음은 클라이언트 측 암호화를 요약한 이미지입니다.

Uploading data to cloud storage using client-side encryption

클라이언트 측 암호화 프로토콜이 작동하는 방식은 다음과 같습니다.

  1. 고객이 Snowflake와 공유하는 시크릿 마스터 키 를 생성합니다.

  2. 클라우드 저장소 서비스에서 제공되는 클라이언트는 임의 암호화 키를 생성하고 암호화한 후 파일을 클라우드 저장소로 업로드합니다. 임의 암호화 키는 고객의 마스터 키를 사용하여 암호화됩니다.

  3. 암호화된 파일 및 암호화된 임의 키 모두 클라우드 저장소 서비스에 업로드됩니다. 암호화된 임의 키는 파일의 메타데이터와 함께 저장됩니다.

데이터를 다운로드할 때 클라이언트는 암호화된 파일과 암호화된 임의 키를 모두 다운로드합니다. 클라이언트는 고객의 마스터 키를 사용하여 암호화된 임의 키를 해독합니다.

다음으로 클라이언트는 이제 해독된 임의 키를 사용하여 암호화된 파일을 해독합니다. 이 암호화 및 암호 해독은 클라이언트 측에서 수행됩니다.

클라우드 저장소 서비스 또는 기타 서드 파티(예: ISP)는 데이터를 명확하게 볼 수 없습니다. 고객은 클라이언트 측 암호화를 지원하는 모든 클라이언트 또는 도구를 사용하여 클라이언트 측 암호화 데이터를 업로드할 수 있습니다.

클라이언트 측 암호화 데이터를 Snowflake로 수집하기

다음 이미지에 표시된 것처럼, Snowflake는 클라우드 저장소 서비스 스테이지와 Snowflake 사이에서 데이터를 읽거나 쓸 때 클라이언트 측 마스터 키를 사용하여 클라이언트 측 암호화 프로토콜을 지원합니다.

Ingesting client-Side encrypted data into Snowflake

고객 제공 스테이지에서 클라이언트 측의 암호화된 데이터를 로드하려면, CREATE STAGE 명령을 사용하여 추가 MASTER_KEY 매개 변수가 포함된 명명된 스테이지 오브젝트를 생성한 후 스테이지에서 Snowflake 테이블로 데이터를 로드합니다. MASTER_KEY 매개 변수에는 Base64로 인코딩된 128비트 또는 256비트 고급 암호화 표준(AES) 키가 필요합니다.

명명된 스테이지 오브젝트는 스테이지와 관련된 설정을 저장하고 Snowflake와 클라우드 저장소의 특정 컨테이너 사이에서 데이터를 로드 또는 언로드하기 위한 편리한 방법을 제공합니다. 다음 SQL 코드 조각에서는 Snowflake에서 클라이언트 측 암호화를 지원하는 예시 Amazon S3 스테이지 오브젝트를 생성합니다.

-- create encrypted stage
create stage encrypted_customer_stage
url='s3://customer-bucket/data/'
credentials=(AWS_KEY_ID='ABCDEFGH' AWS_SECRET_KEY='12345678')
encryption=(MASTER_KEY='eSxX...=');
Copy

이 SQL 명령에 지정된 잘린 마스터 키는 고객 시크릿 마스터 키의 Base64로 인코딩된 문자열입니다. 다른 모든 자격 증명과 마찬가지로, 이 마스터 키는 전송 계층 보안(HTTPS)을 통해 Snowflake로 전송되고 암호화되어 메타데이터 저장소에 저장됩니다. 고객 및 Snowflake의 쿼리 처리 구성 요소만 마스터 키에 노출됩니다.

명명된 스테이지 오브젝트의 이점은 액세스 자격 증명이나 클라이언트 측 암호화 키를 해당 사용자에게 공개하지 않고 Snowflake 계정 내의 다른 사용자에게 부여할 수 있다는 점입니다. 적절한 액세스 제어 권한이 있는 사용자는 데이터를 로드 또는 언로드할 때 명명된 스테이지 오브젝트를 참조하기만 하면 됩니다.

다음 SQL 명령에서는 이름이 users 인 테이블을 생성하고 암호화된 스테이지의 데이터를 users 테이블로 복사합니다.

-- create table and ingest data from stage
CREATE TABLE users (id bigint, name varchar(500), purchases int);
COPY INTO users FROM @encrypted_customer_stage/users;
Copy

이제 Snowflake를 사용하여 데이터를 분석할 준비가 되었습니다.

사용자는 데이터를 스테이지로 언로드할 수도 있습니다. 다음 SQL 명령에서는 most_purchases 테이블을 생성하고 가장 많이 구매한 상위 10명의 사용자를 찾는 쿼리 결과로 채운 후 테이블 데이터를 스테이지로 언로드합니다.

-- find top 10 users by purchases, unload into stage
CREATE TABLE most_purchases as select * FROM users ORDER BY purchases desc LIMIT 10;
COPY INTO @encrypted_customer_stage/most_purchases FROM most_purchases;
Copy

Snowflake는 스테이지 오브젝트에 저장된 마스터 키를 사용하여 고객의 스테이지에 복사된 데이터 파일을 암호화합니다. Snowflake는 클라우드 저장소 서비스에 대한 클라이언트 측 암호화 프로토콜을 따릅니다. 고객은 클라이언트 측 암호화를 지원하는 모든 클라이언트 또는 도구를 사용하여 암호화된 데이터 파일을 다운로드할 수 있습니다.

다음 항목: