Snowflake で認証する
Amazon Athena Snowflake コネクタは、キーペア認証または OAuth 認証方法を使用して Snowflake データウェアハウスに接続するように設定できます。どちらの方法でも、Snowflake へのセキュアアクセスを提供し、接続文字列にパスワードを保存する必要がなくなります。
-
キーペア認証 – この方法は、RSA パブリックキーペアまたはプライベートキーペアを使用して Snowflake で認証します。プライベートキーは認証リクエストにデジタル署名するものであり、対応するパブリックキーは検証のために Snowflake に登録されます。この方法だと、パスワードを保存する必要がなくなります。
-
OAuth 認証 – この方法は、認可トークンと更新トークンを使用して Snowflake で認証します。自動トークン更新をサポートしているため、長時間実行されるアプリケーションに適しています。
詳細については、Snowflake ユーザーガイドの「キーペア認証
前提条件
開始する前に、次の前提条件を完了します。
-
管理者権限を持つ 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>
注記
認可コードは期間限定で有効で、1 回のみ使用できます。
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 を取得します。