
Snowflake の type=service なユーザーの key-pair で dbt Cloud からの接続設定をしてみた
とーかみです。
Snowflake の MFA 必須化にともない、サービス接続用ユーザーは type=service
として作成します。
サービスユーザーの作成から、 key-pair での dbt Cloud での接続設定まであらためてやってみましたので記録として記事にしました。
手順
以下の手順で実施します。
- key-pair 生成
- key-pair を使用して Snowflake でサービスユーザーを作成
- dbt Cloud で Snowflake 接続を設定
後の手順で使用する部分を (A)
、 (B)
のように記号をつけています。
1. key-pair 生成
以下のコマンドで key-pair を生成します。
ファイル名とパスフレーズ (A) は適宜指定してください。
$ openssl genrsa 4096 | openssl pkcs8 -topk8 -inform PEM -out snowflake_rsa_key.p8
$ openssl rsa -in snowflake_rsa_key.p8 -pubout -out snowflake_rsa_key.pub
公開鍵のうち、後続の Snowflake のサービスユーザー作成時に使用する部分のみ取り出します。(B)
$ chmod 400 snowflake_atdp_rsa_key.p8
$ cat snowflake_rsa_key.pub | \
tr -d "\n" | \
sed "s/-----BEGIN PUBLIC KEY-----//g" | \
sed "s/-----END PUBLIC KEY-----//g"
秘密鍵も確認します。(C)
$ cat snowflake_rsa_key.p8
2. Key-pair を使用して Snowflake でサービスユーザーを作成
Snowflake で以下の SQL を実行し、サービスユーザーを作成します。(D)
USERADMIN などユーザーが作成できる権限が必要です。
CREATE USER dbt_service_user
DEFAULT_ROLE = '<your role>'
DEFAULT_WAREHOUSE = '<your compute warehouse>'
TYPE = SERVICE
RSA_PUBLIC_KEY = '<(B) の公開鍵文字列>'
;
3. dbt Cloud で Snowflake 接続を設定
Connection を設定
以下のように Connection を設定します。
(接続、認証に関連するもののみ記載しています)
- Account :
<組織名>-<アカウントID>
- Database : 接続先の Snowflake データベース名
- Warehouse : 実行で使用する Snowflake 仮想ウェアハウス名
Environment を設定
以下のように Environment を設定します。
(接続、認証に関連するもののみ記載しています)
- Connection : 「Connection を設定」で設定した Connection
- Auth method : Key pair
- Username : (D) 接続用 Snowflake ユーザー名
- Private key : (C) 秘密鍵
- Private key passphrase : (A) パスフレーズ
- Schema : 実行で使用する Snowflake デフォルトスキーマ名
「Test Connection」ボタンからテスト接続を行い成功すれば設定完了です。
まとめ
Snowflake での MFA 必須化に対応した状態での dbt Cloud との接続方法として、サービス用ユーザーでの key-pair を使用する方式の手順についてまとめました。
Snowflake でアクセス制限を行っている場合は dbt Cloud からの接続テストが通らないことがあるので設定をご確認ください。
IP アドレス単位で dbt Cloud との接続許可を設定する方法は以下の記事で紹介されていますので、あわせてご参照ください。