Amazon Quick と Snowflake をキーペア認証で接続してみた

Amazon Quick と Snowflake をキーペア認証で接続してみた

Amazon Quick から Snowflake へキーペア認証で接続してみました。サービスユーザーの作成から接続、日本語での自然言語質問まで、実際の手順を紹介します。
2026.07.24

札幌オフィスの中川です。

Amazon Quick から Snowflake への接続には、認証方式が複数用意されています。このうちパスワード認証は Snowflake が段階的な廃止を進めており、アプリケーションからの接続にパスワードを使う構成は今後成立しなくなります。

https://docs.snowflake.com/en/user-guide/security-mfa-rollout

本記事では、パスワードに代わる接続方式のうちキーペア認証を選び、Snowflake のトライアルアカウントを使って、サービスユーザーの作成から接続、SPICE 取り込み、日本語での自然言語質問までを一通り試します。

なぜキーペア認証なのか

Amazon Quick の Snowflake データソースは、ユーザーガイド上はパスワードと OAuth の 2 方式が記載されています。

https://docs.aws.amazon.com/quick/latest/userguide/connecting-to-snowflake.html

キーペア認証は AWS 公式ブログで発表された方式で、執筆時点ではユーザーガイドに記載がありません。仕様を確認する場合はブログと API リファレンスを参照してください。API リファレンスの AuthenticationType には KEYPAIR が定義されています。

https://aws.amazon.com/blogs/machine-learning/amazon-quick-suite-now-supports-key-pair-authentication-to-snowflake-data-source/

https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SnowflakeParameters.html

パスワード以外の選択として OAuth か キーペア があります。
OAuth は Okta のような ID プロバイダー(IdP)を介して認証する方式で、Snowflake と IdP の双方に連携設定が必要です。さらに Quick 側の制約として、ユーザーガイドによるとデータソース作成は API 経由のみで、AWS Secrets Manager の利用が前提です。検証済み IdP として記載されているのも Okta と PingFederate のみです。
一方キーペアは IdP を使わず、コンソールだけで完結します。認証情報の発行や失効を IdP で集中管理したい組織では OAuth が向きますが、まず小さく始めるならキーペアが手軽です。

やってみた

Snowflake のトライアルアカウントを用いて検証します。
データには架空の飲料メーカーの売上サンプルを用います。

Snowflake 側の準備

Quick から接続するために、Snowflake 側に以下を用意します。

  • クエリを処理するウェアハウス
  • 接続先のデータベース
  • Quick に許可する操作を SELECT だけに絞ったロール
  • 接続に使うサービスユーザー

Snowsight のワークスペースに次の SQL を貼り付けて実行します。全体を EXECUTE IMMEDIATE の1文に包んであるので、カーソルを文中に置いて実行すれば順番にまとめて作成できます。

EXECUTE IMMEDIATE $$
BEGIN
  IF (CURRENT_ROLE() != 'ACCOUNTADMIN') THEN
    RETURN 'エラー: ロールを ACCOUNTADMIN に切り替えてから実行してください(現在: ' || CURRENT_ROLE() || ')';
  END IF;

  -- 1. ウェアハウス(XS・60秒で自動サスペンド)
  CREATE WAREHOUSE IF NOT EXISTS QUICK_WH
    WAREHOUSE_SIZE = 'XSMALL'
    AUTO_SUSPEND = 60
    AUTO_RESUME = TRUE
    INITIALLY_SUSPENDED = TRUE;

  -- 2. データベース・スキーマ
  CREATE DATABASE IF NOT EXISTS BEVERAGE_DEMO;
  CREATE SCHEMA IF NOT EXISTS BEVERAGE_DEMO.SALES;

  -- 3. テーブル(デモ用の商品マスタと売上明細)
  CREATE TABLE IF NOT EXISTS BEVERAGE_DEMO.SALES.PRODUCTS (
    PRODUCT_ID   VARCHAR(10)  NOT NULL,
    PRODUCT_NAME VARCHAR(100) NOT NULL,
    CATEGORY     VARCHAR(50)  NOT NULL,
    SUB_CATEGORY VARCHAR(50)  NOT NULL,
    UNIT_PRICE   NUMBER(10,0) NOT NULL,
    COST_RATE    NUMBER(4,2)  NOT NULL,
    PRIMARY KEY (PRODUCT_ID)
  );

  CREATE TABLE IF NOT EXISTS BEVERAGE_DEMO.SALES.SALES (
    SALE_DATE  DATE          NOT NULL,
    REGION     VARCHAR(20)   NOT NULL,
    PREFECTURE VARCHAR(20)   NOT NULL,
    CHANNEL    VARCHAR(20)   NOT NULL,
    PRODUCT_ID VARCHAR(10)   NOT NULL,
    QUANTITY   NUMBER(10,0)  NOT NULL,
    AMOUNT     NUMBER(12,0)  NOT NULL
  );

  -- 4. Quick 接続用の最小権限ロール
  CREATE ROLE IF NOT EXISTS QUICK_ROLE;
  GRANT USAGE ON WAREHOUSE QUICK_WH                           TO ROLE QUICK_ROLE;
  GRANT USAGE ON DATABASE BEVERAGE_DEMO                       TO ROLE QUICK_ROLE;
  GRANT USAGE ON SCHEMA BEVERAGE_DEMO.SALES                   TO ROLE QUICK_ROLE;
  GRANT SELECT ON ALL TABLES IN SCHEMA BEVERAGE_DEMO.SALES    TO ROLE QUICK_ROLE;
  GRANT SELECT ON FUTURE TABLES IN SCHEMA BEVERAGE_DEMO.SALES TO ROLE QUICK_ROLE;

  -- 5. Quick 接続用サービスユーザー(キーペア認証・パスワードなし)
  CREATE USER IF NOT EXISTS QUICK_SVC
    TYPE = SERVICE
    DEFAULT_ROLE = QUICK_ROLE
    DEFAULT_WAREHOUSE = QUICK_WH;

  GRANT ROLE QUICK_ROLE TO USER QUICK_SVC;

  RETURN 'セットアップ完了: QUICK_WH / BEVERAGE_DEMO.SALES (PRODUCTS, SALES) / QUICK_ROLE / QUICK_SVC';
END;
$$;

TYPE = SERVICE はパスワードや SAML SSO でのログインができず、MFA の対象外となるユーザータイプで、Quick のようなアプリケーションからの接続にはこちらを使います。

実行結果としては以下になります。

01_snowflake_setup_sql

デモ用のサンプルデータも入れておきます。CSV は Snowsight の Load Data UI からロードしました。列のマッピングをプレビューで確認してからロードできます。

03_load_sales_csv

ロードできたか、件数で確認します。

SELECT COUNT(*) FROM BEVERAGE_DEMO.SALES.SALES;  -- 31632

04_sales_row_count

キーペアの生成と公開鍵の登録

手元のターミナルで RSA キーペアを生成します。Snowflake のドキュメントに従い、秘密鍵は PKCS#8 形式で、2048 ビット以上の鍵長にします。

https://docs.snowflake.com/en/user-guide/key-pair-auth

# 秘密鍵を生成する。パスフレーズの入力を求められる
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8
chmod 600 rsa_key.p8

# 秘密鍵から公開鍵を生成
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

ここで設定したパスフレーズは、後に Quick 側で入力します。

公開鍵は BEGIN/END のヘッダー行を除き、改行を取り除いた 1 行の文字列にして Snowflake ユーザーに登録します。macOS なら以下のワンライナーでクリップボードに入ります。

grep -v KEY rsa_key.pub | tr -d '\n' | pbcopy
ALTER USER QUICK_SVC SET RSA_PUBLIC_KEY = '<コピーした公開鍵>';

-- 確認。RSA_PUBLIC_KEY_FP に SHA256:... が入っていれば OK
DESCRIBE USER QUICK_SVC;

05_register_public_key

接続先ホスト名の確認

Quick の設定画面で入力する接続先ホスト名を Snowsight で確認しておきます。左下のアカウントメニューから アカウント名 > View account details を開くと、Account/Server URL としてそのまま使える形式で表示されます。この後の Quick 側の設定で使うので、表示したままにしておきます。

06_account_details

Quick 側でデータソースを作成

ここまでで Snowflake 側の準備は完了です。Quick のコンソールに移り、データソースを作成します。

左メニューから データ > データソースタブ > データソースの作成 をクリックします。

06b_datasource_menu

コネクター一覧から Snowflake を選択します。

07_connector_list

認証タイプの初期値はパスワードになっているので、KeyPair に切り替えて次のように入力します。

項目 入力値
接続タイプ パブリックネットワーク
データベースサーバー <アカウント識別子>.snowflakecomputing.com
データベース BEVERAGE_DEMO
ウェアハウス QUICK_WH
認証タイプ KeyPair
ユーザー名 QUICK_SVC
プライベートキー rsa_key.p8 の全文。BEGIN/END ヘッダー込み
パスフレーズ 鍵生成時に設定したもの

データベースサーバーは表示したままにしておいた Account/Server URL、データベース・ウェアハウス・ユーザー名は最初のセットアップ SQL で作った名前、プライベートキーとパスフレーズは鍵の生成手順で作ったものです。

プライベートキーはヘッダー込みの全文を貼り付けます。Snowflake に登録した公開鍵の「ヘッダーなし 1 行」とは形式が異なるため、混同すると接続に失敗します。

「接続を検証」を押して成功したら、そのままデータソースを作成します。

08_keypair_datasource

データセット作成と日本語での質問

続いて、データセットを作成します。データ > データセットタブ > データセットの作成 をクリックし、先ほど作成した Snowflake データソースを選択します。

2026-07-24_221924

スキーマを選ぶと、QUICK_ROLE に SELECT 権限を付与したテーブルが一覧に表示されます。SALES を選択します。

09_select_tables

データセットの編集画面でクエリモードに SPICE を選択して取り込みます。SPICE は Quick のインメモリエンジンで、取り込んだ後のクエリは SPICE 上のデータで処理されるため、閲覧のたびに Snowflake へ接続しません。

10_dataset_editor_spice

11_spice_import_done

取り込んだデータセットに、日本語で質問してみます。データセットの詳細画面にある チャット をクリックすると、チャットエージェントが開きます。

「自動販売機の売上が多い都道府県トップ5は?」と聞いてみます。チャネルでの絞り込み、都道府県での集計、上位5件の抽出という3段階の指示を日本語のまま解釈して、ランキングの表が返ってきました。「東京都が圧倒的トップで、2位の大阪府の約1.5倍」という要約文も添えられています。

12_japanese_ai_question

Snowflake 側のデータが日本語でも、接続からデータセット、自然言語質問まで特別な設定なしで通ることが確認できました。

さいごに

Amazon Quick と Snowflake をキーペア認証で接続できることを確認しました。
Snowflake 側のサービスユーザー作成から Quick 側の接続設定までコンソールと SQL だけで完結するので、パスワード廃止後の接続方式としてまず手元で試しやすい構成です。

今回の検証はトライアルアカウントの ACCOUNTADMIN ですべて作成しましたが、実環境で接続を設定する人が Snowflake の管理者権限を持っているとは限りません。サービスユーザーやロールの作成を誰に依頼するか、秘密鍵をどこに保管して誰がローテーションするか、パブリック接続のままでよいかなどは、事前に整理しておく必要だと思いました。

参考


Snowflakeの導入支援はクラスメソッドに!

クラスメソッドでは Snowflake の導入を支援しております。
製品の詳細や支援の内容についてお気軽にお問い合わせください。

Snowflakeの詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事