こんにちは。クルーズ株式会社CTOの鈴木です。
今回は脱レガシーシステムの話から少しそれるのですが、ActiveDirectory のログインユーザ情報を使ってAWS Mamagement Console にSingle Sign Onできるようにした話をしようと思います。
経緯
以前よりAWS Management Console のアカウントをどのように管理すべきかについては悩みの種で、従業員やパートナー企業ごとにIAMアカウントを発行する方法だと、退職時や業務委託期間終了時にアカウントを無効化する運用を行わないとならず、だからといって共通のIAMアカウントを複数名で使うにしても退職時や業務委託期間終了時にIAMアカウントのパスワードを変更する運用を行うにしても今度はパスワード変更を定期的に行わないとならず、すでに退職時にアカウントの停止を行う運用のあるActive Directoryとうまく連携して行う方法はないものかと考えて、EC2上すでに存在していたActive Directoryサーバ(ADDS構築済み)にADFSを構築し、 AWS Mansgement Consoleと連携させる方法を検証していましたが、設定が複雑なこと、ADDS とADFSを同一インスタンスで動作させるとそれなりのサーバリソースが必要となり、インスタンスサイズを上げてないと運用が難しい状況になったため、もっと簡単に実現する方法を調べていたところAWS SSOがあったので今回はAWS SSOにて認証を実現してみました。
ADFSを利用した構成についてはこちらの記事が参考になります。
システム構成
前提として当社のActiveDirectory の構成を説明すると、AWS上のEC2インスタンスとして1台、残り2台が在籍する従業員数が比較的多いオフィスビル内に分散されて配置されていて、各オフィスビルとAWS間で拠点間VPNが構築されています。
当時AWS SSOは最寄りはシンガポールリージョンしか存在しなかったため、まずはシンガポールリージョンのVPCと、EC2上のActiveDirectoryのある東京リージョン間をVPC Peeringで接続し、シンガポールリージョンにAD Connectorを配置します。
AWS SSOのIDソースにAD Connectorを指定し、AWS Management ConsoleへのログインをAWS SSOのユーザポータルURLから行うことで、AWS SSOがADに問合せにいってユーザとユーザが所属するADグループとAWS アカウントとAWSアカウントの表示権限の紐づけを行い、そのユーザの持つ権限で制限された状態でAWS Management Console にログインするというのが一連の仕組みです。
すごくざっくりとですが図で書くとこんな構成です。
追記:現在だとAWS SSOは東京リージョンでもサービスインしているためAD ConnectorおよびAWS SSOはシンガポールリージョンに作る必要はないです。
Active Directory 上での設定
実際にAWS SSOでのアカウントの紐づけはADアカウントもしくはADグループのどちらでも可能なので、権限ロール単位でAD グループを作成し、そこにADアカウントを紐づけておいた方が運用が容易です。
AWS SSOのディレクトリ設定
AD Connector構築後、AWS SSOの初回設定時にディレクトリの管理画面でMicrosoft ADディレクトリを選択してください。選択するとしたのプルダウンに構築したAD Connectorが出てくるので選択して設定を完了させます
AWS SSOのAWSアカウント連携設定
ここでの設定は「アクセス権限セット」と「AWSアカウントとADアカウントまたはADグループとアクセス権限セット関連付け」を行います。
アクセス権限セットはIAMポリシーのようなもので紐づく「ADアカウントまたはADグループ」で操作できる権限が設定できます。
アクセス権限セットは標準でいくつか用意されていますが自分で作成することも可能で、その場合はJSONでポリシーを記述していきます。
その後、AWSアカウントを選択してADアカウントまたはADグループとアクセス権限セットを関連付ければ完了です。
運用コスト的な話
詳細には計算していないのですが従来構成とそこまで大きく変わらないです。ざっくりとした費用内訳で見ると約100USDが月あたり増えています。
・AD Connector 費用 :約60USD/月(新規発生)
・VPC Peering費用 :約30~40USD/月(新規発生)
ただ、一方でEC2上のADサーバのCPU使用率が激減したことでインスタンスサイズを1サイズ落としていて、それの削減効果がだいたい100USDくらいあります。なのでトータルだとそこまで変わらなかったです。
ただ設定がはるかに楽なのですでにADがあってAWS Management Console をADで認証させたい場合はこの方法をお勧めします。