Snowflake¶
サポート対象の認証¶
- ユーザー名/パスワード
- キーペア
- Snowflake OAuth
- OktaまたはMicrosoft Entra ID(旧Azure AD)を使用した外部OAuth
ユーザー名/パスワード¶
前提条件¶
DataRobotでSnowflakeに接続するには、以下が必要です。
- Snowflakeアカウント
セキュリティ統合を伴うOAuth
OAuthの設定時にセキュリティ統合を作成する場合は、OAUTH_REDIRECT_URI
をhttps://<datarobot_app_server>/account/snowflake/snowflake_authz_return
として指定する必要があります。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 | ドキュメンテーション |
---|---|---|
address |
Snowflake接続用の安全な接続URLを格納する接続オブジェクト。 例: {account_name}.snowflakecomputing.com |
Snowflakeドキュメント |
warehouse |
仮想ウェアハウスの一意の識別子。 | Snowflakeドキュメント |
db |
データベースの一意の識別子。 | Snowflakeドキュメント |
キーペア¶
前提条件¶
DataRobotでSnowflakeに接続するには、以下が必要です。
- Snowflakeアカウント
- 秘密キーファイル(秘密キーの生成方法については、Snowflakeのドキュメントを参照してください)
DataRobotでの接続設定¶
以下のタブでは、キーペア認証を使用したSnowflakeデータ接続を設定する方法について紹介します。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 |
---|---|
ユーザー名 | Snowflakeアカウント内のユーザーの一意の識別子(つまり、Snowflakeにログインするときに使用する名前)。 |
秘密鍵 | 秘密キーファイルからコピーした文字列 |
表示名 | DataRobot内のSnowflake資格情報を表す一意の識別子 |
Snowflakeでの秘密キーの生成やキーペア認証の設定など、Snowflakeのキーペア認証の詳細については、Snowflakeのドキュメントを参照してください。
Snowflake OAuth¶
前提条件¶
DataRobotでSnowflakeに接続するには、以下が必要です。
- Snowflakeアカウント
- 設定済みのSnowflake OAuth
DataRobotでの接続設定¶
OAuthパラメーターで接続する場合、新しいデータ接続を作成する必要があります。
OAuthを使用してデータ接続を設定するには:
-
接続をテストをクリックすると、資格情報ウィンドウが表示されます。 SnowflakeのクライアントID、クライアントシークレット、アカウント名を入力します。 OAuthプロバイダーとして
Snowflake
を選択します。 -
保存してサインインをクリックします。
-
Snowflakeのユーザー名とパスワードを入力します。 サインインをクリックします。
-
データベースクライアントに同意するには、許可をクリックします。
接続に成功すると、DataRobotに以下のメッセージが表示されます。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 | ドキュメンテーション |
---|---|---|
データ接続の必須フィールド | ||
address |
Snowflake接続用の安全な接続URLを格納する接続オブジェクト。 例: {account_name}.snowflakecomputing.com |
Snowflakeドキュメント |
warehouse |
仮想ウェアハウスの一意の識別子。 | Snowflakeドキュメント |
db |
データベースの一意の識別子。 | Snowflakeドキュメント |
資格情報の必須フィールド | ||
クライアントID | アプリケーションの公開識別子。 | Snowflakeドキュメント |
クライアントのシークレット | アプリケーションの認証に使用する秘密識別子。 | Snowflakeドキュメント |
Snowflakeアカウント名 | 組織内のSnowflakeアカウントの一意の識別子。 | Snowflakeドキュメント |
Snowflakeの外部OAuth¶
前提条件¶
OAuthを使用してDataRobotでSnowflakeに接続する前に、以下が必要です。
- Snowflakeアカウント
- OktaのSnowflakeで設定済みの外部OAuth。
セキュリティ統合を伴う外部OAuth
Oktaを外部IDプロバイダー(IdP)として使用する場合、Oktaで新しいアプリ連携を作成する際にサインインリダイレクトURIとしてhttps://<datarobot_app_server>/account/snowflake/snowflake_authz_return
を指定する必要があります。
Microsoft Entra IDはAzure Active Directoryの新しい名前です。
- Snowflakeアカウント
- Microsoft Entra IDのSnowflakeで設定済みの外部OAuth。
セキュリティ統合を伴う外部OAuth
Entra IDを外部IDプロバイダー(IdP)として使用する場合は、 両方のアプリケーションをEntra IDに登録する際に、https://<datarobot_app_server>/account/snowflake/snowflake_authz_return
をリダイレクトURIとして指定する必要があります。
外部IdPの設定¶
備考
このセクションでは、外部IdPを設定するための設定例を使用します。 特定の環境と要件に基づいて外部IdPを設定する方法については、OktaまたはEntra IDのドキュメントを参照してください。
適切な外部IdPで、Snowflakeアプリケーションを作成します。
Oktaで新しいアプリ統合を作成します。
- アプリケーション > 各種アプリケーションに移動します。
- アプリ統合を作成をクリックします。
- サインイン方法で、OIDC - OpenID Connectを選択します。
- アプリケーションタイプで、ウェブアプリケーションを選択します。
- 次へをクリックします。
- 新しいアプリケーションの名前を入力します。
-
付与タイプで、以下のオプションが選択されていることを確認します。
- クライアント資格情報
- 認証コード
- リフレッシュトークン
-
ログインで、サインインリダイレクトURIに
http://<datarobot_app_server>/account/snowflake/snowflake_authz_return
を追加します。 - 保存をクリックします。これにより、
クライアントID
とクライアントシークレット
が生成されます。
新しい認証サーバーを作成する
- セキュリティ > API > 認証サーバーへ移動します。 認証サーバーの追加をクリックします。
- 名前を入力します。
- オーディエンスを
https://<account_identifier>.snowflakecomputing.com/
に設定します。 - 保存をクリックします。
-
スコープ > スコープを追加に移動します。
- 名前を
session:role:public
に設定します。public
はPublicというSnowflakeのロールを指します。 これは別のロール名でもかまいませんが、Snowflake内にも存在する必要があります。 - ユーザーの同意には必須を設定します。
このスコープではユーザーの同意が必要
とサービスがこのスコープを要求するのをブロックする
を追加します。- (オプション)同意を必要とする
offline_access
スコープを設定します。
- 名前を
-
アクセスポリシーに移動して、ポリシーの追加をクリックします。
- 割り当て先で、次のクライアントを選択し、作成したばかりのアプリケーションを選択します。
- ポリシーを作成をクリックします。
- ルールを追加をクリックします。
-
名前を入力し、以下のオプションが選択されていることを確認します。
- チェックイン
Client Credentials
を追加します。 - チェックイン
Authorization Code
を追加します。
- チェックイン
-
ルールを作成をクリックします。
必要な情報
SnowflakeとDataRobotのセットアップを進める前に、以下の情報をOktaにコピーしていることを確認します。
- クライアントID
- クライアントのシークレット
- Okta発行者のURL
- JWKS URI
- オーディエンス
オーディエンスは「設定」タブに表示され、発行者のURLとJWKS URIを確認するには、メタデータURIのリンクをクリックします。 これにより、必要な情報を含むJSONアイテムが読み込まれます。
(オプション)アプリケーションのテスト
Oktaで作成したばかりのアプリケーションをテストするには:
- トークンのプレビューに移動し、リクエストプロパティに付与タイプ、アプリケーションに割り当てられているユーザー、および指定されたスコープを入力します。 トークンのプレビューをクリックします。
-
次の結果が得られます。
Issuer
、たとえば、https://dev-11863425.okta.com/oauth2/aus15ca55wkdOxplJ5d7
。- Okta APIへのプログラムによるアクセス用の認証
Token
。 - 認証サーバーのメタデータJSON(設定 > メタデータURI)。
Okta API呼び出し
curl --location --request GET 'https://<OKTA_ACCOUNT>.okta.com/api/v1/users/me' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: SSWS <TOKEN>'
curl --location --request GET 'https://<OKTA_ACCOUNT>.okta.com/api/v1/users/<USER_ID>/clients/<CLIENT_ID>/grants' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: SSWS <TOKEN>'
curl --location --request DELETE 'https://<OKTA_ACCOUNT>.okta.com/api/v1/users/<USER_ID>/grants/<GRANT_ID>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: SSWS <TOKEN>'
Microsoft Entra IDでSnowflakeリソースのアプリケーションを登録します。
- MS Azure > Microsoft Entra ID > アプリの登録に移動します。
-
新規登録をクリックします。
- 名前の下に、Snowflake OAuthリソースを入力します。
- サポートされているアカウントの種類で、この組織のディレクトリのみのアカウントを選択します。
- リダイレクトURIで、ウェブを選択し
https://<datarobot_app_server>/account/snowflake/snowflake_authz_return
と入力します。 - 登録をクリックします。
-
APIを公開します。
- アプリケーションID URIの横にある設定リンクをクリックし、固有IDであることを確認します(これは変更する必要はありません)。 これは、値
になります。 - スコープを追加をクリックして、Snowflakeロールを表すスコープを追加します
- Snowflakeのロール名を使用して、スコープを
session:scope:<snowflake_role_name>
のように入力します。 カスタムロールの場合は、Snowflakeでロール名を設定し、スコープをsession:scope:<custom_role_name>
のように入力します。 - スコープ名を
session:role-any
と入力します。 - 新しく作成されたスコープの値をコピーします。 これは、
<OAUTH_SCOPES>
の値になります。
- アプリケーションID URIの横にある設定リンクをクリックし、固有IDであることを確認します(これは変更する必要はありません)。 これは、値
Microsoft Entra IDでSnowflakeクライアントアプリのアプリケーションを登録します。
- MS Azure > Microsoft Entra ID > アプリの登録に移動します。
-
新規登録をクリックします。
- 名前の下に、Snowflake OAuthクライアントを入力します。
- サポートされているアカウントの種類で、この組織のディレクトリのみのアカウントを選択します。
- リダイレクトURIで、ウェブを選択し
https://<datarobot_app_server>/account/snowflake/snowflake_authz_return
と入力します。 - 登録をクリックします。
-
概要セクションで、アプリケーション(クライアント)IDフィールドからクライアントIDをコピーします。 これは
<OAUTH_CLIENT_ID>
と呼ばれます。 - 証明書とシークレットをクリックし、新規クライアントシークレットをクリックします。
- 追加をクリックします。 シークレットをコピーします。 これは
<OAUTH_CLIENT_SECRET>
と呼ばれます。 -
オプション ユーザーに代わってアクセストークンをリクエストする必要があるプログラムクライアントの場合は、アプリケーションの委任権限を以下のように設定します。
- APIのアクセス許可をクリックします。
- アクセス許可の追加をクリックします。
- [自分のAPI]をクリックします。
- ステップ1で作成したSnowflake OAuth Resourceをクリックします。Entra IDで、OAuth Resourceを設定します。
- [委任されたアクセス許可]ボックスをクリックします。
- ステップ3で作成されたスコープに関連する権限を確認します
session:scope:role-any
- [アクセス許可の追加]をクリックします。
Snowflakeとの連携のために以下の情報を収集します。
- アプリの登録をクリックします。
- Snowflake OAuthリソースをクリックします。
- 概要ページで、エンドポイントをクリックします。
- OAuth 2.0トークンエンドポイント(v2) のURLの最初の部分(例:
https://login.microsoftonline.com/6064c47c-80e4-4a555b-82ee-1fc5643b37a2
)をコピーします。 これは、<ISSUER_URL>
の値になります - OpenID Connectメタデータドキュメントの値をコピーし、新しいウィンドウに貼り付けます。 「jwks_uri」 パラメーターを見つけ、
<JWS_KEY_ENDPOINT>
値となるその値をコピーします(例:https://login.microsoftonline.com/6064c47c-80e4555b-82ee-1fc5643b37a2/discovery/v2.0/keys
) - フェデレーションメタデータドキュメントをコピーし、URLを新規ウィンドウで開きます。
<ENTITY_ID>
値となる"entityID"パラメーターを見つけます。これは<AZURE_AD_ISSUER>
とも呼ばれます(例:https://sts.windows.net/6064c47c-80e4-555582ee-1fc5643b37a2/
)。
以下の値をコピーしたことを確認します。
-
<OAUTH_SCOPES>
は、Snowflake OAuth Resourceからコピーしました -
Snowflake OAuthリソースの概要およびエンドポイントビューにある
<APP_ID_URI>
、<ISSUER_URL>
、<JWS_KEY_ENDPOINT>
、<ENTITY_ID>
の各値。 -
<OAUTH_CLIENT_ID>
と<OAUTH_CLIENT_SECRET>
は、Snowflake OAuthクライアントからコピーしました
Snowflakeの設定¶
備考
このセクションでは、Snowflakeで外部IdPを設定するための設定例を使用します。 特定の環境と要件に基づいてSnowflakeで外部IdPを設定する方法については、Snowflakeのドキュメントを参照してください。
Snowflakeで以下のコマンドを実行して、適切な外部IdPの連携を作成します。
create security integration external_oauth_okta_2
type = external_oauth
enabled = true
external_oauth_type = okta
external_oauth_issuer = '<OKTA_ISSUER>'
external_oauth_jws_keys_url = '<JWKS_URI>'
external_oauth_audience_list = ('<AUDIENCE>')
external_oauth_token_user_mapping_claim = 'sub'
external_oauth_snowflake_user_mapping_attribute = 'login_name';
CREATE OR REPLACE USER <user_name>
LOGIN_NAME = '<okta_user_name>';
alter user <user_name> set DEFAULT_ROLE = 'PUBLIC';
参考値:
-
OKTA_ISSUER
:https://dev-11863425.okta.com/oauth2/aus15ca55wxplJ5d7
-
AUDIENCE
:https://hl91180.us-east-2.aws.snowflakecomputing.com/
-
JWKS_URI
:https://dev-11863425.okta.com/oauth2/aus15ca55wxplJ5d7/v1/keys
(Okta認証サーバーのメタデータJSONから取得) -
okta_user_name
(Okta > ディレクトリ > ユーザーから取得し、ユーザーを選択してから、プロフィール > ユーザー名/ログインに移動します)
備考
以下の連携を作成するにはaccountadmin
ロール、またはグローバルなCREATE INTEGRATION
権限を持つロールが必要です。
create security integration external_oauth_azure_1
type = external_oauth
enabled = true
external_oauth_type = azure
external_oauth_issuer = '<ENTITY_ID>'
external_oauth_jws_keys_url = '<JWS_KEY_ENDPOINT>'
external_oauth_audience_list = ('<APP_ID_URI>')
external_oauth_token_user_mapping_claim = 'upn'
external_oauth_any_role_mode = 'ENABLE'
external_oauth_snowflake_user_mapping_attribute = 'login_name';
参考値:
-
<ENTITY_ID>
:https://sts.windows.net/6064c47c-80e4-4a2b-4444-1fc5643b37a2/
-
<JWS_KEY_ENDPOINT>
:https://login.microsoftonline.com/6064c47c-80e4-4a2b-4444-1fc5643b37a2/discovery/v2.0/keys
-
<APP_ID_URI>
:api://8aa2572f-c9e6-4e91-4444-dcd84c856dd2
連携のアクセス権をpublicロールに付与します。
grant USE_ANY_ROLE on integration external_oauth_azure_1 to PUBLIC;
grant USE_ANY_ROLE on integration external_oauth_azure_1 to <custom_role>;
LOGIN_NAME
のユーザーが、Azureログインと同じであることを確認します。 Snowflakeで、次のクエリーを使用して検証します。
DESC USER <SNOWFLAKE_LOGIN_NAME>
ログイン名が異なる場合、Snowflakeは、Entra IDで生成されたアクセストークンを検証できません。 その場合、以下のコマンドを使用し、SnowflakeとAzureを一致させます。
ALTER USER <SNOWFLAKE_LOGIN_NAME> SET LOGIN_NAME='<EMAIL_USED_FOR_AZURE_LOGIN>'
カスタムロールを使用していてデフォルトでない場合は、以下のコマンドでデフォルトとして設定し、接続をテストします。
ALTER USER <USERNAME> SET DEFAULT ROLE='<custom_role>';
DataRobotでの接続設定¶
外部OAuthパラメーターで接続する場合、新しいデータ接続を作成する必要があります。
外部OAuthを使用したSnowflakeデータ接続を設定するには:
-
接続をテストをクリックした後、ドロップダウンからOktaまたはMS Azure ADのいずれかのOAuthプロバイダーを選択し、その他の必須フィールドに入力します。次に、保存してサインインをクリックします。
-
OAuthモーダルで、OktaまたはAzureのユーザー名とパスワードを入力します。 サインインをクリックします。
-
データベースクライアントに同意するには、許可をクリックします。
接続に成功すると、DataRobotに以下のメッセージが表示されます。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 | ドキュメンテーション |
---|---|---|
データ接続の必須フィールド | ||
address |
Snowflake接続用の安全な接続URLを格納する接続オブジェクト。 例: {account_name}.snowflakecomputing.com |
Snowflakeドキュメント |
warehouse |
仮想ウェアハウスの一意の識別子。 | Snowflakeドキュメント |
db |
データベースの一意の識別子。 | Snowflakeドキュメント |
資格情報の必須フィールド | ||
クライアントID | アプリケーションの公開識別子。 Okta管理コンソールで、アプリケーション > 各種アプリケーション > OpenID Connectウェブアプリ > サインオンタブ > サインオン方法に移動します。 Microsoft Entra ID/Azure ADでは、これは applicationID とも呼ばれます。 上の手順では、<OAUTH_CLIENT_ID> としてコピーしました。 |
Oktaまたは Entra IDのドキュメント |
クライアントのシークレット | アプリケーションの認証用の秘密識別子。 Okta管理コンソールで、アプリケーション > 各種アプリケーション > OpenID Connectウェブアプリ > サインオンタブ > サインオン方法に移動します。 Microsoft Entra ID/Azure ADでは、これは client secret とも呼ばれます。 上の手順では、<OAUTH_CLIENT_SECRET> としてコピーしました。 |
Oktaまたは Entra IDのドキュメント |
Snowflakeアカウント名 | 組織内のSnowflakeアカウントの一意の識別子。 | Snowflakeドキュメント |
発行者URL | SAML IDプロバイダーを一意に識別するURL。 「発行者」とは、IDプロバイダーのエンティティIDを指します。 例:
|
Oktaまたは Entra IDのドキュメント |
スコープ | Snowflakeのロール名が含まれます。 例: Snowflakeアナリストのパラメーター。
|
Snowflakeドキュメント |
これらのフィールドに適切な値については管理者にお問い合わせください。
機能に関する注意事項¶
- デフォルトでは、Snowflakeは二重引用符で囲まれた識別子を保存および解決する際に、アルファベットの大文字と小文字を保持します。ただし、Snowflakeでこのデフォルトを上書きすると、二重引用符で囲まれた識別子は大文字として保存および解決されます。 DataRobotは大文字と小文字を区別するプラットフォームであるため、元の大文字と小文字を維持することが重要です。
- 大文字と小文字の区別に関連する潜在的な問題を回避するには、DataRobotのSnowflakeデータ接続に移動し、
QUOTED_IDENTIFIERS_IGNORE_CASE
パラメーターを追加して、値をFALSE
に設定します。 詳細については、 Snowflakeのドキュメントを参照してください。 - データセットの更新など、スケジュールされたジョブを設定する予定がある場合、Snowflakeに接続する際にはOAuthではなく、キーペア認証またはBasic認証(ユーザー名/パスワード)を使用することをお勧めします。 アクセストークンの有効期限が切れた場合、再認証なしでリフレッシュトークンを使って更新できます。 ただし、リフレッシュトークンの有効期限が切れた場合は、再認証が必要です。
トラブルシューティング¶
問題 | 解決方法 | 説明 |
---|---|---|
DataRobotで操作を実行しようとすると、ファイアウォールが毎回IPアドレスをクリアするよう要求します。 | DataRobotのホワイトリストに登録されたすべてのIPを追加します。 | ホワイトリストの送信元IPアドレスを参照してください。 ホワイトリストに登録されたIPをすでに追加している場合は、既存のIPが完全であることを確認してください。 |
外部OAuth Snowflake接続をMicrosoft Entra IDでテストすると、DataRobotは以下のメッセージを返します。 AADSTS700016:識別子'aa2572f-c9e6-4e91-9eb1-dcd84c856dd2'のアプリケーションが、'Azure directory "datarobot" ("azuresupportdatarobot")'ディレクトリで見つかりませんでした。 これは、テナントの管理者がアプリケーションをインストールしていない場合、またはテナント内のユーザーに同意されていない場合に発生します。 認証リクエストを、誤ったテナントに送信した可能性があります。 |
スコープが作成され、付与され、Azureのリソースに割り当てられたことを確認します。 | 詳細については、 Snowflakeのセットアップセクションを参照してください。 |
データ接続を追加後、外部OAuthをテストすると、DataRobotは以下のメッセージを返します。jdbc:snowflake://datarobot_partner.snowflakecomputing.com?CLIENT_TIMESTAMP_TYPE_MAPPING=TIMESTAMP_NTZ&db=SANDBOX&warehouse=DEMO_WH&application=DATAROBOT&CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX=false. 元のエラーのJDBC接続失敗は、以下のとおりです。接続でリクエストされたロール、または接続(ACCOUNTADMIN )でリクエストされなかった場合のデフォルトロールは、アクセストークンにリストされていないか、またはフィルターされています。 別のロールを指定するか、または、OAuth認証サーバー管理者に連絡してください。 |
Azureとの接続を確立するユーザーに、デフォルトのロールが割り当てられていることを確認してください。 | デフォルトロールは、ACCOUNTADMIN 、ORGADMIN 、またはSECURITYADMIN 以外のものでなければなりません。 session:scope がscope:role-any で作成されている場合、ユーザーは、指定された管理者ロール以外のロールでログインできます。 |
接続テストをすると、DataRobotは以下のメッセージを返します。 無効なリクエストを以下に記します。リクエストトークンが、ユーザーのコンテキストと一致しません。 さまざまなリクエストまたはユーザーセッション間でユーザーコンテキスト値(Cookie、フォームフィールド、ヘッダー)をコピーしないでください。完全な単一ユーザーフロー全体で、提供された ALL の値を常に維持してください。 失敗の理由:[トークン値が一致しません。] |
ユーザーのログイン名と、SnowflakeとAzureの両方のログイン名が一致していることを確認し、ユーザーをマッピングしてアクセストークンを作成します。 | Snowflakeのログイン名を、Azureのユーザー名と一致するように変更できます。 |
Snowflake資格情報を認証しようとすると、DataRobotは次のエラーメッセージを返す: 指定されたユーザー名またはパスワードが間違っています。 |
パラメーターが有効であることを確認します。有効である場合は、推奨ドライバーバージョンを使用します。 | ユーザー名、秘密鍵、パスフレーズを確認します。すべてのパラメーターが有効な場合は、ドロップダウンの追加パラメーターを表示 > ドライバーの推奨ドライバーバージョンを使用します。 ドライバーバージョン3.13.9を使用している場合:
詳細については、 Snowflakeコミュニティの記事を参照してください。 |