Azure AD*を2で、マルチIdPでALBでユーザ認証してみる

#参考記事

https://qiita.com/sirotosiko/items/3c1da3c8f86373b91023

# 目的

VPNに依存しないセキュアな構成を求められる案件が増えていますが、ALBで強力な認証を持っている、AzureAD(O365の認証基盤)、Googel(google workspaceの認証基盤)を用いることにより簡易にセキュアなアプリケーションアクセスが提供できると考えています。
しかしながら、実案件ですと、子会社は別のo365テナントといった話があり、1つの認証プロバイダーで済まない案件も存在します。

ということで、本記事では、複数認証プロバイダー（AzureAD*2）＋albで認証する構成を組んでみます。

# 概要

ALBのリスナーのルール設定で、クエリに応じたOIDCを設定するといった内容になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/3df28086-4a9c-cae2-60b5-fc710307bd99.png)

# 手順

* 1つめのOIDC設定
    * Azure AD1にアプリケーションを登録する
    * ALBに設定する
    * 動作確認
* 2つめのOIDC設定
    * Azure AD2にアプリケーションを登録する
    * ALBにルールを設定する
    * ALBに設定する
    * 動作確認

の流れを説明します。
（アプリケーションの配置、ALBの設定は省略します）

# 1つめのOIDC設定
### Azure AD1にアプリケーションを登録する


Azureにログインして、Azure Active Directory -> アプリの登録からアプリケーションを登録します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/dee9c773-f856-b535-e546-c485b8787341.png)

Redirect URIは以下を指定します。
　https://Route53に登録したALBのエイリアスレコード/oauth2/idpresponse
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/557b021d-325b-e3fc-9116-03bbb220ab99.png)

次に、概要、および、エンドポイントを開き、ALBに登録するための情報を表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/6f204d28-4105-fc74-4395-a81980e5ca02.png)

また、証明書とシークレットより、シークレットを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/6f0781bb-5506-f7ba-a919-4585d02780e5.png)

### ALBに設定する

次にALBに前述の情報を登録していきます。

ALBのリスナー、ルールを開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/adb10a18-db38-69a1-4445-b0b4c3525dd1.png)

認証の追加を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/b93367c2-99d9-f63f-8b85-f34ddb03e44e.png)

次に、認証方法で、OIDCを開くと下記画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/5c9d041f-ba2f-6c1b-7f0b-4e1d3d879b11.png)

で、前述のazureADの情報でこれを埋めていかなければならないのですが、
置換が必要な値あり、各ページに値が散っている、固定値ありと表で理解しようとすると煩雑です。

|ALBの設定値 |	対応するAzure側の値|
|:-----------|------------:|:------------:|
|認証 「OIDC」選択|	NA|
|発行者|	エンドポイント:「OAuth 2.0 承認エンドポイント (v2)」の"/oauth2/v2.0/authorize"の部分を"/v2.0"で置換したURL|
|認証エンドポイント |	エンドポイント:OAuth 2.0 承認エンドポイント (v2)|
|Tトークンエンドポイント|	エンドポイント:OAuth 2.0 トークン エンドポイント (v2)|
|User info endpoint |	https://graph.microsoft.com/oidc/userinfo|
|クライアント ID |	概要:アプリケーション (クライアント) |
|クライアントのシークレット|	証明書とシークレット:作成したシークレット|


ということで、マッピング図を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/3613603c-2c03-c87a-6958-fb1da576e0ae.png)

では、入力でき、saveしたらテストをしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/ad58e4b6-3653-833e-967d-32b2bc40ae9d.png)

### 動作確認

URLにアクセスすると、このようなダイアログが表示され、ALB＋azureADで認証されてることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/0be30730-45e3-43f1-86ba-cf79eea05ebb.png)

（なお、auzreADにログイン済み（o365使用中）のため、上記のダイアログが出ています。azureADにログインしていない場合は、auzreADのログイン画面が表示されます。）

# 2つめのOIDC設定

それでは、２つ目のアプリケーションを登録していきましょう。

###Azure AD2にアプリケーションを登録する

といっても、ここは一つ目と同じなので割愛します。

### ALBにルールを設定する

リスナーでルールの追加を選択し、クエリに「oauth=azuread2」と入っている場合、2つ目のazureADを使うように構成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/c93fa67f-fc82-ef94-d568-33d7aeddd438.png)

（実際のクエリ指定時には、バッティングの恐れがない、もっと複雑なキーが良いと思います）

先程と同じ要領で、設定を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/7412394a-68c2-8acb-d1d4-acedb067b2ef.png)

認証の設定が終わったら、同じ転送先を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/7e465cf7-cb45-a4f2-72df-6aaca953ff53.png)

クエリを付けてURLを呼び出すと、先ほどとは異なるazureADで認証されてることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692046/d65a1ff4-4cac-8960-ec40-c8681f7c4c14.png)