IT

Power BIにSnowflake SERVICE USERをkeypair接続する

shimasan0x00

こんにちは,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の選択が可能となっておりユースケースに合わせて選択できるので安心です.

スポンサーリンク
ABOUT ME
shimasan0x00
shimasan0x00
Data Engineer
高専→大学編入→大学院→社

専攻は計算社会科学,ウェブマイニング
趣味でVのデータ集めたりAI触ったり
スポンサーリンク
記事URLをコピーしました