Microsoft Entra ID を利用した Snowflake へのユーザー自動プロビジョニング

Snowflake のユーザーの払い出しは運用・保守で必要となる作業の1つです。

少人数の場合にはユーザーの払い出しにも大きな労力はかかりませんが、大規模な払い出しが必要な場合にはある程度の労力がかかってしまいます。

この労力を軽減することができる方法の1つとして、Microsoft Entra ID のユーザーと紐づける形で自動で Snowflake のユーザーを作成することができる SCIM 統合の機能があります。

本記事では以下の記事を基に、Microsoft Entra ID のユーザに対応した Snowflake のユーザーを自動でプロビジョニングできる SCIM統合 の設定を実施していきます。

検証内容

今回の検証では、まず Microsoft Entra ID のユーザーに紐づく Snowflake ユーザーを自動でプロビジョニングするための設定を行います。その後、Microsoft Entra ID に対応した Snowflake ユーザーが作成・削除されるかどうかを確認します。

プロビジョニングの設定は Microsoft Entra ID のユーザー単位、グループ単位で可能ですが、本検証では環境の都合によりユーザー単位で設定します。

Snowflake 側の設定

ユーザーのプロビジョニングに必要なオブジェクトの作成と、Azure 側の設定で必要となるパラメーターの確認を行います。いずれの操作も、対象の Snowflake 環境にアクセスして行います。

オブジェクトの作成

ユーザーのプロビジョニングに必要なオブジェクトを作成します。

ロールの作成

ユーザーをプロビジョニングする際に利用する「AAD_PROVISIONER」という名前のロールを作成します。

ロールの作成後、ユーザーとロールの作成権限を付与します。

USE ROLE USERADMIN;

CREATE ROLE AAD_PROVISIONER;

GRANT CREATE USER ON ACCOUNT TO ROLE AAD_PROVISIONER;
GRANT CREATE ROLE ON ACCOUNT TO ROLE AAD_PROVISIONER;
セキュリティ統合の作成

Microsoft Entra ID からの接続を許可するためにセキュリティ統合を作成します。

USE ROLE ACCOUNTADMIN;

CREATE SECURITY INTEGRATION AAD_PROVISIONING
    TYPE = SCIM
    SCIM_CLIENT = 'AZURE'
    RUN_AS_ROLE = 'AAD_PROVISIONER';

トークンの発行とパラメーターの確認

Azure 側の設定で必要となるトークンの発行とパラメーターの確認を行います。

認証トークンの発行

以下のクエリでEntra アプリケーションからアクセスする際に利用する認証トークンを作成・確認します。

SELECT SYSTEM$GENERATE_SCIM_ACCESS_TOKEN('AAD_PROVISIONING');

ここで発行する認証トークンは有効期限が6ヶ月間となっているため、継続してプロビジョニングを自動化する場合は有効期限内にトークンを再発行する必要があります。

アカウント識別子の確認

以下のクエリで Snowflake のアカウント識別子を確認します。

SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();

Microsoft Entra 側の設定

Entra アプリケーションの作成とプロビジョニングに必要な設定を行います。いずれの操作も、Microsoft Entra ID 管理センターにアクセスして行います。

Microsoft Entra アプリケーションの作成・設定

アプリケーションの作成

「ID」>「アプリケーション」 >「 エンタープライズアプリケーション」 >「 すべてのアプリケーション」 > 「新しいアプリケーション」を選択します。

検索ボックスに「Snowflake」と入力し、「Snowflake for Microsoft Entra ID」を選択します。

任意の名前を入力し、「作成」を選択するとアプリケーションが作成されます。

アプリケーションの設定

作成したアプリケーションの「プロビジョニング」に移動後、プロビジョニングモードを自動に設定します。

管理者資格情報を開き、Snowflake で確認したトークンとパラメーターを利用してテナントのURLとシークレットを入力します。

  • テナントのURL:https://アカウント識別子.snowflakecomputing.com/scim/v2/
  • シークレットトークン:認証トークン

「テスト接続」を選択し、Snowflake との通信が成功することを確認後に保存します。

保存後に画面を更新すると、「マッピング」から「Provision Microsoft Entra ID Users」が選択できます。

以下の画面で、Snowflake のユーザーをプロビジョニングする際の属性を設定できますが、今回はデフォルトのままとしています。また、Snowflake のユーザー作成だけを許可するなどの設定も可能です。

最後に「設定」を以下のように設定します。

  • 範囲:割り当てられたユーザーとグループのみを同期する
  • プロビジョニング状態:オン

これで設定は完了です。

作成したアプリケーションに Microsoft Entra ID のユーザーを割り当てることで、 Snowflake のユーザーが自動でプロビジョニングされるようになります。

Snowflake ユーザーの追加

では、実際に Microsoft Entra ID のユーザーを割り当てた際の挙動を確認していきます。

Microsoft Entra ID 側でのプロビジョニング対象ユーザーの追加

「ユーザーとグループ」に移動後、「ユーザーまたはグループの追加」を選択します。

プロビジョニングの対象とするユーザーを選択します。 今回の検証では、事前に Microsoft Entra ID で作成しておいた「scim_test_user1」を選択します。

Microsoft Entra ID 側での作業は以上です。

Snowflake 側でのプロビジョニング結果の確認

Snowflake 側で以下のクエリを実行し、実際にユーザーが作成されているかどうかを確認します。

SHOW USERS LIKE <ユーザー名>;

実行結果を確認すると、以下のように対象のユーザーが作成されていることが分かります。

注意点として、プロビジョニングは約40分の間隔で実行されるため、Snowflake 側にユーザーが追加されるまでにはタイムラグがあります。

Microsoft Entra ID 側での操作完了直後に確認しても反映されていないことがほとんどなので、操作後は一定時間空けてから確認してください。

Snowflake ユーザーの削除

次に Microsoft Entra ID 側でユーザーを削除した場合の動きについても確認していきます。

今回は退職者が出た場合を想定し、Microsoft Entra ID のユーザーを削除した際の挙動を確認します。

Entra ID 側でのプロビジョニング対象ユーザーの削除

「すべてのユーザー」から対象のユーザーを選択し、「削除」を選択します。

「削除済みのユーザー」に移動し、対象のユーザーを選択後に「完全に削除」を選択します。

Microsoft Entra ID 側での作業は以上です。

Snowflake 側でのプロビジョニング結果の確認

追加時と同様に Snowflake 側で以下のクエリを実行し、ユーザーが削除されているかどうかを確認します。

SHOW USERS LIKE <ユーザー名>;

実行結果を確認すると、以下のように対象のユーザーが確認されていることが確認できました。

まとめ

本記事では Microsoft Entra ID を利用した Snowflake に対するユーザーのプロビジョニングについて実施してみました。

今回は環境の都合で実施できていませんが、グループ単位でのプロビジョニングを設定することで、Microsoft Entra ID の既存のグループを活用して大規模なユーザーのプロビジョニングが簡単に行えると感じました。

また、社員の退職時にMicrosoft Entra ID を削除することで、Snowflake のユーザーも合わせて削除することができることも分かりました。

Snowflake ではアクセス制御にロールを利用していることから、今回検証した内容を活用して Snowflake のロールの付与なども実施できないかを検証してみたいと思いました。何か新たな気付きなどがあれば、随時新たな記事を投稿できればと思います。

それでは、また別の記事でお会いしましょう!

執筆担当者プロフィール
武信 雄平

武信 雄平(日本ビジネスシステムズ株式会社)

Data&AI プラットフォーム部 Data ソリューション1グループ。Snowflakeを中心としたデータ基盤の構築・運用を経験。趣味は美味しいもの(特に甘味)を食べに行くことです。

担当記事一覧