Snowflake¶
サポート対象の認証¶
- ユーザー名/パスワード
- Snowflake OAuth
- OktaまたはAzureADを使用した外部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ドキュメント |
Snowflake OAuth¶
前提条件¶
DataRobotでSnowflakeに接続するには、以下が必要です。
- Snowflakeアカウント
- 設定済みのSnowflake OAuth
DataRobotでの接続設定¶
OAuthパラメーターで接続する場合、新しいデータ接続を作成する必要があります。
OAuthを使用してデータ接続を設定するには:
-
テスト接続をクリックすると、ウィンドウが表示されるので、SnowflakeクライアントIDとクライアントシークレット、およびAzureのアプリ登録設定から取得したその他の必要事項を入力する必要があります(以下の例を参照)。
-
保存してサインインをクリックします。
-
Snowflakeのユーザー名とパスワードを入力します。 サインインをクリックします。
-
データベースクライアントに同意するには、許可をクリックします。
接続に成功すると、DataRobotに以下のメッセージが表示されます。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 | ドキュメンテーション |
---|---|---|
データ接続の必須フィールド | ||
address |
Snowflake接続用の安全な接続URLを格納する接続オブジェクト。 例: {account_name}.snowflakecomputing.com |
Snowflakeドキュメント |
warehouse |
仮想ウェアハウスの一意の識別子。 | Snowflakeドキュメント |
db |
データベースの一意の識別子。 | Snowflakeドキュメント |
資格情報の必須フィールド | ||
クライアントID | アプリケーションの公開識別子。 | Snowflakeドキュメント |
クライアントのシークレット | アプリケーションの認証に使用する秘密識別子。 | Snowflakeドキュメント |
Snowflakeアカウント名 | 組織内のSnowflakeアカウントの一意の識別子。 | Snowflakeドキュメント |
Snowflakeの外部OAuth¶
前提条件¶
DataRobotでSnowflakeに接続するには、以下が必要です。
- Snowflakeアカウント
- OktaのSnowflakeで設定済みの外部OAuth。
セキュリティ統合を伴う外部OAuth
Oktaを外部IDプロバイダー(IdP)として使用する場合は、 Oktaで新しいアプリ統合を作成する際に、http://localhost/account/snowflake/snowflake_authz_return
をサインインリダイレクトURIとして指定する必要があります。
- Snowflakeアカウント
- Microsoft Azure ADのSnowflakeで設定済みの外部OAuth。
セキュリティ統合を伴う外部OAuth
Azure ADを外部IDプロバイダー(IdP)として使用する場合は、 両方のアプリケーションをAzure ADに登録する際に、https://<datarobot_app_server>/account/snowflake/snowflake_authz_return
をリダイレクトURIとして指定する必要があります。
外部IdPの設定¶
備考
このセクションでは、外部IdPを設定するための設定例を使用します。 特定の環境と要件に基づいて外部IdPを設定する方法については、OktaまたはAzure ADのドキュメントを参照してください。
適切な外部IdPで、Snowflakeアプリケーションを作成します。
Oktaで新しいアプリ統合を作成します。
- アプリケーション > 各種アプリケーションに移動します。
- アプリ統合を作成をクリックします。
- サインイン方法で、OIDC - OpenID Connectを選択します。
- アプリケーションタイプで、ウェブアプリケーションを選択します。
- 次へをクリックします。
-
次のオプションが選択されていることを確認してください。
- クライアント資格情報
- 認証コード
- リフレッシュトークン
- 同意が必要
-
ログインで、
http://localhost/account/snowflake/snowflake_authz_return
を追加しリダイレクトURIにサインインします。 Client ID
とClient secret
が生成されます。
次に、新しい認証サーバーを作成します。
-
セキュリティ > API > 認証サーバーを追加に移動します。
- オーディエンスを
https://<partner_name>.snowflakecomputing.com/
に設定します。<partner_name>
は現在のDataRobot Snowflakeインスタンスのdatarobot_partner
です。
- オーディエンスを
-
スコープ > スコープを追加に移動します。
- 名前を
session:role:public
に設定します(Snowflakeロールを参照)。 - チェックインの場合、
Require user consent for this scope
とBlock services from requesting this scope
を追加します。 - (オプション)同意を必要とする
offline_access
スコープを設定します。
- 名前を
-
アクセスポリシー > ルールを追加に移動し、次のルールを追加します。
- チェックイン
Client Credentials
を追加します。 - チェックイン
Authorization Code
を追加します。 - クライアントインテグレーション(上記で作成)を
Assigned to clients
フィールドに追加します。
- チェックイン
-
トークンに移動し、トークンを作成をクリックします。
-
次の結果が得られます。
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>'
Azure ADでSnowflakeリソースのアプリケーションを登録します。
- MS Azure > Azure AD > アプリの登録に移動します。
-
新規登録をクリックします。
- 名前の下に、Snowflake OAuthリソースを入力します。
- サポートされているアカウントの種類で、この組織のディレクトリのみのアカウントを選択します。
- リダイレクトURIで、ウェブを選択し
https://app.datarobot.com/account/snowflake/snowflake_authz_return
と入力します。 - 登録をクリックします。
-
概要セクションで、
<OAUTH_CLIENT_ID>
値となるアプリケーション(クライアント)IDフィールドから、Client IDをコピーします。 - 証明書とシークレットをクリックし、新規クライアントシークレットをクリックします。
- シークレットの説明を追加します。
- 追加をクリックして、シークレットをコピーします。 この値は、この手順の後では使用できないことに注意してください。 これは、
<OAUTH_CLIENT_SECRET>
の値になります -
APIを公開します。
- アプリケーションID URIの横にある設定リンクをクリックし、固有IDであることを確認します(これは変更する必要はありません)。 これは、値
になります - スコープを追加をクリックして、Snowflakeロールを表すスコープを追加します
- スコープ名を
session:scope:public
と入力します。
- アプリケーションID URIの横にある設定リンクをクリックし、固有IDであることを確認します(これは変更する必要はありません)。 これは、値
Azure ADでSnowflakeクライアントアプリのアプリケーションを登録します。
- MS Azure > Azure AD > アプリの登録に移動します。
-
新規登録をクリックします。
- 名前の下に、Snowflake OAuthクライアントを入力します。
- サポートされているアカウントの種類で、この組織のディレクトリのみのアカウントを選択します。
- リダイレクトURIで、ウェブを選択し
https://app.datarobot.com/account/snowflake/snowflake_authz_return
と入力します。 - 登録をクリックします。
-
API Permission > Add Permission > My APIs > Snowflake Resource
に移動し、上記で作成したSnowflakeリソースのスコープを選択します(session:scope:public
)。 -
ユーザーに代わってアクセストークンを要求するプログラマティッククライアントの場合、アプリケーションの委任権限を次のように設定します。
- [APIのアクセス許可]をクリックします。
- [アクセス許可の追加]をクリックします。
- [自分のAPI]をクリックします。
- ステップ1で作成したSnowflake OAuth Resourceをクリックします。Azure ADで、OAuth Resourceを設定します。
- [委任されたアクセス許可]ボックスをクリックします。
- ステップ3で作成されたスコープに関連する権限を確認します
session:scope:public
- [アクセス許可の追加]をクリックします。
-
Snowflakeと連携するための追加情報を収集します。
- [アプリの登録]をクリックします
- [Snowflake OAuthリソース]をクリックします。
- [概要]インターフェイスで[エンドポイント]をクリックします
<AZURE_AD_OAUTH_TOKEN_ENDPOINT>
値となるOAuth 2.0トークンエンドポイント(v2)をコピーします- エンドポイントの概要からOpenID ConnectメタデータのURLをコピーして、新規ウィンドウに貼り付けます
- 「jwks_uri」 パラメーターを見つけ、
<AZURE_AD_JWS_KEY_ENDPOINT>
値となるその値をコピーします(例:https://login.microsoftonline.com/6064c47c-80e4-4a2b-82ee-1fc5643b37a2/discovery/v2.0/keys
) - フェデレーションメタデータドキュメントをコピーし、URLを新規ウィンドウで開きます。
<AZURE_AD_ISSUER>
値となる「entityID」を見つけます(例:https://sts.windows.net/6064c47c-80e4-4a2b-82ee-1fc5643b37a2/
)
-
次の結果が得られます。
Client ID
とClient secret
は、Snowflake OAuth Resourceからコピーしました- ステップ5
<AZURE_AD_ISSUER>
の値からコピーされた発行者URL - Azure ADステップ5で、Snowflake Resourceにアプリケーションを登録する
<AZURE_AD_JWS_KEY_ENDPOINT>
の値 - Azure ADステップ3で、Snowflake Resourceにアプリケーションを登録する
<SNOWFLAKE_APPLICATION_ID_URI>
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/aus15ca55wkdOxplJ5d7
AUDIENCE
:https://hl91180.us-east-2.aws.snowflakecomputing.com/
JWKS_URI
:https://dev-11863425.okta.com/oauth2/aus15ca55wkdOxplJ5d7/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 = 'https://sts.windows.net/6064c47c-80e4-4a2b-82ee-1fc5643b37a2/'
external_oauth_jws_keys_url = 'https://login.microsoftonline.com/6064c47c-80e4-4a2b-82ee-1fc5643b37a2/discovery/v2.0/keys'
external_oauth_audience_list = ('api://8aa2572f-c9e6-4e91-9eb1-dcd84c856dd2')
external_oauth_token_user_mapping_claim = 'upn'
external_oauth_any_role_mode = 'ENABLE'
external_oauth_snowflake_user_mapping_attribute = 'login_name';
連携のアクセス権をpublicロールに付与します。
grant USE_ANY_ROLE on integration external_oauth_azure_1 to PUBLIC;
LOGIN_NAME
のユーザーが、Azureログインと同じであることを確認します。 Snowflakeで、次のクエリーを使用して検証します。
DESC USER <SNOWFLAKE_LOGIN_NAME>
ログイン名が異なる場合、Snowflakeは、Azure ADで生成されたアクセストークンを検証できません。 その場合、以下のコマンドを使用し、SnowflakeとAzureを一致させます。
ALTER USER <SNOWFLAKE_LOGIN_NAME> SET LOGIN_NAME='<EMAIL_USED_FOR_AZURE_LOGIN>'
DataRobotでの接続設定¶
外部OAuthパラメーターで接続する場合、新しいデータ接続を作成する必要があります。
外部OAuthを使用したSnowflakeデータ接続を設定するには:
-
接続をテストをクリックした後、ドロップダウンからOktaまたはAzure ADのいずれかのOAuthプロバイダーを選択し、その他の必須フィールドに入力します。次に、保存してサインインをクリックします。
-
OktaまたはAzure ADのユーザー名とパスワードを入力します。 サインインをクリックします。
-
データベースクライアントに同意するには、許可をクリックします。
接続に成功すると、DataRobotに以下のメッセージが表示されます。
必須パラメーター¶
以下にリストされている必須フィールドに加えて、他の使用可能な設定オプションについては、 Snowflakeのドキュメントを参照してください。
必須フィールド | 説明 | ドキュメンテーション |
---|---|---|
データ接続の必須フィールド | ||
address |
Snowflake接続用の安全な接続URLを格納する接続オブジェクト。 例: {account_name}.snowflakecomputing.com |
Snowflakeドキュメント |
warehouse |
仮想ウェアハウスの一意の識別子。 | Snowflakeドキュメント |
db |
データベースの一意の識別子。 | Snowflakeドキュメント |
資格情報の必須フィールド | ||
クライアントID | アプリケーションの公開識別子。 Okta管理コンソールで、アプリケーション > 各種アプリケーション > OpenID Connectウェブアプリ > サインオンタブ > サインオン方法に移動します。 Azure ADでは、これは applicationID とも呼ばれます。 |
Oktaまたは Azure ADのドキュメント |
クライアントのシークレット | アプリケーションの認証用の秘密識別子。 Okta管理コンソールで、アプリケーション > 各種アプリケーション > OpenID Connectウェブアプリ > サインオンタブ > サインオン方法に移動します。 Azure ADでは、これは application secret とも呼ばれます。 |
Oktaまたは Azure ADのドキュメント |
Snowflakeアカウント名 | 組織内のSnowflakeアカウントの一意の識別子。 | Snowflakeドキュメント |
発行者URL | SAML IDプロバイダーを一意に識別するURL。 「発行者」とは、IDプロバイダーのエンティティIDを指します。 例:
|
Oktaまたは Azure ADのドキュメント |
スコープ | Snowflakeのロール名が含まれます。 例: Snowflakeアナリストのパラメーター。
|
Snowflakeドキュメント |
これらのフィールドに適切な値については管理者にお問い合わせください。
注意事項¶
デフォルトでは、Snowflakeは二重引用符で囲まれた識別子を保存および解決する際に、アルファベットの大文字と小文字を保持します。ただし、Snowflakeでこのデフォルトを上書きすると、二重引用符で囲まれた識別子は大文字として保存および解決されます。 DataRobotは大文字と小文字を区別するプラットフォームであるため、元の大文字と小文字を維持することが重要です。
大文字と小文字の区別に関連する潜在的な問題を回避するには、DataRobotのSnowflakeデータ接続に移動し、QUOTED_IDENTIFIERS_IGNORE_CASE
パラメーターを追加して、値をFALSE
に設定します。 詳細については、 Snowflakeのドキュメントを参照してください。
トラブルシューティング¶
問題 | 解決方法 | 説明 |
---|---|---|
DataRobotで操作を実行しようとすると、ファイアウォールが毎回IPアドレスをクリアするよう要求します。 | DataRobotのホワイトリストに登録されたすべてのIPを追加します。 | ホワイトリストの送信元IPアドレスを参照してください。 ホワイトリストに登録されたIPをすでに追加している場合は、既存のIPが完全であることを確認してください。 |
外部OAuth Snowflake接続をAzure ADでテストすると、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のユーザー名と一致するように変更できます。 |