❄️
【Alation】【Snowflake】Alation-Snowflakeの接続と連携データの制限
本記事で参考になるケース
- alationにsnowflakeを連携して、カタログを作りたい
- alationに取り込まれるデータは制限したい
- AlationのCustom extraction queriesの例が公式にもなかったため参考が欲しい # 202505現在
記事の概要
- AlationとSnowflakeへの接続を行う
- Alationに取り込むデータベース、スキーマ等はある程度制限したい
- とりあえずメタデータ(データベース,スキーマ,テーブル, カラム情報)だけを連携させる
方法
Alation - Snowflake間の接続準備
参考:Alation公式Snowflakes接続セットアップ
- Snowflake内でAlationがメタデータをSnowflakeから読み取る用のユーザを作成
今回はメタデータだけを連携する. したがって公式で示されている権限はほとんど不要
CREATE ROLE <alation_role>;
CREATE WAREHOUSE <warehouse_name>;
CREATE USER <alation_user> PASSWORD='*****' DEFAULT_ROLE = <alation_role> MUST_CHANGE_PASSWORD = TRUE;
GRANT ROLE <alation_role> TO USER <alation_user>;
GRANT USAGE ON WAREHOUSE <warehouse_name> TO ROLE <alation_role>;
GRANT USAGE ON DATABASE <DBNAME> TO ROLE <alation_role>;
GRANT USAGE ON ALL SCHEMAS IN DATABASE <DBNAME> TO ROLE <alation_role>;
GRANT REFERENCES ON ALL TABLES IN DATABASE <BDNAME> TO ROLE <alation_role>;
ここでいうREFERENCES
はテーブルの中身を見ることはできないがテーブル構成/カラムなどは閲覧できる権限である
※セキュリティを高めるためにalation_userの接続もとでIP制限をしておこう
しかし、AlationのIPはAlation利用者内で共有であるため、あくまで気休めであることに注意
Alationが利用するIP
を参考にalation_userにNetwork Policyを設定する
CREATE OR REPLACE NETWORK POLICY <alation_nw_policy> ALLOWED_IP_LIST = ('52.195.197.8/29');
ALTER USER <alation_user> set NETWORK_POLICY = <alation_nw_policy>;
- Alation用Snowflakeユーザを登録
Alationの
Sources Manage Settings → Database名
から設定をしていこう
詳細はAlation公式より
AlationとSnowflakeとの接続がとれるるところまで確認
↓
さて、ここからさらにAlationが刈り取るメタデータを制限する
Custom extraction queries (optional)
を設定する
Custom extraction queries (optional)
Alation - Metadata Extraction - 参考クエリを載せていく.
Catalog Query
連携するデータベースを制限したい
SELECT DATABASE_NAME AS CATALOG
FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASES
WHERE DELETED IS NULL AND DATABASE_NAME='<detabase名>'
Schema Query
連携するスキーマを制限したい
SELECT CATALOG_NAME AS CATALOG, SCHEMA_NAME AS SCHEMA, COMMENT AS REMARKS
FROM SNOWFLAKE.ACCOUNT_USAGE.SCHEMATA
WHERE DELETED IS NULL
AND TRIM(SCHEMA_NAME) !='' AND CATALOG_NAME=<DBNAME> AND SCHEMA_NAME=<SCHEMANAME>
Table Query
連携するテーブルを制限したい
SELECT TABLE_CATALOG AS CATALOG, TABLE_SCHEMA AS SCHEMA, TABLE_NAME, 'TABLE' AS TABLE_TYPE, COMMENT AS REMARKS
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLES
WHERE DELETED IS NULL AND TABLE_TYPE = 'BASE TABLE'
AND TRIM(TABLE_NAME) !='' AND TABLE_CATALOG=<DBNAME>
AND TABLE_SCHEMA =<TABLENAME>
Column Query
連携するカラムを制限したい
SELECT TABLE_CATALOG AS CATALOG, TABLE_SCHEMA AS SCHEMA, TABLE_NAME,
DECODE(DATA_TYPE,'TEXT','VARCHAR' || '(' || CHARACTER_MAXIMUM_LENGTH || ')',
'NUMBER',DATA_TYPE || '(' || NUMERIC_PRECISION ||','|| NUMERIC_SCALE || ')',
DATA_TYPE) AS TYPE_NAME,
DATA_TYPE, COLUMN_NAME, ORDINAL_POSITION,
IS_NULLABLE, COMMENT AS REMARKS, COLUMN_DEFAULT
FROM SNOWFLAKE.ACCOUNT_USAGE.COLUMNS
WHERE DELETED IS NULL
AND TRIM(COLUMN_NAME) NOT IN ('','SYS_MV_SOURCE_PARTITION','METADATA$ROW_VERSION')
AND TRIM(TABLE_NAME) !='' AND CATALOG=<DBNAME>
AND SCHEMA =<SCHEMANAME>
AND COLUMN_NAME !=<COLUMN_NAME>
Function Query
連携する関数を制限したい
SELECT FUNCTION_CATALOG AS CATALOG ,FUNCTION_SCHEMA AS SCHEMA, FUNCTION_NAME, COMMENT AS REMARKS, '' AS FUNCTION_DEFINITION, ARGUMENT_SIGNATURE, FUNCTION_ID
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
WHERE DELETED IS NULL AND CATALOG=<DBNAME>
AND SCHEMA =<SCHEMANAME>
AND FUNCTION_NAME =<FANCNAME>
他、View、TagなどもCustom extraction queriesの利用が可能である. 適宜利用してみるといい感じにできるかも!
(...正直力尽きた)
Alationの接続検証時にSnowflakeのQuery Historyを見ることでどんなクエリがAlationから叩かれているかを確認できますので、そちらをご参考にしてください.
Discussion