本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Snowflake 驗證
您可以將 Amazon Athena Snowflake 連接器設定為使用金鑰對身分驗證或 OAuth 身分驗證方法來連線至 Snowflake 資料倉儲。這兩種方法都提供對 Snowflake 的安全存取,無需在連線字串中存放密碼。
-
金鑰對身分驗證 – 此方法使用 RSA 公有或私有金鑰對向 Snowflake 進行身分驗證。當對應的公有金鑰在 Snowflake 中註冊以進行驗證時,私有金鑰會數位簽署身分驗證請求。此方法消除了密碼儲存。
-
OAuth 身分驗證 – 此方法使用授權字符和重新整理字符來驗證 Snowflake。它支援自動權杖重新整理,使其適用於長時間執行的應用程式。
如需詳細資訊,請參閱 Snowflake 使用者指南中的金鑰對身分驗證
先決條件
開始之前,請先完成以下先決條件:
-
具有管理權限的 Snowflake 帳戶存取。
-
專用於 Athena 連接器的 Snowflake 使用者帳戶。
-
用於金鑰對身分驗證的 OpenSSL 或同等金鑰產生工具。
-
AWS Secrets Manager 建立和管理秘密的存取權。
-
Web 瀏覽器,以完成 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>
注意
授權碼在有限時間內有效,且只能使用一次。
在 中存放 OAuth 登入資料 AWS Secrets Manager
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 取得的授權碼。
-
建立秘密之後,您會取得秘密 ARN,您可以在建立資料來源連線時在 Glue 連線中使用。