Snowflake로 인증
키 페어 인증 또는 OAuth 인증 방법을 사용하여 Snowflake 데이터 웨어하우스에 연결하도록 Amazon Athena Snowflake 커넥터를 구성할 수 있습니다. 두 방법 모두 Snowflake에 대한 보안 액세스를 제공하며 연결 문자열에 암호를 저장할 필요가 없습니다.
-
키 페어 인증 - 이 방법은 RSA 퍼블릭 또는 프라이빗 키 페어를 사용하여 Snowflake로 인증합니다. 프라이빗 키는 확인을 위해 해당 퍼블릭 키가 Snowflake에 등록되어 있는 동안 인증 요청에 디지털 방식으로 서명합니다. 이 방법을 사용하면 암호 저장이 필요하지 않습니다.
-
OAuth 인증 - 이 방법은 권한 부여 토큰과 새로 고침 토큰을 사용하여 Snowflake로 인증합니다. 이 인증은 자동 토큰 새로 고침을 지원하므로 장기 실행 애플리케이션에 적합합니다.
자세한 내용은 Snowflake 사용 설명서의 Key-pair authentication
사전 조건
시작하기 전에 다음 필수 조건을 완료합니다.
-
관리 권한이 있는 Snowflake 계정 액세스입니다.
-
Athena 커넥터 전용 Snowflake 사용자 계정입니다.
-
키 페어 인증을 위한 OpenSSL 또는 동등한 키 생성 도구입니다.
-
AWS Secrets Manager에 액세스하여 보안 암호를 생성하고 관리합니다.
-
OAuth 인증을 위한 OAuth 흐름을 완료하는 웹 브라우저입니다.
키 페어 인증 구성
이 프로세스에는 RSA 키 페어 생성, 퍼블릭 키로 Snowflake 계정 구성, AWS Secrets Manager에 프라이빗 키의 안전한 저장이 포함됩니다. 다음 단계에서는 암호화 키를 생성하고, 필요한 Snowflake 권한을 설정하고, 원활한 인증을 위해 AWS 자격 증명을 구성하는 방법을 안내합니다.
RSA 키 페어 생성
OpenSSL을 사용하여 프라이빗 및 퍼블릭 키 페어를 생성합니다.
-
암호화되지 않은 버전을 생성하려면 로컬 명령줄 애플리케이션에서 다음 명령을 사용합니다.
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
-
암호화된 버전을 생성하려면
-nocrypt
를 생략하는 다음 명령을 사용합니다.openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
-
프라이빗 키에서 퍼블릭 키를 생성하려면
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # Set appropriate permissions (Unix/Linux) chmod 600 rsa_key.p8 chmod 644 rsa_key.pub
참고
프라이빗 키를 공유해서는 안됩니다. 프라이빗 키는 Snowflake로 인증해야 하는 애플리케이션에서만 액세스할 수 있어야 합니다.
-
Snowflake에 대한 구분 기호 없이 퍼블릭 키 콘텐츠 추출
# Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'
이 출력은 다음 단계의 뒷부분에서 필요하므로 저장합니다.
-
Snowflake 사용자 구성
다음 단계에 따라 Snowflake 사용자를 구성합니다.
-
Athena 커넥터의 전용 사용자가 없는 경우 사용자를 생성합니다.
-- Create user for Athena connector CREATE USER
athena_connector_user
; -- Grant necessary privileges GRANT USAGE ON WAREHOUSEyour_warehouse
TO ROLEathena_connector_role
; GRANT USAGE ON DATABASEyour_database
TO ROLEathena_connector_role
; GRANT SELECT ON ALL TABLES IN DATABASEyour_database
TO ROLEathena_connector_role
; 사용자에게 인증 권한을 부여합니다. 사용자에게 퍼블릭 키를 할당하려면 다음 역할 또는 권한 중 하나가 있어야 합니다.
-
사용자에 대한
MODIFY PROGRAMMATIC AUTHENTICATION METHODS
또는OWNERSHIP
권한입니다. -
SECURITYADMIN
역할 이상입니다.
다음 명령을 사용하여 퍼블릭 키를 할당하는 데 필요한 권한을 부여합니다.
GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER
athena_connector_user
TO ROLEyour_admin_role
;-
-
다음 명령을 사용하여 Snowflake 사용자에게 퍼블릭 키를 할당합니다.
ALTER USER
athena_connector_user
SET RSA_PUBLIC_KEY='RSAkey
';다음 명령을 사용하여 퍼블릭 키가 사용자에게 성공적으로 할당되었는지 확인합니다.
DESC USER
athena_connector_user
;
-
AWS Secrets Manager에 프라이빗 키 저장
프라이빗 키를 커넥터에 필요한 형식으로 변환합니다.
# Read private key content cat rsa_key.p8
-
다음 구조를 사용하여 AWS Secrets Manager에서 보안 암호를 생성합니다.
{ "sfUser": "
your_snowflake_user
", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)
" }참고
헤더와 바닥글은 선택 사항입니다.
프라이빗 키는
\n
(으)로 구분해야 합니다.
OAuth 인증 구성
이 인증 방법을 사용하면 자동 자격 증명 새로 고침 기능을 통해 Snowflake에 대한 안전한 토큰 기반 액세스가 가능합니다. 구성 프로세스에는 Snowflake에서 보안 통합 생성, OAuth 클라이언트 자격 증명 검색, 액세스 코드를 얻기 위한 권한 부여 흐름 완료, 커넥터가 사용할 OAuth 자격 증명을 AWS Secrets Manager에 저장하는 작업이 포함됩니다.
Snowflake에서 보안 통합 생성
Snowflake에서 다음 SQL 명령을 실행하여 Snowflake OAuth 보안 통합을 생성합니다.
CREATE SECURITY INTEGRATION
my_snowflake_oauth_integration_a
TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;구성 파라미터
-
TYPE = OAUTH
- OAuth 인증 유형을 지정합니다. -
ENABLED = TRUE
- 보안 통합을 활성화합니다. -
OAUTH_CLIENT = CUSTOM
- 사용자 지정 OAuth 클라이언트 구성을 사용합니다. -
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
- 보안 애플리케이션의 클라이언트 유형을 설정합니다. -
OAUTH_REDIRECT_URI
- OAuth 흐름의 콜백 URL입니다. 테스트를 위한 localhost일 수 있습니다. -
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
- 새로 고침 토큰 생성을 활성화합니다. -
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
- 새로 고침 토큰 유효 기간(초 단위 90일)을 설정합니다.
-
OAuth 클라이언트 보안 암호 검색
-
이 클라이언트 자격 증명을 가져오려면 다음 SQL 명령을 실행합니다.
DESC SECURITY INTEGRATION '
MY_SNOWFLAKE_OAUTH_INTEGRATION_A
'; OAuth 클라이언트 보안 암호를 검색합니다.
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('
MY_SNOWFLAKE_OAUTH_INTEGRATION_A
');응답의 예
{ "OAUTH_CLIENT_SECRET_2": "
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE
" }
참고
이러한 자격 증명을 안전하게 저장하고 공유해서는 안됩니다. 이 자격 증명은 OAuth 클라이언트를 구성하는 데 사용됩니다.
-
사용자 권한 부여 및 권한 부여 코드 검색
브라우저에서 다음 URL을 엽니다.
https://
<your_account>
.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>
&response_type=code&redirect_uri=https://localhost:8080/oauth/callback권한 부여 흐름을 완료합니다.
-
Snowflake 자격 증명을 사용하여 로그인합니다.
-
요청된 권한을 부여합니다. 권한 부여 코드가 있는 콜백 URI로 리디렉션됩니다.
-
리디렉션 URL에서 코드 파라미터를 복사하여 권한 부여 코드를 추출합니다.
https://localhost:8080/oauth/callback?code=
<authorizationcode>
참고
권한 부여 코드는 제한된 시간 동안 유효하며 한 번만 사용할 수 있습니다.
AWS Secrets Manager에 OAuth 자격 증명 저장
다음 구조를 사용하여 AWS Secrets Manager에서 보안 암호를 생성합니다.
{ "redirect_uri": "https://localhost:8080/oauth/callback", "client_secret": "
je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
", "token_url": "https://<your_account
>.snowflakecomputing.com/oauth/token-request", "client_id": "AIDACKCEVSQ6C2EXAMPLE
, "username": "your_snowflake_username
", "auth_code": "authorizationcode
" }필수 필드
-
redirect_uri
- 1단계에서 얻은 OAuth 리디렉션 URI입니다. -
client_secret
- 2단계에서 얻은 OAuth 클라이언트 보안 암호입니다. -
token_url
– Snowflake OAuth 토큰 엔드포인트입니다. -
client_id
- 2단계에서 얻은 OAuth 클라이언트 ID입니다. -
username
- 커넥터의 Snowflake 사용자 이름입니다. -
auth_code
- 3단계에서 얻은 권한 부여 코드입니다.
-
보안 암호를 생성한 후 데이터 소스 연결을 생성할 때 Glue 연결에 사용할 수 있는 보안 암호 ARN을 가져옵니다.