PowerBIとSnowflakeがキーペアで接続できる!?
気づいたらできるようになったらしいです。実際接続できたので、手順を共有します。
(まだ公式ドキュメントすらない)
作業ステップ概略
- Snowflake上で、ユーザー認証方式としてのKey Pairを可能にする
- Key Pairを作ってSnowflake側に公開鍵の方を登録する
- PowerBI上で、秘密鍵をPowerBIのUI上で直接貼り付けて接続
Snowflake上で、ユーザー認証方式としてのKey Pairを可能にする
Snowflake上で、ユーザーの認証ポリシーをいじってください。
(直接ユーザー情報をいじる方法はあるはずですが、一旦無視します。)
重要なのは、 認証方法としてのkeypairを許可すること です。
-- 認証ポリシーを作成(auth_policy)
CREATE or replace AUTHENTICATION POLICY auth_policy
AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD', 'PROGRAMMATIC_ACCESS_TOKEN', 'KEYPAIR');
-- 認証方法として、'KEY PAIR'が必要になります。
-- userに作成した認証ポリシーをアタッチ
ALTER USER <user_name> SET AUTHENTICATION POLICY auth_policy;
Key Pairを作ってSnowflake側に公開鍵の方を登録する
以下のサイトを参考にしてkey pairを作成しました。今回はwindows機で実施しています。
-- 鍵の生成
ssh-keygen -t rsa -b 2048 -m pkcs8 -C "<Comment>"
-- 鍵のPKCS#8への変換?
ssh-keygen -e -f id_rsa.pub -m pkcs8
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvvsegsVWgn2+qyZo0qFm
<redacted>
1wIDAQAB
-----END PUBLIC KEY-----
上で作った公開鍵を、snowflake上で登録しました。
-- なぜかこの形式で公開鍵を登録したら反応した。謎
alter user <username> set rsa_public_key = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvvsegsVWgn2+qyZo0qFm
<redacted>
1wIDAQAB
-----END PUBLIC KEY-----';
以上の手順で、snowflake側に公開鍵を登録しました。
PowerBI上で、秘密鍵をPowerBIのUI上で直接貼り付けて接続
最後に、PowerBI上でデータソース設定を普通に入力し、認証方法のみKeyPairを選択しました。
サーバーURLは、以下を参考にしてください。形式としては <組織名>-<アカウント名>.snowflakecomputing.com
で行けるはず
最後に、認証部分に以下のように秘密鍵をそのまんま改行とかも変えずに貼り付けてください。(ユーザーネーム入力欄はこの上にあるので、それは入力してください。)
以上で接続できるはずです。
遭遇したエラー集
遭遇したエラーと対処法を書いておきます。
"ADBC:[Snowflake]Failed to parse PEM block containing the private key"
PowerBIに貼り付ける秘密鍵の形式を変更したら解消
エラー発生時
なんか鍵
エラー解消時
-----BEGIN ENCRYPTED PRIVATE KEY-----
なんか鍵
-----END ENCRYPTED PRIVATE KEY-----
"ADBC:[Snowflake] 390202 (080004): Authentication attempt rejected by the current authentication policy"
認証方法にkey pairを追加したら解決
"ADBC:[Snowflake]390144(080004): JWT token is invalid."
snowflakeに登録する公開鍵の形式を変更したら解消
-- エラー発生時
alter user <username> set rsa_public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvvsegsVWgn2+qyZo0qFm
<redacted>
1wIDAQAB';
-- エラー解消時
alter user <username> set rsa_public_key = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvvsegsVWgn2+qyZo0qFm
<redacted>
1wIDAQAB
-----END PUBLIC KEY-----';
参考資料
FAQ
Q:公式ドキュメントどこ?
A:なんか・・・ないですね・・・
Q:なんかうまくいかない
A:以下を確認してください
- 各種鍵の登録の仕方
- 鍵生成のプロトコル
- 接続に使用するsnowflakeユーザーの認証ポリシーについて、keypairが追加されているか
Q:そもそもkeypairないんだけど
A:わからない・・・ライセンスpremiumだから出たのか・・・?
Q:これユーザータイプ何でやった?
A:以下で作ったユーザー
create or replace user <username>
type = service
default_role = <role name>;
Q:やっぱりなんかうまくいかない
A:KeyPairうんぬんじゃなくて、Snowflake2PowerBIにミスっている可能性があります。以下が考えられます。
- userに紐づいているロールにDB、スキーマ、テーブルへのアクセス権限がない(sysadminなどを継承させればいいはず?)
- アクセス権限がないと、接続はできるがDBなどが全然表示されません。grantとかで権限付与するか、sysadminとかをユーザーにアタッチしてください。
- userに紐づいているロールにWarehouseの使用権がない
-
GRANT USAGE ON WAREHOUSE <warehouse name> TO ROLE <role name>
で権限付与してください。
-
- direct queryでやっているが、データは取れるが挙動が不審
- 接続ロールの大文字小文字とかミスってるかもしれないです。PowerQueryの詳細クエリから、データソース接続部分を見直してください。