Oracle Cloud Infrastructure Console と Azure AD を SAML 連携しシングル サインオンを構成するために必要な一連の手順

#はじめに
これから試す内容は下記 Microsoft の公開情報に書いてある内容を基に、実際に動作検証をした内容になります。

-参考情報
チュートリアル:Oracle Cloud Infrastructure Console と Azure Active Directory を統合する
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/oracle-cloud-tutorial

Oracle Cloud は Oracle 社が提供しているクラウド サービスになります。
その中で Oracle Cloud Infrastructure Console は Oracle Cloud を管理するための管理ポータルサイトで Azure で言うところの Azure ポータル (https://portal.azure.com) と同じ位置づけになります。

つまり、Oracle Cloud Infrastructure Console に Azure AD 上のユーザーでシングル サインオンできるようになることで、Oracle Cloud Infrastructure のポータルを利用するために Oracle Cloud 側でもサインインする必要がなくなります。

また、今回の記事では触れませんが、 Oracle Cloud Infrastructure Console に Azure AD からユーザーをプロビジョニングすることで、Oracle Cloud Infrastructure Console 側でユーザーを用意する必要がなくなります。Azure AD 上のユーザーが自動的に同期されるようになるからです。

今回は Oracle Cloud Infrastructure Console と SAML 連携してシングル サインオンできる環境を構成する手順を紹介します。
プロビジョニングについては下記 Microsoft の公開情報を基に別途時間を作って検証してみる予定です。

-参考情報
チュートリアル:自動ユーザー プロビジョニングに対応するように Oracle Cloud Infrastructure Console を構成する
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/oracle-cloud-infratstructure-console-provisioning-tutorial

#やってみる
まず、Oracle Cloud も Azure と同様に無料で使える評価版が用意されています。
こちらの URL にアクセスいただき、下記画面ショットにある「今すぐ始める (無償) 」をクリックします。

Oracle Cloud Free Tier
URL:https://www.oracle.com/jp/cloud/free/?source=:ow:o:s:po:0917CloudSEEDIF

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/7d306cf7-2459-dde6-fd3a-dd17d5f1e49f.png)

Oracle Cloud Free Tier は下記画面ショットのように 30 日間無料で試せる機能と、30日間経過後も常時無料で試せる機能がセットになっています。
今回は画面ショット右にある 30 日間試せる機能の中の「管理とセキュリティ」具体的には「アイデンティ」の機能を使って検証を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4be19d5d-9365-949e-c082-0e9f6c0bc757.png)

Oracle Cloud Free Tier のサインアップ手順は割愛します。
必要な情報を適宜入力し、サインアップが完了した ***直後から*** Oracle Cloud が使えるようになります。

##### Oracle Cloud Infrastructure Console との SAML 連携手順

まず、Azure AD 側に Oracle Cloud のメタデータをアップロードするために Oracle Cloud Infrastructure Console にアクセスします。
左ペインより「アイデンティティ」→「フェデレーション」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ae65afcf-4af3-b6ca-c0bd-3ac3f1e93df2.png)

フェデレーション画面にて赤枠で囲っている「このドキュメントをダウンロード」のリンクをクリックし、XML ファイルとして任意のフォルダにファイルを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c9350dc5-3a6f-9c85-f4fb-fa2b7fb97f13.png)

次に Azure ポータル (https://portal.azure.com)  にグローバル管理者でアクセスし、サービス一覧から「Azure Active Directory」を選択します。
概要画面の左ペインから「エンタープライズ アプリケーション」をクリックし、すべてのアプリケーション画面にて画面上部の「＋新しいアプリケーション」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/cc2d70a7-f956-6139-61ba-63ca7cbbe04f.png)

アプリケーションの追加画面で検索ボックスにて下記画面ショットのように「Oracle Cloud Infrastructure Console」と入力し、表示されるアプリケーションをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f8e84865-f4d0-6222-343d-d8c406442228.png)

画面右に画面がポップアップ表示されるので、画面下の「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c37eb814-5bfc-131e-c776-65af4b402141.png)

概要画面にて左ペインの「シングル サインオン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2411656b-e88d-6712-18d2-78db7d3296a1.png)

シングル サインオン方式として「SAML」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8ecf7496-7641-66d0-7485-b25ca1c0bf06.png)

SAML ベースのサインオン画面にて画面上の「メタデータ ファイルをアップロードする」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c7dc4122-5f90-1a3b-6b05-c2b60da59549.png)

上述の手順で「Oracle Cloud Infrastructure Console」からダウンロードしたメタデータをアップロードし、「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f2782550-6c50-4295-af25-6f635c4cb93f.png)

下記画面ショットのように「識別子」と「応答 URL」が自動で入力されますが、サインオン URL が自動でセットされない場合は手動で入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0dc5f7c9-1d44-646d-a6b3-d83d31d4dd4e.png)

当然サインオン URL はご利用の環境により異なります。

Azure ポータル上にはパターンとして「 https://Console.REGIONNAME.oraclecloud.com」 として記載されています。
「Oracle Cloud Infrastructure Console」にまさにアクセスしている URL を見ればどのリージョンにアクセスしているか分かります。
下記画面ショットの例は Japan East (Tokyo) リージョンがホーム リージョンであることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0064ae1b-be66-5346-a599-adbdd6f623b9.png)

「Oracle Cloud Infrastructure Console」側の URL を確認後、下記画面ショットのようにサインオン URL を入力し、画面上部の「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6b7c4d58-a407-dae8-f649-5d680f9580e0.png)

Azure ポータルの画面を下にスクロールさせ、SAML 署名証明書欄の「フェデレーション メタデータ XML」の「ダウンロード」をクリックします。
ダウンロードされた XML ファイルは後述する手順で「Oracle Cloud Infrastructure Console」にアップロードするので任意のフォルダに保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/406252ac-c217-06f7-8dd2-2bb40cb53214.png)

次に Oracle Cloud 側に送る SAML Response に含める属性情報をカスタマイズするために、カスタム属性マッピングを追加します。
ユーザー属性とクレーム欄にある画面右のペンマークをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/bd6880d9-67ab-2e2e-c584-e13bd0f38b7e.png)

ユーザー属性とクレーム画面で「一意のユーザー識別子 (名前 ID) をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/03192588-a6e4-da13-f102-451f1db4d788.png)

「名前識別子の形式の選択」を既定の「電子メール アドレス」から「永続的」に変更し、画面上部の「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e87b2790-e043-4287-5fd9-8e3ca7e3900d.png)

次にユーザー属性とクレーム画面の上部にある「＋グループ要求を追加する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/af62f589-dc84-c73b-c299-cec7c14376cb.png)

グループ クレームの項目にそれぞれ以下の値を設定、入力し画面下の「保存」をクリックします。

| 項目      |   設定値 |   
|:-----------------|:------------------|
| クレームで返される必要があるグループ     | セキュリティ グループ | 
| ソース属性          |グループ ID| 
| グループ要求の名前をカスタマイズする    | チェックを入れる| 
| 名前 (必須)|groupName| 
| 名前空間 (省略可能)|https://auth.oraclecloud.com/saml/claims | 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c403f2b2-34da-fd33-6d9a-9a91690b41c8.png)

次にテスト接続用にユーザーを割り当てます。左ペインにある「ユーザーとグループ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/18a6d929-baec-98a5-76f0-3e28f69751e3.png)

「＋ユーザーの追加」からシングル サインオンをテストする任意のユーザーを「選択」し、画面下の「割り当て」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9a50086e-502a-fb79-c8f9-60a8ae350feb.png)

次は Oracle Cloud Infrastructure Console 側で設定を行います。
左ペインより「アイデンティティ」→「フェデレーション」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9224816b-79f4-d8cd-0010-d93d37dcb633.png)

フェデレーションの画面にて「アイデンティティ・プロバイダの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d3c580e5-9442-4774-2253-f232e5e5474b.png)

以下情報をそれぞれ入力、選択、アップロードし、画面下の「続行」をクリックします。

| 項目      |   設定値 |   
|:-----------------|:------------------|
| 名前  | 任意の名前 (Azure AD だと分かるように記載) | 
| 説明       |任意の説明を記入| 
| タイプ    | SAML 2.0 準拠のアイデンティティ・プロバイダ | 
| FederationMetadata.xml |Azure AD からダウンロードしたファイルをアップロード| 
| 強制認証| チェックを外す | 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/28e8acb6-55e3-0eba-71c0-041b54b1ac73.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b48d10c3-f2be-979a-8baa-3981ec02783e.png)

グループのマッピングを追加します。
Oracle Cloud 側はデフォルトでは「Administrators」しかありません。
Oracle Cloud 側のグループと紐づけをしたい Azure AD 側のグループのグループ ID (オブジェクト ID) を入力し、「プロバイダの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ecfb4892-3e18-4d88-4408-db413f774662.png)

グループのオブジェクト ID は Azure ポータルのすべてのグループの「オブジェクト ID」列で確認ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d416d3ab-a8e2-41ba-4085-cfa22d8bdc6f.png)

下記画面ショットのようにアイデンティティ・プロバイダが追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/92e6d250-df86-8527-8780-72fdc05fb2cc.png)

Oracle Cloud Infrastructure Console では、Just-In-Time プロビジョニングがサポートされているため、Oracle Cloud 側にテスト ユーザーを手動で作成する必要はありません。

つまり、 Oracle Cloud 側で Azure AD が発行した SAML Response の中に含まれる「Assertion (クレーム)」を共に、テンポラリのユーザーを作成する動作をしてくれます。

この Just-In-Time プロビジョニングはアプリケーションによってサポートしていないアプリもありますので、その場合は、シングル サインオンをテストする場合においても明示的にアプリケーション側にユーザーを用意する必要があります。

それでは Oracle Cloud Infrastructure Console にシングル サインオンできるかテストしてみます。
テスト用に割り当てたユーザー (test001@shyamag026.onmicrosoft.com) のアクセスパネル (https://myapps.microsoft.com) にアクセスします。

アクセス パネルより Oracle Cloud のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/69dc4db1-d156-2f80-a388-8cb742239b46.png)

Oracle Cloud Infrastructure Console のサインイン画面で「Identity  Provider」をプルダウン メニューから作成した名前 (例では azure-active-directory」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0a8609f1-1613-021c-0d2d-fffd8f2bbb04.png)

画面下の「Continue」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/97e2ea10-8c92-c951-7e46-1bf02f1a95d4.png)

下記画面ショットのように「test001@shyamag026.onmicrosoft.com」として Oracle Cloud にシングル サインオンできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d4bd4ea7-a952-eb98-5cd7-a1e983ec5671.png)

ちなみに Oracle Cloud 側のアイデンティティ・プロバイダの設定にて ***強制認証*** が下記画面ショットのように「有効」になっている場合の動作は、強制認証の項目に説明文があるとおり、Azure AD 側のアクセス パネルにて認証を行った状態においても、再度 IdP (Azure AD) にリダイレクトされて再認証を求める動作になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/52c897b6-e343-3345-0dc7-7af71247b33f.png)

Identity Provider に Azure Active Directory が選択されていることを確認し「Continue」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6baeb473-79c5-c628-b2da-c851ee11b91b.png)

Azure AD 側にリダイレクトされ再認証が要求されます。テスト ユーザーの UPN を入力して「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6a4ae25b-6bb3-1b90-dd8c-4e53dec3621f.png)

パスワードを入力して「サインイン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9212f51e-8fac-a951-f48e-3777c0d89ba8.png)

Oracle Cloud にテスト ユーザーでサインインできました。
しかし、ご覧のとおりアクセス パネルと Oracle Cloud で 認証を 2 回 ユーザーが行っていますのでシングル サインオンとは言えません。
意図的に再認証を強制したい場合において、「強制認証」を有効にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4848e825-d922-c98f-f098-3b29d505ca05.png)

#おわりに
今回は Azure AD と Oracle 社のクラウド サービスである Oracle Cloud Infrastructure Console を Azure AD と SAML 連携し、Azure AD ユーザーで Oracle Cloud Infrastructure Console にシングル サインオンする環境を構成しました。

Azure と Oracle Cloud のマルチ クラウド環境を構成している環境において Azure AD 側のユーザーで Oracle Cloud の管理、操作をしたい場合には SAML 連携することで ID の管理をシンプルにできます。
例えば、 連携した Azure AD ユーザーで Oracle Cloud 上で作成した Oracle Database に接続、管理することも可能になっています。

また、 Azure と Oracle Cloud は 2019 年 6 月に相互接続できるよう提携を発表していますが、今回はまさにこの記事に書かれている中の、「ID とアクセス管理が統合され、Azure と Oracle Cloud 全体のリソースが管理できるようになります。」を実証した形になります。

マイクロソフトとオラクル Microsoft Azure と Oracle Cloud の相互接続を発表
URL:https://news.microsoft.com/ja-jp/2019/06/10/190610-microsoft-and-oracle-to-interconnect-microsoft-azure-and-oracle-cloud/

今回の記事が少しでも参考になれば幸いです。