【Snowflake】MFAデフォルト有効化に対応できるようIAM Identity Centerを使ってSSOログインさせてみた【AWS】
みなさんこんにちは、クルトンです。
今回はIAM Identity Center(AWS Organizations版)でSSOログインをさせてみました。
もしSSOログインをさせる方法で、検討していらっしゃる方がいれば参考にしてみてください。
AWS Organizationsが使えることが前提ではあるものの、IAM Identity Centerは無料で利用できます。以下サイトの「IAM アイデンティティセンターのコストはいくらですか?」というところをご確認ください。
以下から早速IAM Identity CenterとSnowflake側の必要な設定をしていきます。AWSとSnowflakeの両方とも、ログインしておいてください。
Snowflakeについては、Snowsightへログインしておくことをオススメいたします。
IAM Identity Centerの設定
まずはIAM Identity Centerを開きます。初めて設定する際には、以下のような画面になっているかと思います。「有効にする」のオレンジ色のボタンをクリックしてください。
次に現れる画面では、組織インスタンスを使用していることを確認してください。アカウントインスタンスでは設定ができません!(本当に設定できないかは確認してブログ化していますのでよければこちらをご覧ください。)
再度「有効にする」をクリックすると、以下のような画面が出てきます。
グループを設定
ユーザー単体を設定しても良いのですが、今後運用することも考えてグループ設定から開始します。左メニューから「グループ」をクリックして以下画面を表示させた後、「グループを作成」をクリックします。
お好きなグループ名を設定してください。今回はTEST_GROUPという名前で設定してみました。
ページ下部へスクロールして「グループ作成」をクリックしてください。
グループが作成できますと、以下のような画面が表示されます。
ユーザーを作成
次にユーザーを作成いたします。左メニューにある「ユーザー」をクリックし、以下のような画面を表示してください。その後、「ユーザーを追加」をクリックしてください。
ユーザーの名前などを設定します。今回自分は「TEST_USER」という名前で設定しました。
ここで重要な箇所が2点あります。
メールアドレスについて
メールアドレスは、複数ユーザーに同じものを利用できません。 そのため、必要であればメールアドレスについてはエイリアスを使うことを個人的にオススメしております。Gmailであれば『<ユーザー名+エイリアス@組織名>』のように、自分のメールアドレスの@の前に+と文字を入れると、受け取り専用のメールアドレスが設定できます。
Gmail以外で、Microsoft OutlookやExchangeをご利用の方はGmailとは異なるメールエイリアスの設定方法がございます。
また、組織によってはメールアドレスのエイリアスを取得するには社内でワークフロー申請するなども必要かと思います。
もし複数ユーザーを自分のメールアドレスで設定する必要がある場合は、よければ参考にしてください。
ユーザー名と表示名について
必ずSnowflake上のユーザー名と一致するようにしてください!
今回SSOログインのために、SAML認証というものを使用しています。SAML認証時にユーザー名をチェックして、正しいかどうかを確認する必要があるのですが、その際に使用する情報となります。
仮にログイン時に失敗してしまったら、以下URL先を参考に、SAML認証のやり取りで失敗していないか確認することも可能です。(自分はログイン時に引っかかってしまい、以下URL先を参考に調査しました……。)
続いて、先ほど作成したグループを設定します。その後「ユーザーを追加」をクリックしてください。
以下のような画面が表示されます。
設定したメールアドレスへ以下のような内容のメールが届きますので、「Accept invitation」をクリックします。
「Accept invitation」をクリックすると、以下のような画面がWebブラウザで新規タブが立ち上がります。パスワードを設定してください。ちなみに、リンク切れになってしまった場合でも、IAM Identity Centerの「ユーザー」の画面から、新しくメールを送信することも可能です。
パスワードを設定後リダイレクトされ……
サインインの画面が表示されます。試しにログインしてみましょう。まずはユーザー名から記入です。
次に設定したパスワードを入力。
その後、初めてログインした人はMFAの設定画面が表示されます。自分は認証アプリの登録をしました。
MFAのワンタイムパスワード入力も終わりますと、ログイン画面へ移動できます。お疲れ様でした。これにてIAM Identity Center側のユーザー設定は終わりです。
IAM Identity Centerでの残作業は、SSOログインのためのアプリケーション設定のみです。
アプリケーションを設定
再びマネージメントコンソールの画面に戻りまして、左メニューの「アプリケーション」で画面表示切り替え後、カスタマー管理タブをクリックして以下のような画面を表示してください。
「アプリケーションを追加」をクリック後に現れる以下画面にて、「カタログからアプリケーションを選択する」をクリックし、Snowflakeと検索して選択します。
次に、アプリケーションの設定です。アプリ名などはそのままにしていますが、ここはお好みで変更してください。
同ページをスクロールすると現れる「IAM Identity Centerメタデータ」から、 「IAM Identity CenterサインインURL」をコピー。その後「IAM Identity Center証明書」からpemキーをダウンロード しておいてください。Snowflakeにて使用する情報となります。
さらにページをスクロールして、「アプリケーションACS URL」と「アプリケーションSAML対象者」を入力します。
入力するURLはSnowflakeのサーバーURLです。サーバーURLは以下ブログを参考に、Snowsightから取得がやりやすいです。
設定が終わりましたら、「送信」ボタンをクリックします。
作成が無事に完了すると、以下のようなポップアップが表示されます。
次に、作成したアプリケーションをグループ割り当てをして使用できるようにいたします。ここはユーザーに直接でも良いですが、運用をする上ではグループに割り当てした方が今後楽になるかと思います。
まずはページをスクロールして、以下画面を表示してください。「ユーザーとグループを割り当て」をクリックします。
ポップアップされた画面にて、グループ名を検索してください。ユーザーとグループの両方が引っかかることに注意です。検索後、グループ名をクリックして「完了」ボタンをクリックします。
設定が終わりますと、グループ名が表示されます。
次で最後です!同じページ内で以下画像を参考に「属性マッピングを編集」をクリックしてください。
属性マッピングというのは、SAMLでやり取りする際の情報を定義しているところになります。今回はユーザー名でやり取りするため、編集が必要となります。
最初は以下のような画面かと思います。
以下画像のように書き換えてください。
Snowflake側の設定
以下のSQLを実行してセキュリティ統合(ログインの種類を設定するもの)を作ります。
USE ROLE <セキュリティ統合が作れるロール>;
CREATE OR REPLACE SECURITY INTEGRATION AWS_SSO_INTEGRATION
TYPE = SAML2
ENABLED = TRUE
SAML2_ISSUER = '<IAM Identity CenterでコピーしておいたログインURL>'
SAML2_SSO_URL = '<IAM Identity CenterでコピーしておいたログインURL>'
SAML2_PROVIDER = 'CUSTOM'
SAML2_X509_CERT = '<IAM Identity Centerで取得したpemキーを改行なしで入力(1行目と最終行をとりぞのく)>'
-- OPTIONS
SAML2_ENABLE_SP_INITIATED = TRUE
SAML2_FORCE_AUTHN = TRUE
SAML2_REQUESTED_NAMEID_FORMAT = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
SAML2_SNOWFLAKE_ACS_URL = "<SnowflakeのサーバーURLの末尾に/fed/loginを追加したもの>"
SAML2_SNOWFLAKE_ISSUER_URL = "<SnowflakeのサーバーURL>"
SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'AWS IAM Identity Center SSO'
;
USE ROLE <ユーザー作成できるロール>;
CREATE USER TEST_USER
TYPE=PERSON
;
IAM Identity Centerでの設定時に記載した通り、作成するユーザー名に注意です。
今回は新規でSnowflakeユーザーを作っておりますが、 すでにSwnoflake上で存在するユーザー名であればIAM Identity Centerでユーザー名を大文字小文字を区別して作るだけで良い です。
ログインを試す
Snowflakeのログイン画面を表示してください。以下画像のようにボタンが増えているかと思いますので、そちらをクリックしてください。Authentication Policyを設定している場合はユーザー名を入力後にボタンを選択できる画面が表示されます。
ログインができることを確認できました。
今回はSnowflake側の画面からログインしましたが、IAM Identity Center経由でもログインが可能です。ユーザー承認用メールに記載されている「Your AWS access portal URL」記載のURLから、IAM Identity Centerへログインし、本ブログ途中であったようにIAM Identity Centerのユーザーとしてログインしていきます。(URLはIAM Identity Centerの左メニュー「ダッシュボード」からも確認可能です。)
ログイン完了後、アプリケーションで「Snowflake」を選択すれば、ログイン認証はそれで終わりましてSnowsightの画面へ遷移します。
また、今回は一連の流れを時間を置かずに実行していっているので認識しづらいですが、IAM Identity Centerでログインしてセッションを繋いでいる状態でないとSnowflakeの上記画像のログイン画面にあるボタンをクリックしてもそのままSnowsightへ画面遷移しません。
ただし、IAM Identity Centerのログイン画面が現れるだけですので、そのままIAM Identiy Centerのユーザー名やパスワード、MFAを入力してログインすれば良いです。
お疲れ様でした。これにて、SSOログインのためのAWSとSnowflakeの設定は完了です。
後片付け
Snowflake側は以下のSQLを実行してください。
--削除処理
DROP SECURITY INTEGRATION AWS_SSO_INTEGRATION;
DROP USER TEST_USER;
IAM Identity Center側は特に料金が課金されていくものでもないですが、気になる場合はマネージメントコンソール上の左メニュー「ユーザー」から該当ユーザーを削除することも可能です。
終わりに
お疲れ様でした。一通りの設定をするための箇所については、スクショを多めに記載して丁寧に記載いたしました。少しでもお役に立てたでしょうか。
今回の実装について、去年の段階で構想しており実際に先日試すこともできていたのですが、4月を過ぎてからのブログ化となってしまいました。
これから対応を考えようとしていらっしゃる方や、料金を考えて安い選択肢もあるのだよということを少しでも伝えることができればと考えてブログ化してみました。
よければご参考にしてくださいませ。
ちなみに、今回はIAM Identity Centerのユーザーを作って認証させていますが、EntraID(旧称Active Directory)などでユーザー管理している方も、IAM Identity Centerでそちらの情報を使ってユーザー認証させることが可能です。
今回はここまで。
それでは、また!