AWS SSOで多要素認証つきシングルサインオン環境の実現

私が個人で契約しているAWSアカウントにおいて、AWS Single Sign-On(AWS SSO)を用いたシングルサインオン環境を実現しましたので、手順をまとめておきます。

AWS SSOでは複数の多要素認証の方式を併用できますので、MFAデバイスの持参忘れや紛失のリスクにも対応できるようになります。

はじめに

皆さん、AWS Organizationsを用いたマルチアカウント環境を構成していますか?

AWS上で学習や検証を行ったりハンズオントレーニングに参加したりしていると、どうしても不要なリソースが残りがちです。本番環境として利用しているAWSアカウントと同一アカウント内で検証等を行っていると、利用しているかどうか区別が難しくなり、悩ましい状態に成りかねません。

ということで私が個人で契約しているAWSアカウントも、先日より学習・検証用のアカウントを分離しマルチアカウント構成にして運用していますが、AWSアカウントごとのログインURLやIAMユーザーの管理が増え煩雑になるという次の課題が発生してきます。

そうした課題に対応するため、AWSでは複数アカウントAWSコンソールへのログインや、SAML 2.0フェデレーション認証対応の各種サービスを束ねて管理できる、AWS Single Sign-On(AWS SSO)をサービス提供しています。

AWSマネジメントコンソールへのログインに用いる多要素認証(MFA)の方式は1つしか登録できず、MFAデバイスの持参忘れや紛失のリスクにがありますが、AWS SSOを使用した場合は複数の方式を併用できますので安心です。

前提

AWS Organizationsによるマルチアカウント環境が構成済みであることを前提としております。
リージョンに特に制約はありません。私は東京リージョンで設定を行いました。

なお、AWS Organizations および AWS SSO の利用に関して費用は発生しません。
本記事の構成を実現するにあたっての別途費用は掛からないこととなります。

AWS OrganizationsおよびAWS SSOの設定は、管理アカウント (旧名称:マスターアカウント)上で行う必要があります。メンバーアカウント上では操作できません。

構成

今回実現した構成は以下のとおりです。
管理アカウントおよびメンバーアカウントへのログイン、および外部アプリケーションとしてWordPress管理者画面へのログインを実現しました。

AWS SSOでは、Active Directoryなどの外部のアイデンティティソースと連携してユーザー情報を活用することもできますが、今回はAWS SSO内部のアイデンティティソースとしています。

AWS SSOの設定方法

AWS SSOの有効化

AWSマネジメントコンソールからAWS SSOを開き「AWS SSOを有効化」をクリックします。

AWS SSOが有効化されました。
続けてユーザポータルURLのカスタマイズを行います。

ユーザポータルとして利用するURLを指定します。
この設定は後から変更できないのでご注意ください。

続けて多要素認証(MFA)に関する設定を行います。
設定画面の「ネットワークとセキュリティ」タブを開き、設定をクリックします。

私は以下のように設定しました。
多要素認証は常に有効、スマートフォンのMFAアプリケーションとFIDO U2Fデバイスの利用を許可し、またサインイン時にMFAデバイスを持っていない場合はメールにてワンタイムパスワードの送信を行うようにしました。

グループの作成

この後設定する各種設定については、ユーザ単位ではなくグループ単位で割り当てることが推奨されているため、ユーザをまとめるグループを作成します。

適当な名前と説明を入力し、グループを作成します。

アクセス許可セットの作成

各AWSアカウントに対して、どのような権限でログインするかを設定する「アクセス許可セット」を作成します。今回は個人アカウントで特に権限を絞る必要が無いので管理者権限のものを作成します。

アクセス許可セットの作成を選択します。

事前定義された許可セット(AWSマネージドポリシー)の AdministratorAccessを選択します。
なお、独自にカスタム許可セットを作成することもできます。

許可セット名を入力します。
なお、説明やセッションタイムアウト時間をカスタマイズすることも可能です。

確認ウィンドウを経て作成完了です。

AWSアカウントの割当(SSOログイン先)

SSOでログインするAWSアカウントをAWS Organizationsのアカウント内から選択します。

対象のアカウントを選択し「ユーザまたはグループを割り当て」をクリックします。

上記で作成したグループを選択し割り当てます。

続いて、上記で作成したアクセス許可セットを割り当てます。

確認のうえ、割り当てを実施します。
送信ボタンを押すことで、各アカウントへの設定が自動的に行われます。

ユーザーの作成

ここまでで基本的な設定は完了です。
最後にユーザーの作成を行います。

ユーザID、メールアドレス、氏名等の情報を入力します。

続いてグループへの割当を行います。

確認の上ユーザの作成を行います。

ユーザにはInvalidationのメールが届きます。

ユーザの初回ログイン

各ユーザは、届いたメールのInvalidationを承諾することでログインできます。

初回アクセス時にパスワードの設定を行います。

続けて設定したパスワードで再度ログインを行いますが、当然ながら初回ログイン時には多要素認証の設定が行われていませんので、ワンタイムパスワードがメールで送られてきました。

認証通過後、接続先一覧の画面が表示されます。
ここから各AWSアカウントや外部アプリケーションにシングルサインオンでログインすることができます。

多要素認証(MFA)デバイスの設定

前述のとおり、AWS SSOでは複数の多要素認証(MFA)デバイスを登録することができ、認証時に選択することができます。以下の方式が選択可能であり、確かに当方でも動作確認ができました。

  • スマートフォンの認証アプリケーション(Google Authenticator)
  • FIDO U2Fデバイス(YubiKey)
  • PCの生体認証デバイス(Windows Hello / Mac TouchID)

各デバイスの登録は難しくありませんが、登録手順を以下に記載します。

認証スマートフォンアプリ(Google Authenticatorなど)

Register deviceをクリックし、認証アプリを選択します。

Google AuthenticatorなどのMFAアプリケーションをスマートフォンにダウンロードし準備します。

「Show QR code」をクリック、表示されたQRコードをアプリで読み込みます。
MFAアプリケーションに登録されますので、表示された数字を認証コードに入力し完了です。

FIDO U2Fデバイス(YubiKeyなど)

YubiKeyはFIDO U2F(Universal 2nd Factor/ 汎用的な第2要素)規格に対応したMFAデバイスで、ID・パスワード認証を補完し、多要素認証を行うことができるデバイスです。ハードウェアデバイスを認証キーとして用いるため、よりセキュアな認証を簡便に行うことができることが特徴となっています。

多要素認証における「所持情報」にあたるものとなり、USBスロットに差し込んでタッチしたり、NFCでタッチすることで多要素認証に利用することができます。

登録する際は、2番目のセキュリティキーを選択します。

YubiKeyと接続するにあたり承認のダイアログが出ます。

YubiKeyを登録します。
金属部分(yの文字部分)が点滅していますので、タッチします。

YubiKeyが登録できました。
以後はIDパスワード後に上のダイアログが出ますので、タッチするだけで認証できます。

組み込み認証アプリ(Windows Helloなど)

AWS SSOでは、PC上の生体認証デバイス(指紋・顔認証)も、多要素認証として利用できます。
Windows Hello、および MacOSのTouchIDでの動作を確認しました。

登録は、3番目の「組み込みの認証アプリ」を指定します。

私のPC(指紋認証デバイス付き)では、指紋リーダーで指をスキャンするように指示がありました。

指紋認証を通すだけで登録完了で、すごく簡単ですね。

外部アプリケーションの連携設定

AWS SSOでは多数の外部アプリケーションとのシングルサインオンに対応しているほか、SAML 2.0に対応しているアプリケーションであれば個別に連携することが可能です。

私の環境ではひとまずWordPress(当サイトの管理画面)の連携を行いました。
以下、Qiita記事のとおりで動作しましたので、詳細は割愛したいと思います。

WordPress と AWSSSO を「OneLogin」で連携する - Qiita
前提条件 EC2 に WordPress をインストール済み WordPress にプラグイン OneLogin 追加済み AWSSSO でユーザー作成済み 手順 AWS SSO の設定 AWSSSO のコンソール...

まとめ

AWS SSOを用いて複数アカウントのログイン、および外部アプリケーションのログインをシングルサインオンで実現できました。

冒頭にも書きましたが、複数MFA方式を併用できるのが良いですね。
従来はルートユーザーと管理者権限を持つIAMユーザーで別のMFA方式として紛失等のリスクに備えておりましたが、これであれば安心です。

MFA方式を多数登録すれば、その分リスクは増えることは十分留意ください。

AWS Organizationでマルチアカウント構成を組んでいない方も、これを機にチャレンジしてみてはいかがでしょうか。
用途ごとにAWSアカウントを分離できるのでお勧めです!

コメント