モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

Looker から Snowflake への OAuth 接続

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2023/07/22
最終更新最終更新
2025/01/02
記事区分記事区分
一般公開

目次

    フロントからバックエンドまで、幅広い技術をカバーしています。

    Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。

    参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections

    Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成

    Role と User を Looker 用に作成します。

    USE ROLE USERADMIN;
    
    CREATE ROLE looker_role;
    GRANT ROLE looker_role TO ROLE SYSADMIN;
    
    CREATE USER looker_user PASSWORD='looker_user';
    GRANT ROLE looker_role TO USER looker_user;
    ALTER USER looker_user SET DEFAULT_ROLE='LOOKER_ROLE' DEFAULT_WAREHOUSE='LOOKER_WH';
    

    Warehouse と DB を Looker 用に作成します。

    USE ROLE SYSADMIN;
    
    CREATE WAREHOUSE looker_wh WAREHOUSE_SIZE=XSMALL AUTO_SUSPEND=60 AUTO_RESUME=true INITIALLY_SUSPENDED=true;
    GRANT USAGE ON WAREHOUSE looker_wh TO ROLE looker_role;
    
    CREATE DATABASE looker_db;
    CREATE SCHEMA looker_db.looker_scratch;
    CREATE TABLE looker_db.looker_scratch.mytbl (c1 STRING, c2 DATE);
    INSERT INTO looker_db.looker_scratch.mytbl (c1, c2) VALUES ('abc', '2023-01-01');
    
    GRANT USAGE ON DATABASE looker_db TO ROLE looker_role;
    GRANT USAGE ON SCHEMA looker_db.looker_scratch TO ROLE looker_role;
    GRANT SELECT ON ALL TABLES IN SCHEMA looker_db.looker_scratch TO ROLE looker_role;
    

    Snowflake 内の Looker 用 Security Integration 作成

    関連資料: CREATE SECURITY INTEGRATION

    USE ROLE ACCOUNTADMIN;
    
    CREATE SECURITY INTEGRATION looker_integration TYPE=oauth ENABLED=true OAUTH_CLIENT=looker OAUTH_REDIRECT_URI='https://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.looker.app/external_oauth/redirect';
    

    OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET の値を確認します。Security Integration の名称は大文字で作成されていることに注意します。

    SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER_INTEGRATION');
    

    Looker 内の Database Connection 作成

    Add Conneciton をクリックします。

    以下の事項に注意して値を入力します。

    • Host: https:// は不要です。Account Identifiers に記載の情報を参照して、Snowflake の識別子を入力します。
    • Database: Snowflake 内部では大文字で管理されていることに注意します。
    • Schema: Snowflake 内部では大文字で管理されていることに注意します。

    Test をクリックします。

    Login to OAuth をクリックします。

    ポップアップに認証情報を入力します。

    許可をクリックします。

    OAuth 認可コードのフロー

    許可をクリックすると、Connections の画面に遷移します。遷移するまでの間に、OAuth の認可コードが Looker に渡されていることが確認できます。Chrome の Preserve log にチェックを入れておくことで、画面遷移中のリクエストも確認できます。

    上から 3つ目のログが、許可ボタンをクリックした直後のものです。

    Snowflake OAuth に対して認可コードの発行を求めています。

    一般的な OAuth では HTTP 302 が返されることが期待されますが、HTTP 200 が返されていることが分かります。

    上記のとおり HTTP 200 ではありましたが、一般の OAuth と同様に、redirectUri に指定した Looker の URL に HTTP GET リクエストが発生したことが分かります。クエリストリングで認可コードが Looker に渡されました。

    redirectUri へのアクセスのレスポンスとしては HTTP 302 となっており、Connections 管理画面に遷移することとなります。

    Snowflake 内のアクセスログ

    OAuth 認可コードのフローが完了した段階で、Snowflake 内のアクセスログは以下のようになっています。

    関連資料: LOGIN_HISTORY , LOGIN_HISTORY_BY_USER

    SELECT * FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY_BY_USER(USER_NAME => 'looker_user', RESULT_LIMIT => 1000)) ORDER BY event_timestamp;
    

    パスワードログインのログが確認できます。アクセス元IP は、OAuth 認証を行ったユーザーのものです。

    IS_SUCCESS が YES となっています。

    OAuth アクセストークンのフロー

    pendo.looker.app などのアクセスは Connections ページへの遷移後のものです。

    Test をクリックします。Snowflake OAuth が完了していない場合は、以下のような表記になります。

    Snowflake OAuth が完了している場合は、以下のような表記になります。

    Snowflake Resource Server へのアクセス (JDBC_DRIVER がクライアントとなっているアクセス) は、ユーザーのブラウザではなく、Looker サーバであることに注意します。以下のように、Looker サーバの IP アドレスがアクセス元になります。

    Snowflake OAuth Authorization Flow について、Step1-2 の Client Application がユーザーの Web ブラウザであるのに対して、Step3-4 の Client Application は Looker サーバーとなっています。実際に、上記 Test ボタンを押したあとの Chrome のネットワークログには、アクセストークン取得に関するログは出力されていません。

    OAuth 認証が失敗する場合

    Snowflake 側でのログの確認

    Auditing OAuth Logins で Snowflake 側のログ確認が可能です。

    SELECT * FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY_BY_USER(USER_NAME => 'looker_user', RESULT_LIMIT => 1000)) ORDER BY event_timestamp;
    

    注意: Information schema は即時でログが確認可能です。ACCOUNT_USAGE schema は確認できるまでに時間を要します。

    Snowflake OAuth と External OAuth

    Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections で手順がサポートされているのは、OAuth の authorization server が Snowflake OAuth の場合のみです。External OAuth として Auth0 を用いている場合などは含みません。

    Introduction to OAuth

    OAuth フローの再実行

    Looker 画面右上の Account から OAuth Connection Credentials の Reauthorize をクリックすることで、OAuth フローを再実行して検証できます。

    Looker バージョン

    Looker のバージョンが Snowflake をサポートしているか確認します。

    Feature support

    Snowflake supports the following features as of Looker 23.12

    認可コードの取得でエラーになる場合

    前述のとおり、Snowflake OAuth Authorization Flow の Step1-2 のアクセス元IP は、ユーザーの Web ブラウザ側です。looker_user に適用される Network Policy が、アカウントレベルまたはユーザーレベルで設定されている場合、該当の IP アドレスが許可されている必要があります。

    アクセスが許可されていない場合は、以下のようなエラーとなります。

    アクセストークンの取得でエラーになる場合

    前述のとおり、Snowflake OAuth Authorization Flow の Step3-4 のアクセス元IP は、Looker サーバです。

    Step3 において、アカウントレベルの Network Policy で該当の IP (Looker サーバの IP) が許可されていない場合は、以下のようなエラーになります。Step3 においては、looker_user のユーザーレベルで設定されている Network Poliy の値は意味を持ちません。

    Step4 において、アカウントレベルまたはユーザーレベルで looker_user に適用される Network Policy が、該当の IP (Looker サーバの IP) を許可していない場合は、以下のようなエラーになります。

    Step3 について、アカウントレベルの Network Policy で該当の IP (Looker サーバの IP) を許可することを避けるためには、Security Integration 専用の Network Policy を設定できます。参考資料: Snowflake OAuth Overview / Network Policies

    CREATE NETWORK POLICY mypolicy3 ALLOWED_IP_LIST = ('35.199.188.212');
    ALTER SECURITY INTEGRATION looker_integration SET NETWORK_POLICY = MYPOLICY3;
    

    注意: 内部的には大文字で管理されています。大文字で Network Policy 名を指定する必要があります。

    Looker サーバの IP アドレスを取得するためには、以下のようなページを参照します。

    補足: ALTER SECURITY INTEGRATION (Snowflake OAuth)

    The network policy restricts the list of user IP addresses when exchanging an authorization code for an access or refresh token and when using a refresh token to obtain a new access token. If this parameter is not set, the network policy for the account (if any) is used instead.

    上記ページで NETWORK_POLICY をサポートするのは CUSTOM だけと読み取れますが、実際には Looker 用の security integration でも設定できます。

    クエリ実行例

    SQL Runner を実行する例です。

    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    フロントからバックエンドまで、幅広い技術をカバーしています。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事