기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon DataZone에서 Snowflake를 데이터 소스로 연결
Amazon DataZone은 Snowflake를 타사 데이터 소스로 지원합니다. Snowflake를 Amazon DataZone 프로젝트에 연결한 후 카탈로그는 Snowflake 데이터베이스 및 스키마를 인덱싱하고, Snowflake의 쿼리 기록에서 열 수준 계보를 캡처하고, 페더레이션을 통해에서 Snowflake 테이블을 쿼리할 수 있습니다. 이 페이지에서는 AWS CLI를 사용하여 Snowflake 연결을 생성하는 방법을 안내합니다.
사전 조건
시작하기 전에 다음 사항이 있는지 확인합니다.
-
Amazon DataZone 도메인 및 Snowflake 데이터를 카탈로그화하려는 프로젝트입니다. Amazon DataZone의 도메인 및 사용자 액세스 및 Amazon DataZone 프로젝트 및 환경 섹션을 참조하세요.
-
카탈로그화하려는 데이터베이스, 스키마 및 웨어하우스에서 역할을 생성하고 권한을 부여할 수 있는 권한이 있는 Snowflake 계정입니다.
-
Amazon DataZone 도메인과 동일한 AWS 계정 AWS Secrets Manager 의에 대한 액세스.
-
에서 Snowflake 데이터를 쿼리하려는 경우 쿼리 유출을 위한 Amazon S3 버킷입니다.
Snowflake 역할 생성,에 Snowflake 자격 증명 저장 AWS Secrets Manager, Amazon DataZone 프로젝트 환경 ID 찾기, 호출 등의 순서로 단계를 수행합니다aws datazone create-connection.
1단계: Amazon DataZone에 대한 Snowflake 역할 생성
Amazon DataZone은 사용자가 생성하고 특정 권한을 부여하는 역할을 사용하여 Snowflake에 연결합니다. 역할 권한 부여는 네 가지 범주로 나뉩니다.
-
메타데이터 동기화 - Amazon DataZone은 테이블 및 뷰의 구조를 읽어 카탈로그를 채웁니다.
-
계보 동기화 - Amazon DataZone은 Snowflake의 QUERY_HISTORY 및 ACCESS_HISTORY를 읽어 열 수준 계보를 도출합니다.
-
쿼리 액세스 -를 포함하여 Amazon DataZone을 통해 발행된 쿼리에 필요합니다.
-
웨어하우스 사용량 - 역할이 실행하는 모든 쿼리에 필요합니다.
Snowflake에서 다음 문을 실행하여 자리 표시자를 값으로 바꿉니다.
CREATE ROLE <role_name>; -- Metadata: database and schema access GRANT USAGE ON DATABASE <database_name> TO ROLE <role_name>; GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Metadata: table and view structure (no data access) GRANT REFERENCES ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON ALL VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Lineage: access to QUERY_HISTORY and ACCESS_HISTORY GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE <role_name>; -- Query access GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Optional: include tables created after the role is granted GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Warehouse access GRANT USAGE ON WAREHOUSE <warehouse_name> TO ROLE <role_name>; -- Assign the role to the Snowflake user whose credentials DataZone will use GRANT ROLE <role_name> TO USER <snowflake_username>;
중요
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE는 계보에 필요합니다. 그렇지 않으면 메타데이터 동기화는 성공하지만 계보 레코드는 캡처되지 않습니다.
2단계:에 Snowflake 자격 증명 저장 AWS Secrets Manager
Amazon DataZone 도메인과 AWS Secrets Manager동일한 AWS 계정에 보안 암호를 생성합니다. Amazon DataZone은 사용자 이름과 암호 또는 키 페어라는 두 가지 인증 방법을 지원합니다.
사용자 이름 및 암호 인증의 경우 다음 JSON 본문을 사용합니다.
{ "username": "<snowflake_username>", "password": "<snowflake_password>" }
키 페어 인증의 경우 다음 JSON 본문을 사용합니다.
{ "sfUser": "<snowflake_username>", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----" }
Amazon DataZone이 암호를 검색할 수 있도록 보안 암호에 태그를 지정합니다. 두 태그가 모두 필요합니다.
| 태그 키 | 값 |
|---|---|
AmazonDataZoneDomain |
Amazon DataZone 도메인 ID |
AmazonDataZoneProject |
Amazon DataZone 프로젝트 ID |
보안 암호의 ARN을 기록해 둡니다. 4단계create-connection에서에 전달합니다.
3단계: 프로젝트 환경 ID 찾기
create-connection API 호출에는 연결이 있는 프로젝트 환경의 ID가 필요합니다. 프로젝트 사용자 역할 ARN에서 이를 도출할 수 있습니다.
프로젝트 사용자 역할 ARN은 다음 패턴을 따릅니다.
arn:aws:iam::<account_id>:role/datazone_usr_role_<project_id>_<environment_id>
마지막 밑줄 뒤에 있는 마지막 세그먼트는 환경 ID입니다. 예:
arn:aws:iam::123456789012:role/datazone_usr_role_a1b2c3dfadsf_58cjkfdsjfd
58cjkfdsjfd는 환경 ID입니다. 4단계--environment-identifier에서와 같이 전달할 값입니다. 환경 ID는 프로젝트의 도구 환경에 해당합니다.
4단계: Snowflake 연결 생성
다음 AWS CLI 명령을 실행하여 자리 표시자를 값으로 바꿉니다.
aws datazone create-connection \ --domain-identifier <domain_id> \ --environment-identifier <environment_id> \ --name "<connection_name>" \ --description "<optional_description>" \ --props '{ "snowflakeProperties": { "connectivityProperties": { "connectionProperties": { "HOST": "<account>.snowflakecomputing.com", "PORT": "443", "DATABASE": "<database_name>", "WAREHOUSE": "<warehouse_name>", "SCHEMA": "<schema_name>", "ROLE_ARN": "<project_user_role_arn>", "CATALOG_CASING_FILTER": "UPPERCASE_ONLY" }, "athenaProperties": { "spill_bucket": "<project_s3_bucket_name>", "spill_prefix": "<domain_id>/<project_id>/dev/sys/athena" }, "authenticationConfiguration": { "authenticationType": "BASIC", "secretArn": "<secret_arn_from_step_2>" } }, "snowflakeRole": "<role_name_from_step_1>", "identityMapping": { "usernameAttribute": "EMAIL" } } }'
연결 속성 참조
| 속성 | 설명 |
|---|---|
HOST |
Snowflake 계정 URL입니다. |
PORT |
Snowflake 포트입니다. 443를 사용합니다. |
DATABASE |
카탈로그에 대한 Snowflake 데이터베이스입니다. |
WAREHOUSE |
Snowflake 웨어하우스 Amazon DataZone은를 사용하여 쿼리를 실행합니다. |
SCHEMA |
카탈로그화할 Snowflake 스키마입니다. |
ROLE_ARN |
프로젝트 사용자 역할 ARN(3단계 참조). |
CATALOG_CASING_FILTER |
카탈로그화된 식별자에 대한 사례 정규화를 제어합니다. 유효 값은 UPPERCASE_ONLY 및 LOWERCASE_ONLY입니다. 생략하면 기본값은 입니다UPPERCASE_ONLY. |
spill_bucket |
쿼리 유출에 대한 S3 버킷 이름입니다. 에서 Snowflake를 쿼리할 때 필요합니다. |
spill_prefix |
형식의 유출에 대한 S3 접두사입니다<domain_id>/<project_id>/dev/sys/athena. |
authenticationType |
BASIC 사용자 이름/암호 또는 키 페어 인증을 위한 입니다. |
secretArn |
2단계에서 생성된 보안 암호의 ARN입니다. |
snowflakeRole |
1단계의 Snowflake 역할 이름입니다. |
identityMapping.usernameAttribute |
EMAIL로 설정합니다. |
연결 확인
도메인 ID와에서 반환한 연결 식별자aws datazone get-connection를 사용하여를 호출합니다create-connection. 첫 번째 메타데이터 동기화가 실행되면 카탈로그화된 Snowflake 테이블이 프로젝트의 Amazon DataZone 카탈로그에 나타납니다.