2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
AWS Single Sign-Onを用いた、セキュアでより良いログイン体験への取り組み(全1記事)
リンクをコピー
記事をブックマーク
光野達朗氏(以下、光野):これから「AWS Single Sign-Onを用いた、セキュアでよりよいログイン体験への取り組み」について紹介したいと思いますので、よろしくお願いいたします。
まず、自己紹介をさせてください。ZOZOテクノロジーズSRE部でテックリードを務めている光野達朗です。もともとサーバサイドのエンジニアとしてキャリアを始めていましたが、途中でAWSの魅力に取り憑かれて転職しました。現在はSREで、AWSを専門とするエンジニアとして、日々アーキテクチャの選定・構築などを行っています。
まず、弊社が扱うプロダクトの紹介を簡単にさせてください。もしかすると利用していただいている方もいるかと思いますが、「ZOZOTOWN」という日本でも最大級のファッション通販サイトを扱っています。
また、EC以外にも「WEAR」というファッションコーディネートアプリの提供も行っています。ファッションが好きな方おられましたら、ぜひ利用してもらえればうれしいです。
本発表で扱う範囲ですが、先ほどご紹介した個々のプロダクトではなくて、組織全体のAWS運用に関するお話をしたいと思います。
本発表を通してお伝えしたいことは「Single Sign-Onはいいぞ」。この一言です。AWSをマルチアカウントで用いる場合には必ず設定したほうがいいと思っています。また、もしお使いのAWSアカウントが1つだけだったとしても、設定する価値はあるでしょう。
まず前提として、弊社ZOZOテクノロジーズのAWSアカウント体系について紹介させてください。
弊社のAWSは、AWS Organizationsを用いて、複数のアカウントを1つの組織(Organization)で管理。マスターアカウントと呼ばれる請求を管理したり統制系の機能を管理したりするところを親としまして、メンバーアカウントを作っています。
このメンバーアカウントを、各プロダクト、先ほどの「ZOZOTOWN」や「WEAR」のプロダクトチームが複数所有して、主体的に運用。本番環境用や事前環境用など、少なくとも2つ以上を運用している状況です。
マルチアカウント体系のメリット・デメリットは複数あります。メリットとしてはセキュリティの分離や課金の管理や影響範囲の縮小など。さまざまなメリットもある一方で、当然1つだけ見ればいいわけではなく、運用のオーバーヘッドが多数発生いたします。本日お話しする内容もこの運用のオーバーヘッドに関する部分です。
本日取り上げる運用のオーバーヘッド、なによりもまずログインが手間で、MFAを必須にするとさらに大変になります。
ログインの模式図なのですが、各アカウントにIAMユーザーやIAMロールを作成が必要になります。今度はログインのたびにワンタイムのパスのトークンをMFAで入力する。本番アカウントに入ってみたり事前環境用のアカウントに入ってみたりと切り替えるたびにMFAのトークンを入力することが必要です。ともかく面倒くさい作業になります。
この手間が必要かどうか考えますと、まず仕組みとしては必要です。
アカウントの分離もMFAも大事なサービスを守るためには非常に必要ですが、手間はかけなくてよい作業だと思います。一番身近にあるとすれば、入退社に伴うIAMユーザーの作成や削除でしょうか。こういった手間がかかることはついつい後回しにされがちで、結果的に安全でなくなる可能性があります。
必要なことは簡単にしたいと考え、さまざまな取り組みを検討をいたしました。「何かすてきな仕組みを使って複数のアカウントを簡単に切り替えられはしないかな」「IAMリソースの作成もなんとか減らしたいな」と感じて、いろいろ取り組みを行いました。
それがSingle Sign-Onです。以下、「SSO」と略してお話しいたします。
SSOは、一度のユーザー認証処理で複数のサービスのユーザー認証を済ませる仕組です。おそらく利用されている方も多数いると思います。「どこかに一度ログインしたらAWSアカウントのログインもそれで済ませる」ことがしたいと考えました。
また、SSOと言っても実現方法はさまざまです。満たしたい要素として、まず「組織のID体系と紐付けたい」。弊社ZOZOテクノロジーズの場合は、Azure ADによるActive Directory管理を行っています。
次に「AWSアカウントごとに設定したくない」と思いました。現在は60アカウント程度のAWSアカウントが存在して、どんどん増えています。
最後に、当然のことかもしれませんが、「ユーザーやアカウント、権限の紐付けを柔軟にしたい」と考えました。ここで言うユーザーは利用者一人ひとり、アカウントはAWSアカウントのことです。
これを満たすためにいろいろ試しました。詳しく話すと、ここだけで発表時間を使い切ってしまいそうなので、結論を図にまとめています。
右下、Azure ADにユーザー情報が格納されており、それを……AWSが公式で提供するSingle Sign-Onと呼ばれるサービスがあります。AWS Single Sign-Onにプロビジョニングをし、マスターアカウントからメンバーアカウントに対して権限やユーザーの配布を行うかたちです。メンバーアカウント側はログイン用のIAMリソースを作成する必要がありません。
まずは百聞は一見にしかずということで、デモ動画をご覧ください。
まずMicrosoftのAzure ADのログイン画面が出てきます。モザイク多めでお送りしますが、IDとパスワード、MFAのトークンも入力をして認証が完了。Azure ADが提供する各種SSO連携アプリケーション一覧が出てきまして、AWS SSOを押しますと、AWSへのログインが行われます。
これでAWSにログインが完了しました。ここで好きなアカウントの権限を選択すると、AWSの各アカウントへ遷移できます。各アカウントへはIDもパスワードもMFAの認証もしていません。Azureですべて済ませていて、別なアカウントを選ぶと、そのアカウントに遷移いたします。
これで、ログインいたしました。最初に入ったところからは自動的にログアウトされています。このように一度だけログインを済ませることで、すべてのAWSアカウントに個別のID・パスワード・MFAがなくともログインできることが実現しました。
次に初期設定などについて、簡単な紹介します。
まず、初期設定、AWS SSOのIDのソースを検討ください。SSO自体に管理させることや、Microsoft Active Directoryを使うこと、弊社のようにAzure ADを使うこともできます。調べたところ、つい先月Oktaとも連携が開始されたようです。
IDのソースさえ決まるとあとは非常にシンプルで、Organizationsの機能からSSO統合というボタンを有効にすると、SSOのリソースを作成いたします。
あとは対向となるAzure ADに「エンタープライズアプリケーション」を作成し接続をするだけです。ここで言うアプリケーションは設定であり、プログラムを書くわけではありません。
日々の運用はもっとシンプルです。Azure AD側の「エンタープライズアプリケーション」からユーザーを追加します。AWSに送りたいユーザーを選択すると、SSO側にユーザーが現れますので、アカウントと権限を紐づける。これで完了です。
AWSアカウントごとのIAMユーザーやIAMポリシーの作成は不要で、SSOが解決してくれます。このSSOの提供アカウント、組織の親アカウントのみ管理すればユーザー管理が可能な世界ができあがりました。
AWS Single Sign-Onのいいところ・イマイチなところを簡単にまとめました。
まず、AWSアカウントの増減を気にする必要がありません。Organizationsで管理されるAWSアカウントすべてが自動的に対象となります。
また、Azure ADにてユーザーが削除されると、AWS SSO側でも無効化されます。例を挙げると、退職時にアカウントをのぞいてIAMユーザーを1個ずつ消して回る作業は必要ありません。
それと、さすが公式のサービスということで、CLIとの統合が用意されています。コマンドラインで「aws sso login」と打つと、SSOベースのアクセストークンが取得できます。
イマイチなところとしては、現在(2020年7月22日時点)公開されているAPIが少ないことです。更新系のAPIは提供されていないので、Webコンソールから操作する必要があります。
また、SSOで定義する権限がまだIAMと統合されていません。書き方は一緒ですが、SSOで定義した権限とIAMで定義した権限が2つ存在してしまいます。これらの統合やAPIの提供が待ち遠しいです。
また、弊社としてログインの課題は解決しましたが、権限の周りを解決する問題が残っています。
まず最小限かつ十分な権限設計。現在はSSOにするタイミングで、大まかな権限設計に切り替えました。管理者・書き込み化・読み込み専用などです。これは、既存の権限がバラバラで、何かができなくなることを避けるために大まかな権限にいったん切り替えました。いずれは最小限の権限にあらためて戻したいと思っています。
このSingle Sign-Onですが、まだ100パーセント切り替えが終わったわけではありません。まだまだSSOの啓蒙が組織に必要だと思っています。
また、SSOベースになって不要になったIAMユーザーもたくさん存在するので、これの洗い出しと削除も今後行いたいです。これについては、AWS ConfigやCloudTrailといった監査系のシステムを組み合わせて実現できないかどうか取り組んでいます。
まとめると、弊社はAWSのマルチアカウント運用で頻繁なログインが課題でした。これに対して、SSOによってAWSアカウントでのログイン体験を改善。弊社ではAzure ADをIDソースにしましたが、SSO単品でもシンプルに扱えます。
IAMユーザーを使う場面が減るため、管理上のメリットが非常に大きいです。人間用のユーザーを削除して回る手間がなくなりました。1アカウントでも設定は可能なので、もし今後アカウントが増える可能性があればぜひ検討してみてください。
結論は頭にAWSがついていますが、「Single Sign-Onはいいぞ」。この一言に集約されます。
最後にこういった仕組みを作る人間を絶賛募集中です。AWSを使ってWebサービスを作りたい人はもちろん、仕組みづくりにも興味がある方もぜひご応募いただければと思います。
以上です。ありがとうございました。
坂井華子氏(以下、坂井):光野さん、ありがとうございました。それではさっそくですけれども、sli.doでいただいた質問を見ていきましょう。お時間の都合で、すべてお答えできないことをあらかじめご了承ください。
まず1つ目。「AWSアカウント以外のアプリケーションもAWS SSOに統合していますでしょうか? もしされていたら、統合にあたり考慮したポイントがあれば教えていただけますでしょうか?」とのことですが、いかがですか?
光野:質問ありがとうございます。現在、AWSとほかのアプリケーションは統合しておりません。あくまで弊社のメインIDはAzure ADで管理していて、そこから接続をする方針で設定をしています。以上です。
坂井:ありがとうございます。次に「OneLoginやOktaもよく使われると思うのですが、それらを使わなかった理由があれば教えていただけますでしょうか?」。
光野:質問ありがとうございます。確かに非常によく使われているSingle Sign-Onのアカウントサービスです。導入時に検討はしましたが、すでにAzure ADのID基盤があります。それとSSO AWSをつなげる際にわざわざOneLoginやOktaを間に入れるメリットがあまり大きくないかなと思い、Azure ADと直接AWSをつなげました。
もしAzure ADなどのID基盤を持っていない場合は、OneLoginやOktaとつなげるのが非常にシンプルでよいアプローチかと考えています。以上です。
坂井:ありがとうございます。次に「AWS SSO以外で検討した手段はありますか?」とのことです。
光野:AWS SSO以外にもいくつか検討しました。例えばSOSではなくてIAMのIDプロバイダーの機能があります。それを使ってもAzure ADとつなげてのSingle Sign-Onは可能です。
また、使われている方も実際いるかと思いますが、クロスアカウントでのAssumeRoleを行うことで、SSOに近しいことができないかも考えたこともあります。
ただ、いずれも「新規のアカウントを作るたびに、アカウント一つひとつに新しいリソースを作って回らないといけない」という点がネックです。最終的には、何もしなくても勝手に権限などが同期されるAWS SSOを採用しました。以上です。
坂井:ありがとうございます。新しい質問もいただいているのでいくつか見てまいりましょう。「IAM権限はどれぐらいの粒度での分割を検討されていますでしょうか?」。
光野:会社全体をまとめた際にどのようなIAM権限が最適かについて、私自身は現状で答えをもっていません。
アカウント自体は、Single Sign-On以前はストレージ専用のアカウントやEC2、コンピューティングリソースだけを触るIAM権限などが用意されていました。しかしAWS全体さまざま結合していくなかで、過不足が生まれました。
「はたしてそれをうまく最大公約数的に満たす権限ってあるのだろうか?」の問いに私自身まだわかっていません。そこを分析して新しいチャレンジとして今後取り組んでいきたいと考えています。以上です。
坂井:ありがとうございます。次が最後の質問です。「この仕組みを使って良かったり何か防げたようなエピソードはありますか?」とのことですが、いかがでしょうか?
光野:良かったこととしては、リアルタイムでアクティブなアカウント……どのAWSアカウントにどんな人間がアクティブに操作しているかについて、CloudTrailのログで一元管理できるようになったこと。親アカウントの管理者の立場としては大きなメリットでした。もちろん一利用者としては「MFAのトークンを毎回入力しなくていい」これは本当に便利なポイントです。
防げたものとしては、チーム異動や会社を辞めて新しい挑戦をされる方のアカウントを削除し損ねることがなくなりました。自動的にログインできない状態になったので、非常に運用コストが減ったのがよかった点です。
坂井:光野さん、ありがとうございました。以上でこのパートは終了といたします。ありがとうございます。
光野:ありがとうございました。
関連タグ:
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには