PowerBIとSnowflakeがキーペアで接続できる!?
気づいたらできるようになったらしいです。実際接続できたので、手順を共有します。
(まだ公式ドキュメントすらない)
20251110追記
Service版も対応したみたいです
ので、その設定方法を追記しました。
[データ ソースの資格情報] を選択してサインインします。 セマンティック モデルは、Basic、KeyPair、または OAuth2 (Microsoft Entra ID) 資格情報を使用して Snowflake に署名できます。 次の手順で、Microsoft Entra ID を使って SSO を有効にすることができます。
~~ 20251026追記~~
このキーペア認証ですが、Desktop版のみ対応しており、Service版は未対応 です。
回避策として、PATを用いた認証がありますので、そちらの記事を作成しています。
https://qiita.com/hotate_2235/items/394e312f52fd5bb8ab29
作業ステップ概略
- 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で行けるはず
最後に、認証部分に以下のように秘密鍵をそのまんま改行とかも変えずに貼り付けてください。(ユーザーネーム入力欄はこの上にあるので、それは入力してください。)
以上で接続できるはずです。
Service上でのデータソース設定の追加
レポートを発行後、PowerBI Serviceのワークスペース上でセマンティックモデルを選択し、データソース設定のところから資格情報を編集を選択してください。
すると、認証方法のところにKeyPairが追加されているので、ここに接続時のユーザー名、パスフレーズ、秘密鍵の方を入れてください。
これで接続可能になるはずです。
(Desktop版とService版で、KeyPair関連で設定項目が異なるなどは基本的になく、Desktop版でつながっていればそれをそのまま流用していけるはずです。)
遭遇したエラー集
遭遇したエラーと対処法を書いておきます。
"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"
SNowflake上で、アカウントの認証方法に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:なんか・・・ないですね・・・ なんか出ましたね。
https://learn.microsoft.com/ja-jp/power-bi/connect-data/service-connect-snowflake
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の詳細クエリから、データソース接続部分を見直してください。
Q:Desktop版でうまくいっているのにService版でうまくいかない
A:接続時のユーザー名だったり、アップロードしている鍵ファイルが公開鍵になっていたり、パスフレーズを間違えているなどの可能性があります。Desktop版のデータソース接続設定やパスフレーズなどを再度確認してください。


