Power BIにSnowflake SERVICE USERをkeypair接続する
こんにちは,shimasan0x00(@shimasan0x00)です.
今回はPowerBIにSnowflakeをソースとして接続する際にSnowflakeのキーペア認証しているサービスユーザを用いて接続する方法について紹介していきます.
Snowflake側で検証用のDBやユーザを作成し,functional role(今回の場合は参照用)を付与していきます.
必要なリソースを作成した後,PowerBI側でSnowflakeと接続していきます.
環境
- Windows11
- 25H2
- PowerBI Desktop
- 2.149.1429.0 64-bit (2025年11月)
- Snowflake
- Enterprise 無料トライアル
Snowflake
Keypair認証のためのキー作成(ローカル)
まずは公式ドキュメントに記載されている方法に従ってキーペアを作成していきます.
最終的に,snowflake_pbi.pub.one_lineに必要な文字列が生成されます.
# キーペア作成処理
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out snowflake_pbi.p8 -nocrypt
openssl rsa -in snowflake_pbi.p8 -pubout -out snowflake_pbi.pub
# Snowflakeに登録しやすくするために公開鍵を1行の文字列に変換
# 後ほど,Snowflakeで登録する際に使用する
cat snowflake_pbi.pub \
| grep -v "BEGIN PUBLIC KEY" \
| grep -v "END PUBLIC KEY" \
| tr -d '\n' > snowflake_pbi.pub.one_line検証DB&ユーザ作成
次にSnowflake上にサンプルDBとユーザを作成していきます.
データはアカウント作成時に存在するSNOWFLAKE_SAMPLE_DATA DBから取得していきます.
USE ROLE SYSADMIN;
USE WAREHOUSE COMPUTE_WH;
-- database作成
CREATE OR REPLACE DATABASE PBI_DEMO_DB;
CREATE OR REPLACE SCHEMA PBI_DEMO_DB.TPCH_SF1;
-- SNOWFLAKE_SAMPLE_DATAの各種テーブルデータを元に自前DBにテーブル作成
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.CUSTOMER AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.PART AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.PART;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.NATION AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.LINEITEM AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.LINEITEM;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.ORDERS AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.PARTSUPP AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.PARTSUPP;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.REGION AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION;
CREATE OR REPLACE TABLE PBI_DEMO_DB.TPCH_SF1.SUPPLIER AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.SUPPLIER;
-- ユーザ作成
USE ROLE SECURITYADMIN;
CREATE OR REPLACE ROLE PBI_ROLE_RO;
-- Warehouse
USE ROLE SYSADMIN;
CREATE OR REPLACE WAREHOUSE PBI_WH
WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
INITIALLY_SUSPENDED = TRUE;
USE ROLE SECURITYADMIN;
GRANT USAGE ON WAREHOUSE PBI_WH TO ROLE PBI_ROLE_RO;
-- 自前DBへの権限付与
GRANT USAGE ON DATABASE PBI_DEMO_DB TO ROLE PBI_ROLE_RO;
GRANT USAGE ON SCHEMA PBI_DEMO_DB.TPCH_SF1 TO ROLE PBI_ROLE_RO;
GRANT SELECT ON ALL TABLES IN DATABASE PBI_DEMO_DB TO ROLE PBI_ROLE_RO;
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE PBI_DEMO_DB TO ROLE PBI_ROLE_RO;
GRANT SELECT ON FUTURE TABLES IN DATABASE PBI_DEMO_DB TO ROLE PBI_ROLE_RO;
USE ROLE USERADMIN;
CREATE OR REPLACE USER PBI_SVC_USER
TYPE = SERVICE
DEFAULT_ROLE = PBI_ROLE_RO
DEFAULT_WAREHOUSE = PBI_WH
COMMENT = 'Power BI service user (TYPE=SERVICE, key-pair auth)';
-- ここに "snowflake_pbi.pub.one_line" を入れる
ALTER USER PBI_SVC_USER SET RSA_PUBLIC_KEY = '{文字列}';
GRANT ROLE PBI_ROLE_RO TO USER PBI_SVC_USER;
-- ロール付与確認
SHOW GRANTS TO USER PBI_SVC_USER;以下は任意ですが,サービストライアル作成アカウントにロールを付与してロール挙動を確認しています.
-- 以下,任意サービストライアル作成アカウントにロールを付与してデータ確認
GRANT ROLE PBI_ROLE_RO TO USER {ユーザ名};
-- DB確認(ロールを切り替えて確認)
USE ROLE PBI_ROLE_RO;
SHOW DATABASES LIKE 'PBI_DEMO_DB';
-- 適当なスキーマ/テーブルを覗く(例)
SHOW SCHEMAS IN DATABASE PBI_DEMO_DB;
-- 例: TPCH_SF1 を使うなら
SHOW TABLES IN SCHEMA PBI_DEMO_DB.TPCH_SF1;
SELECT * FROM PBI_DEMO_DB.TPCH_SF1.CUSTOMER LIMIT 10;
Power BI
Power BI Desktopを開いたら,ホーム>データを取得から「詳細」を選択します.

様々なデータソースを選択できるので,snowflakeと検索して対象を特定します.

Snowflakeの詳細情報を入力することができるので以下を記入します.
- Server
- アカウントの詳細で確認できるアカウント/サーバーURL
- XXX.snowflakecomputing.com
- Warehouse
- 今回作成したWH
- ロール名
- 今回作成したROLE

次に接続方式が出てくるのでKeyPairを選択しましょう.
Usernameと「Keypair認証のためのキー作成(ローカル)」で作成した秘密キーを入力することで疎通することができます!

ナビゲーターでPBI_DEMO_DBがちゃんと確認でき,テーブルも見えています.

ちゃんとデータ読み込み時にインポート及びDirectQueryの選択が可能となっておりユースケースに合わせて選択できるので安心です.

