この記事では、SnowflakeインスタンスをPendo Predictに接続し、予測モデルを構築する際にSnowflakeをソースとして使用できるようにする方法を説明します。
Pendo PredictはSnowflakeに対して2つのアクセスパターンをサポートしています。
- 読み取りアクセス ・ Predictは、承認されたデータベース、スキーマ、テーブル、ビュー、カラムを検出し、承認されたテーブルまたはビューからデータを読み取ることができます。
- 読み取り/書き込みアクセス - Predictは対象のSnowflakeテーブルのレコードの読み取り、挿入、更新が可能です。
Pendo Predictは、鍵ペア認証を使ってSnowflakeを認証します。Snowflake管理者が公開鍵をSnowflakeユーザーに割り当て、Predictが一致する秘密鍵を使用して認証します。
要件
Snowflake管理者がセットアップを完了したら、Pendo PredictでSnowflake接続を次の値に設定します。
| Predictフィールド | 説明 |
| ユーザー名 | Predict用に作成された専用のSnowflakeユーザー |
| 秘密鍵 | Snowflakeユーザーに設定されている公開鍵と一致する秘密鍵 |
| 秘密鍵のパスフレーズ | オプション。秘密鍵が暗号化されている場合にのみ必要です。 |
| インスタンスURL | SnowflakeアカウントのURL |
| データベース名 | PredictがアクセスすべきSnowflakeデータベース |
| ウェアハウス名 | ウェアハウスがユーザーのデフォルト倉庫として設定されていない場合は任意です |
| 役割 | Predictが使用するSnowflakeの役割は、指定されたものか、ユーザーのデフォルト役割として設定されたものかのいずれかです。 |
注:Predictで設定された役割は、Snowflakeユーザーにも付与されている必要があります。ユーザーに役割を付与すると、そのユーザーは役割に付与された権限で許可された操作を実行できるようになります(Snowflakeドキュメント)。
推奨されるSnowflakeオブジェクト
Pendoでは、個人アカウントや管理者アカウントを再利用するのではなく、Predict専用のSnowflakeサービスユーザーと役割を作成することを推奨しています。Snowflakeは、人間の介入なしにSnowflakeと相互作用するサービスまたはアプリケーションに対して、TYPE = SERVICEユーザーを定義しています。(Snowflakeドキュメント)
この記事で使用されている名前の例:
- PENDO_PREDICT_USER
- PENDO_PREDICT_ROLE
これらの名前は、組織の命名規則に合った値に置き換えることができます。
アクセスの概要
| Predictのアクセスパターン | 必要な権限 |
| 承認されたソーステーブル/ビューの読み取り |
ウェアハウス、データベース、スキーマのUSAGE。 承認された各テーブルまたはビューのSELECT。 |
| ターゲットテーブルの読み取り/書き込み |
ウェアハウス、データベース、スキーマのUSAGE。 対象テーブルのSELECT、INSERT、UPDATE。 |
ステップ1:鍵ペアを生成する
Predict Snowflakeユーザー用の秘密鍵/公開鍵ペアを生成します。
暗号化されていない秘密鍵を生成するには:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pubパスフレーズを使って暗号化された秘密鍵を生成するには、以下のコマンドを実行します。
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub生成された公開鍵と秘密鍵をコピーします。Snowflakeユーザーを作成または更新するときは、公開鍵を使用してください。Pendo Predictで接続を設定する際は、対応する秘密鍵を使用してください。秘密鍵が暗号化されている場合は、Predictにパスフレーズを入力します。Snowflakeは、パスフレーズは秘密鍵を保護し、Snowflakeには送信されないとしています。
注:公開鍵をコピーする際は、PEMヘッダーを必ず除外してください(-----BEGIN PUBLIC KEY-----と-----END PUBLIC KEY-----の間の値をコピーしてください)(Snowflakeドキュメント)。
ステップ2:専用のSnowflakeユーザーと役割を作成する
ユーザー、役割、権限付与を作成する権限を持つSnowflake役割を使用して、以下のコマンドを実行してください。
-- ステップ 1:専用の制限付き役割を作成する
CREATE ROLE IF NOT EXISTS PENDO_PREDICT_ROLE;
-- ステップ 2:専用サービスユーザーを作成する
CREATE USER IF NOT EXISTS PENDO_PREDICT_USER
TYPE = SERVICE
DEFAULT_ROLE = PENDO_PREDICT_ROLE
DEFAULT_WAREHOUSE = <WAREHOUSE_NAME> -- オプション
RSA_PUBLIC_KEY = '<PUBLIC_KEY_WITHOUT_PEM_HEADERS>';
GRANT ROLE PENDO_PREDICT_ROLE TO USER PENDO_PREDICT_USER;ステップ3:ソースデータへのアクセスを許可する
最小限の読み取り権限
Predictが読み取りアクセスを行うには、以下のSnowflake権限が必要です。
| Snowflakeオブジェクト | 必要な権限 | 目的 |
| ウェアハウス | 使用 | Predictがデータウェアハウスを使用してクエリを実行できるようにします。 |
| データベース | 使用 | Predictが承認されたデータベースを使用および検出できるようにします。 |
| スキーマ | 使用 | Predictが承認済みのスキーマを使用および検出できるようにします。 |
| テーブルまたはビュー | select | Predictが承認されたデータを読み取ることを可能にします。 |
Snowflakeでは、スキーマ内のオブジェクトを操作するには、役割に親データベースとスキーマに対する権限が必要です。また、SnowflakeはウェアハウスのUSAGEを、ウェアハウスでのクエリ実行を可能にする権限として定義しています。(Snowflakeドキュメント)
特定のテーブルやビューへの読み取りアクセスを許可する
このオプションは、Predictが選択されたテーブルのみを読み込む場合に使用します。
-- ステップ 3:データコンテナへのアクセス権を付与する(使用権限)
GRANT USAGE ON WAREHOUSE <WAREHOUSE_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT USAGE ON DATABASE <DB_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT USAGE ON SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;
ステップ4:特定のテーブル/オブジェクトに対する読み取り権限を付与する
GRANT SELECT ON TABLE <DB_NAME>.<SCHEMA_NAME>.<TABLE_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT SELECT ON VIEW <DB_NAME>.<SCHEMA_NAME>.<VIEW_NAME>
TO ROLE PENDO_PREDICT_ROLE;Predictがアクセスすべき各テーブルに対して、スキーマとテーブルの権限付与を繰り返します。
オプション:スキーマ内の現在および将来のすべてのテーブルへの読み取りアクセスを許可する
このオプションは、Predictがスキーマ内の現在および将来のすべてのテーブル/ビューを読み取れるようにする必要がある場合にのみ使用してください。
GRANT SELECT ON ALL TABLES IN SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT SELECT ON ALL VIEWS IN SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;Snowflakeによれば、GRANT SELECT ON ALL TABLES/VIEWS IN SCHEMAは既存のテーブル/ビューへのアクセス権のみを付与します。後から作成されたテーブル/ビューへのアクセスを許可するには、GRANT SELECT ON FUTURE TABLES/VIEWS IN SCHEMAを使用してください。(Snowflakeのドキュメント)
オプション:対象テーブルへの書き込みアクセスを許可する
Predictが結果をSnowflakeに書き戻す必要がある場合は、このセクションを使用してください。
Predictには対象テーブルへの読み書きアクセスが必要です。これにより、Predictは既存のレコードの読み取り、新しいレコードの挿入、および既存のレコードの更新を行うことができます。
最小限の書き込み権限
| Snowflakeオブジェクト | 必要な権限 | 目的 |
| ウェアハウス | 使用 | Predict が SQL ステートメントを実行できるようにします。 |
| データベース | 使用 | Predictが対象テーブルのデータベースにアクセスできるようにします。 |
| スキーマ | 使用 | Predictが対象テーブルのスキーマにアクセスできるようにします。 |
| 対象テーブル | select | Predictが対象テーブル内の既存のレコードを読み取ることを可能にします。 |
| 対象テーブル | INSERT | Predict に新しいレコードを挿入できるようにします。 |
| 対象テーブル | 更新 | Predictが既存のレコードを更新できるようにします。 |
対象テーブルへの書き込みアクセス権を付与する
GRANT USAGE ON WAREHOUSE <WAREHOUSE_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT USAGE ON DATABASE <DB_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT USAGE ON SCHEMA <DB_NAME>.<SCHEMA_NAME> TO ROLE PENDO_PREDICT_ROLE;
GRANT SELECT, INSERT, UPDATE ON TABLE <DB_NAME>.<SCHEMA_NAME>.<TABLE_NAME> TO ROLE PENDO_PREDICT_ROLE;Predictが書き込みを行う各テーブルに対して、スキーマとテーブルの権限付与を繰り返します。
ステップ4:Pendo Predictで接続を設定する
-
Pendo Predictアプリの[ソース]→[データコネクタ]をクリックします。
-
[新しいソース]を選択し、Snowflakeを選択します。
-
他のユーザーがすぐに認識できる名前を入力してください。
- Snowflakeのユーザー名と秘密鍵、Snowflakeアカウントのアドレス、および操作対象のデータベース名を追加してください。Predictで接続を保存する前に:
- Snowflakeの役割をユーザーのデフォルトの役割として設定するか、Predictの接続設定に入力する必要があります。
- ウェアハウスをユーザーのデフォルト倉庫として設定するか、Predictの接続設定に入力する必要があります。
-
SnowflakeをPendo Predictに接続するために[承認]を選択します。
ステップ2. Snowflakeソースを管理する
データソースの所有者として、アクセス管理を行い、接続が正しく機能しているか確認できます。これには、ソースを他のユーザーと共有したり、接続のテストをしたりすることが含まれます。
- 接続をテストするには、[その他のオプション]アイコン(3つのドット)を選択し、[接続をテスト]を選択します。
-
ソースを共有するには、[その他のオプション]アイコンを選択し、[共有]を選択してください。共有されると、予測モデルを構築する際に、他のユーザーがSalesforceのソースを使用できるようになります。