Looker から Snowflake への OAuth 接続
[履歴] [最終更新] (2023/07/23 14:58:17)
最近の投稿
注目の記事

概要

こちらのページで準備した Looker から、Snowflake の DB を OAuth 認証で参照する設定例を記載します。

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

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

Role と User を Looker 用に作成します。関連ページ: Snowflake におけるアクセス制御の設定

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 をクリックします。

Uploaded Image

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

Uploaded Image

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

Test をクリックします。

Uploaded Image

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

Uploaded Image

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

Uploaded Image

許可をクリックします。

Uploaded Image

OAuth 認可コードのフロー

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

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

Snowflake 内のアクセスログ

OAuth 認可コードのフローが完了した段階で、Snowflake 内のアクセスログは以下のようになっています。関連ページ: 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 認証を行ったユーザーのものです。

Uploaded Image

IS_SUCCESS が YES となっています。

Uploaded Image

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

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

Uploaded Image

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

Uploaded Image

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 におけるセキュリティ関連の機能

Snowflake OAuth と External OAuth

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

Introduction to OAuth

Uploaded Image

OAuth フローの再実行

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

Uploaded Image

Looker バージョン

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

Feature support

Snowflake supports the following features as of Looker 23.12

Snowflake Network Policy

関連ページ:

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

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

Uploaded Image

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

Uploaded Image

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

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

Uploaded Image

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

Uploaded Image

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

Uploaded Image

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 を実行する例です。

Uploaded Image

関連ページ