Snowflake-キーペア認証触ってみた

Snowflake
この記事は約5分で読めます。

こんにちは!日比です!
Snowflakeのキーペア認証って触ったことありますか?
私も普段はパスワード認証を利用しており、
キーペア認証は今まで触ったことがなく、
案件で必要になったので検証してみました。

本記事でわかること

  • キーペア認証のやりかた

キーペア認証とは

Snowflakeは、ユーザ名やパスワードなどの基本認証のかわりに、
認証セキュリティを強化するためのキーペア認証の使用をサポートしています。

ユーザ側で秘密鍵、公開鍵のペアを作成し、
Snowflakeユーザに公開鍵を紐づけ、
秘密鍵から送られる情報を検証し、問題なければ接続を許可します。

秘密鍵をもっているクライアントからでのみ、
接続ができないためセキュリティが強化されます。
逆に、秘密鍵が漏れると接続ができるので、鍵の保管はしっかりしましょう。

それでは、さっそく手順を確認していきましょう。

キーペア認証設定

参考マニュアル)キーペア認証とキーペアローテーション

設定手順

クライアント側で秘密鍵を作成

クライアント側で秘密鍵を作成します。
Snowflakeの推奨はパスフレーズ付きの秘密鍵なので、下記コマンドを実行します。

openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
Enter Encryption Password: 秘密鍵のパスフレーズを入力
Verifying - Enter Encryption Password: もう一度入力します

上記コマンドを実行すると、秘密鍵(rsa_key.p8)が生成されます。

クライアント側で公開鍵を作成

つぎにクライアント側で公開鍵を作成します。

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Enter pass phrase for rsa_key.p8: 秘密鍵のパスフレーズを入力
writing RSA key

上記コマンドを実行すると、公開鍵(rsa_key.pub)が生成されます。
公開鍵の中身(BEGIN~ENDに挟まれた黄色の部分(MII~QABまで))をメモします。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhk…(略)
:(略)
OQIDAQAB
-----END PUBLIC KEY-----

Snowflakeユーザを作成

キーペア認証するSnowflakeユーザを作成します。

use role useradmin;
create user kptestusr RSA_PUBLIC_KEY ='MIIBIjANBgkqhk…(略)…OQIDAQAB';
 ※RSA_PUBLIC_KEYの箇所に、上記でメモした公開鍵の中身を1行にして指定します。

※上記ユーザに適切なロールも付与します。

公開鍵のフィンガープリントの検証

作成した公開鍵と、ユーザに紐づけた公開鍵の
フィンガープリントが同じであることを確認します。

▼公開鍵のフィンガープリント(クライアント側)
openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
writing RSA key
0MUPDHC…(略)…3SqAROs=

▼Snowflakeユーザのフィンガープリント(Snowflake側)
desc user kptestusr;
SELECT TRIM((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
  WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:');
0MUPDHC…(略)…3SqAROs=
※両方のフィンガープリントが一致していること

接続設定

次に接続設定を行います。
snowsqlのconfigに下記を設定します。
デフォルトは「<HOME_DIR>/.snowsql/config」ですが、ご自身の環境にあわせてください。

例)
[connections.kptest]
#Can be used in SnowSql as #connect example
accountname = XXXXX-YYYYYY
username = kptestusr
dbname = DB_NAME
schemaname = public
private_key_path = C:\Users\XXXX\.snowsql\keys\rsa_key.p8
 →秘密鍵のパスを指定します

※configの細かな設定は下記を参照ください。
参考)SnowSQL config ファイルについて

また秘密鍵のパスフレーズは、環境変数に設定することで入力を省くことも可能です。

例)Linuxの場合
export SNOWSQL_PRIVATE_KEY_PASSPHRASE=秘密鍵のパスフレーズを入力

参考)キーペア認証とキーペアローテーションの使用

接続確認

それでは最後に、接続確認を行います。

C:\Users\XXXX>snowsql -c kptest
Private Key Passphrase: 環境変数を設定していない場合は秘密鍵のパスフレーズを入力
* SnowSQL * v1.2.32
Type SQL statements or !help
PUBLIC@ADAC01.PUBLIC((wh_demo)) >

無事キーペア認証で接続ができましたね。

まとめ

いかがでしょうか。
普段あまり使うことのないキーペア認証の流れをご理解いただけましたでしょうか。
何かの参考になれば幸いです。
おわり。

コメント

タイトルとURLをコピーしました