
Onelogin と Snowflake を連携し SAML による SSO と SCIM によるユーザーのプロビジョニングを行う #SnowflakeDB
はじめに
Snowflake と Onelogin を連携し認証をシングルサインオン(SSO)にし、SCIM でユーザーのプロビジョニングまで行う手順をまとめてみました。Onelogin は無料トライアルを使用しています。
以下の順に作業を行います。
- Snowflake と Onelogin の SAML 構成
- Snowflake と Onelogin の SCIM 構成
フェデレーション認証を使用するためのSnowflakeの構成
Snowflake を OneLogin アプリケーションに追加する
OneLogin 管理者ポータルにサインインし、[Applications] ページで、[Add App] を選択します。Snowflake と検索し、結果から「Snowflake Computing SAML2.0, provisioning」を選択します。
任意の [Display Name] を指定します。
アプリの [Configuration] ページを開き [Snowflake Subdomain] に Snowflake アカウント名を入力します。この際、以下の点に注意します。
- 「https://」および「.snowflakecomputing.com」を除いて入力します
- URLの形式は、アカウント識別子を使用するもの、組織名を使用するものいずれでも問題ありません
- サードパーティ製ツールでの潜在的な問題を回避するために、小文字を使用することが推奨されています
次に、 OneLogin 側のアプリケーションの [SSO] ページで以下の値を確認します。異なる場合は設定の変更を行うか、新しい証明書を作成し使用します。
- X.509 Certificate
- 証明書は 2048 ビットであること
- SAML Signature Algorithm
- SHA-256
Snowflake 側の設定で使用する以下の値を確認します。
- Issuer URL
- SAML 2.0 Endpoint (HTTP)
また、X.509 Certificate の [View Details] をクリックし「X.509 Certificate」欄に記載の BEGIN CERTIFICATE と END CERTIFICATE の間のテキスト文字列も確認しておきます。こちらも後ほど使用します。
Snowflake 側の設定
ACCOUNTADMIN で以下のコマンドを実行します。オプションにはそれぞれ Onelogin 側で取得した値を指定します。SAML2_X509_CERT
については、改行や「--BEGIN CERTIFICATE-- や --END CERTIFICATE--」の文字列も含まないように注意します。
USE ROLE ACCOUNTADMIN; CREATE SECURITY INTEGRATION ONELOGININTEGRATION TYPE = SAML2 ENABLED = TRUE SAML2_ISSUER = '<Issuer URL>' SAML2_SSO_URL = '<SAML 2.0 Endpoint (HTTP)>' SAML2_PROVIDER = 'CUSTOM' SAML2_X509_CERT = '<X.509 Certificate>' SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'Onelogin' SAML2_ENABLE_SP_INITIATED = TRUE;
以上で、構成は完了です。
注意点として、すでに Snowflake 上に存在するユーザーが Onelogin 経由で正常にログインするためには Snowflake の login_name が OneLoginNameID (Subject) の値と一致する必要があります。
ここでは新規ユーザーを作成し、Onelogin 経由でログインしてみます。以下のコマンドでユーザーを作成します。
CREATE USER TEST_USER PASSWORD='<パスワード>' DEFAULT_ROLE = PUBLIC MUST_CHANGE_PASSWORD = TRUE;
Onelogin 側でも対応するユーザーを作成し、アプリケーション(Snowflake)に追加してみます。
ユーザーの情報が表示されるので、Snowflake の login_name(ここではTEST_USER
)と OneLogin の NameID (Subject) の値を一致させます。ここが異なる場合 SSO ログインが失敗します。
ここでは上記の通りTEST_USER
で一致させたので、この状態で Snowflake へのログインを行います。下図から「Onelogin を使用してサインイン」を選択します。
対象ユーザーの Onelogin のユーザー名・パスワードを指定します。
この場合MUST_CHANGE_PASSWORD
をTRUE
とし、はじめてのログインとなるため、Snowflake 側のパスワードを変更するように求められます。任意のパスワードを指定します。
Onelogin 経由でログインできました。
その他の既存ユーザーについても、Snowflake の login_name と OneLogin の NameID (Subject) の値を一致させることで SSO が可能となります。
Snowflakeとのカスタム SCIM 統合
SCIM 統合については、以下に記載があります。Onelogin はカスタムな IdP の扱いになります。
はじめに、ドキュメント記載のクエリを実行します。
クエリでは SCIM のセキュリティ統合を作成し、IdP 側で作成されたるユーザーとロールを GENERIC_SCIM_PROVISIONER
ロールが所有できるようにし、 最後のコマンドでは SCIM API リクエストで使用するアクセストークンを作成しています。この値は、後ほど Onelogin 側で使用します。
use role accountadmin; --カスタムロール GENERIC_SCIM_PROVISIONER を作成 create role if not exists generic_scim_provisioner; grant create user on account to role generic_scim_provisioner; grant create role on account to role generic_scim_provisioner; grant role generic_scim_provisioner to role accountadmin; --GENERIC_SCIM_PROVISIONER カスタムロールを使用して、 ACCOUNTADMIN ロールによるセキュリティ統合の作成を許可 create or replace security integration generic_scim_provisioning type=scim scim_client='generic' run_as_role='GENERIC_SCIM_PROVISIONER'; --認証トークンを確認 select system$generate_scim_access_token('GENERIC_SCIM_PROVISIONING');
Onelogin 側
Onelogin 側の設定手順は以下に記載があります。
OneLogin 側でアプリケーションの [Configuration] ページを開き、以下の作業を行い、設定を保存します。
- API Status で [Ebnable] をクリック
- SCIM Bearer Token に Snowflake 側で取得したアクセストークンを指定
[Provisioning] ページで、以下の手順を行い設定を保存します。
- [Enable provisioning] にチェック
- 「When users are deleted in OneLogin, or the user's app access is removed, perform the below action(OneLogin でユーザーが削除された場合、またはユーザーのアプリ アクセスが削除された場合、以下のアクションを実行する)」で任意の設定を選択
- ここでは [Delete] を指定
上記の手順で、OneLogin からユーザーをアプリにプロビジョニングできるようになります。
[Parameters] ページも確認します。Snowflake では下図の設定となっています。デフォルトでは、Onelogin 側のユーザーメールアドレスを使用してユーザーがプロビジョニングされます。defaultRole や defaultWarehouse 等のマッピング項目はありませんでした。
ここでは特に変更せず進めました。
ユーザーをプロビジョニングする
Onelogin 側でユーザーを追加し、アプリケーションに追加します。
デフォルトのパラメータ設定通り、ユーザー名は Onelogin 上のメールアドレスとなっています。特に変更はせず [Save] をクリックします。
「Users > Provisiong」から対象のユーザーを選択し、「Approve」を選択します。
Snowflake 側で確認すると、Onelogin 上のメールアドレスでユーザーが作成されています。所有者はGENERIC_SCIM_PROVISIONER
ロールになっています。
対象のユーザーはパスワード等は設定されていません。
ログインする際は「Onelogin を使用してサインイン」から Onelogin 上のユーザー名・パスワードを指定します。
ログイン後のプロファイルは下図のようになっています。
デフォルトロールは PUBLIC となっているため、ロールやウェアハウスの割り当ては別途必要です。
さいごに
Snowflake と Onelogin のSAML 連携、SCIM 統合の手順をまとめてみました。
こちらの内容が何かの参考になれば幸いです。