BeeX Tech blog

BeeXではクラウドネイティブアプリ開発、企業の基幹クラウド基盤構築、システム移行、運用保守を行っています。

Microsoft Entra ID(旧Azure AD)とCognitoの多要素認証を使ってEC2にアクセスする手順


【追記】

AzureADはMicrosoft Entra IDに名称が変わっていますので、以下読み替えてご参照ください。

ハイブリッドクラウドコンサルティング部の榊原です。今回はAzure ADとCognitoを用いた多要素認証を設定する手順についてお話しします。

前提

・AWSとAzure ADが使える環境
・MFA用アプリを端末にインストール済(今回はAuthenticator)
・独自ドメインを取得済み(今回はお名前ドットコム)
・HTTPSリスナーを設定したALBと、Webサーバとして機能するEC2を作成済
・独自ドメインでALBにアクセスできる状態


※【2023/12/15追記】前提として省略していた部分、(証明書の取得手順とALBへのHTTPSアクセス手順)を記事化しました。よろしければご参照ください。

www.beex-inc.com
www.beex-inc.com


構成図

今回の記事で解説する構成を記載します。
青点線部分は作成済みとします。そちらも含めて作りたい方は上のURLをご参照ください。茶色点線部分が本記事のメインです。ALBはリスナールール作成のみ解説します。

証明書取得まで(別記事)

証明書を紐づけてALBにHTTPS接続するところまで(別記事)

➂AzureADとCognitoで認証を付けるところまで(本記事)

手順

➀【Azure AD】アプリ作成

エンタープライズアプリケーションから「新しいアプリケーション」を選択します。


「独自のアプリケーションの作成」を押し任意のアプリケーション名を入力後、「作成」を押します。


画面が遷移するので、「2.シングルサインオン」の作業の開始を押します。


SAMLを選択します。


「➂SAML証明書」にある「アプリのフェデレーション メタデータ URL」をメモします。

➁【Azure AD】アプリにユーザーを割り当て

この後認証させたいユーザーを作成したアプリに割り当てておきましょう。

サイドバーから「ユーザーとグループ」を選択し、「ユーザーまたはグループの追加」を選択します。


ユーザを追加したら「選択」を押し、「割り当て」を押します。


下記のようにユーザーが追加されていればOKです。

➂【AWS】Cognitoの設定

Amazon Cognitoのコンソールへ行き、「ユーザープールを作成」を押します。


ステップ1は下のように設定します。


ステップ2は以下のように設定します。


ステップ3は以下のように設定します。


ステップ4は以下のように設定します。

Eメールプロバイダー部分ですが、Cognitoは一日の最大送信数が50と限られていますので、要件に応じてSESを用いるのがよいです。


ステップ5は以下のように設定します。

メタデータドキュメントのエンドポイントURLには、先ほどメモしておいたURLを記載してください。ここでうまく入力できていないとユーザープールがうまく作成されません。CloudTrailで「"Error retrieving metadata from https://XXX"」とエラーが表示されます。また、ユーザープール属性emailに対するSAML属性部分には「http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress」と記載します。(参考URL


ステップ6は以下のように設定します。

Cognitoドメイン部分は使用可能と表示されれば任意の値でOKです。

引き続きステップ6です。アプリケーションクライアント名とコールバックURLは任意の値で良いですが、コールバックURLは「ALBのDNS名/oauth2/idresponse」と入力しますクライアントのシークレットは生成するにチェックを入れなければ、ALBの443リスナーにルールを追加できないのでご注意ください。


ステップ7で内容を確認したら「ユーザープールを作成」を選択します。

成功したら作成したユーザープールを選択して、ユーザープール名とCognitoドメインをメモしましょう。Azure AD側でどちらも使用します。




➃【Azure AD】SAML情報の入力

直前でメモしたユーザープール名とCognitoドメインをしかるべき場所に記載しましょう。

➀で開いていた画面の「1.基本的なSAML構成」の「編集」を選択します。


識別子(エンティティID)には「urn:amazon:cognito:sp:ユーザープールID」、

応答URLには「Cognitoドメイン/saml2/idpresponse」と入力します。

入力が終わったら「保存」を押します。

以上でAzure AD側の設定は完了です!


⑤【AWS】リスナールールにCognitoを追加

最後にドメイン名で接続した際に、Azure AD認証が行われるように設定しましょう。

ALBのリスナールールを追加します。


ステップ1は自由に名前を設定します。


ステップ2は以下のように設定します。


ステップ3は以下のように設定します。


ステップ4は以下のように設定します。優先度は他のルールより小さい値であれば任意の値でOKです。


ステップ5で設定内容を確認したら「作成」を選択します。これで全ての設定が完了です

➅接続確認

それでは実際に認証されるか、そして認証後にきちんとコンテンツが表示されるかを確認しましょう。今回自分はお名前ドットコムでドメイン管理を行っており、以下のDNSレコードをお名前ドットコムに登録しています。左端の欄はブラウザ接続時に使います。alb部分は任意の値でOKです。画像はお名前ドットコムの画面です。


ブラウザでURLを入力してALBに接続します。


画面が切り替わりますのでMFAアプリで認証します。


画面が切り替わり、Webサーバのコンテンツが表示されれば完了です!

最後に

今回はCognitoとAzure ADを使った認証を導入し、EC2にアクセスする手順について解説しました。機能自体は小さなものですが、パラメータ一つ一つの意味を理解して実装するのに結構苦労しました。応用ができるようになるためにも、この部分は引き続き勉強します。また、時間があれば前提条件で省略してしまった部分についても知識整理がてら記事化していきたいです。以上です。ここまでお読みいただきありがとうございました。