OCIへのログインにIDCS(SP)を介したAzureAD(IdP)ユーザで認証を行う

#はじめに

この記事はOracle Cloud Infrastructure (以後、OCI)のコンロールへのログインの際に、Azure Active Directory(以後、AzureAD)のユーザ情報で認証させる手順になります。

- なぜそんな事するの？
    - 認証基盤を統一すると、ユーザ管理をシンプルに、セキュリティを強固にしても運用がしやすくなります

- デフォルトのOCIのIDCS使えばいいのでは？
    - AzureADはAzureやMicrosoft365(旧名：Office365)など、以前から利用者が多く、また、オンプレミス環境のActive Directoryと連携して既にIDがAzureADに統合されているケースが多い為、OCIのログインにもAzureADを認証に利用します

- OCI IAMと他のIDaaS直接フェデレーションさせればいいんじゃない？ (2021/11/09追記)
    - IAMとフェデレーションさせるだけであれば可能ですが、IAMにユーザはプロビジョニングされない為、APIキーや認証トークンの機能を利用するためにはSCIMプロビジョニングも必要になります。それに対応しているのはIDCSとOktaのみです


# OCIの前提知識と本手順のゴールイメージ

OCIを契約するとデフォルトで、OCI側のIAMと、AzureADと同様機能をもつIDaaS製品のOracle Identity Cloud Service(以後、IDCS)の2種類の認証方法が用意されています。
デフォルトはIAMで直接OCIにログインしても良し、IDCSをIdentity Provider(以後、IdP）としたSAML連携でIDCS側のユーザでログインしても良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/f53f1c3f-6b30-f876-75b7-ced775a8ba21.png)


この手順では、IDCSをService Provider(以後、SP)として、AzureADをIdPとして構成し、AzureADユーザでシングルサインオン（以後、SSO)させます。

- なぜIAMとAzureADをSAML連携しないの？
    - IAMとAzureADを直接認証連携可能ですが、2021年1月現在ではSCIMによるプロビジョニングができない為、直接フェデレーションしたIAMユーザアカウントではAPIキーを設定できない制限があります

- 追加費用はかかる？
    - AzureADもIDCSも、デフォルトの無償のまま構成することが可能です。
    - IdP側は無償なのと、今回はSPとなるIDCSでは、1つのIdP登録までは無償のFoundationモデルで可能です。
    - IDCSドキュメント： [1か月当たりのユーザー価格設定モデルの理解](https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/uaids/oracle-identity-cloud-service-pricing-models.html#GUID-A662753A-C75E-4316-8620-10B2D1B4D433)

【ゴール・イメージ】
AzureADのユーザ名とパスワードを入力して認証が通ると、IDCS-IAM で構成した認可設定によって、OCIコンソールにサインインしてOCIの管理が可能となります。
（※SAMLやSCIMは正しく理解できていないので、矢印や説明には矛盾があるかもしれません、コメント欄でご教授いただけると幸いです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/b06870a4-0c8b-c8f2-ef7b-0d184b3f9a2d.png)





#手順概要

|	手順No	|	AzureADでの作業	|	IDCSおよびOCIでの作業	|
|	 -----	|	 -----	|	 -----	|
|	1	|	AzureADでIDCSをSPとして登録	|		|
|	2	|		|	IDCSでAzureADをIdPとして登録	|
|	3	|		|	IDCSの認証ポリシー設定	|
|	4	|	AzureADでIDCS情報の追加設定	|		|
|	5	|	AzureADのユーザ作成	|		|
|	6	|		|	IDCSのユーザ作成	|
|	7	|		|	OCI IAMの設定	|



#手順

## 1. AzureADでIDCSをSPとして登録

Azureにログインし、AzureADコンソールを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/eadbb5ba-65e7-ddbe-446e-9ea1e8c67581.png)

「エンタープライズアプリケーション」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/23059138-b60a-a199-a073-0b7af3164fd1.png)

「すべてのアプリケーション」-「新しいアプリケーション」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/2c8b0baf-a1ea-c51d-69cf-ba72639575f9.png)

Oracleを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/af874be5-a601-9397-b460-20c5ca779ff4.png)

Oracle Cloud Infrastructureを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/f928c0e9-b52a-c01e-569f-ffe2409ef55f.png)

そのまま作成ボタンを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/86cc459a-48cf-45e7-0915-aeda71c26422.png)

以下が開くので「シングルサインオン」を選択
表示された右側の画面で「ユーザー属性とクレーム」を編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/5af072b0-6bc9-22bd-d075-14e51ffce987.png)

「名前識別子の形式の選択」を「永続的」に変更して保存する
参考：https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/oracle-cloud-tutorial
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/40ee0d86-c004-f901-535b-891db4dec2f6.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/23990a2d-eba4-8539-a6f3-a367a41d72c7.png)

「グループ要求を追加する」を押下
右画面で設定
「セキュリティグループ」
ソース属性：「グループID」
カスタマイズ　名前：「groupName」
名前空間：　「https://auth.oraclecloud.com/saml/claims」
を入力して保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/546bd920-c935-4d94-a57c-fadb8ac9fc71.png)

フェデレーション メタデータ XMLをダウンロードする
→　**Oracle Cloud Infrastructure Console.xml**　がダウンロードされる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/1688f306-28e1-7925-03f0-75f6896d370c.png)



## 2. IDCSでAzureADをIdPとして登録

IDCSの管理コンソールにログインする
https://<環境固有>.identity.oraclecloud.com/ui/v1/adminconsole

「セキュリティ」-「アイデンティティ・プロバイダ」　「SAML IDPの追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/ba05e49c-49ca-833e-23a4-8146c25e0e19.png)

名前やアイコンは任意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/d56f13ee-5e4a-0e64-e575-d10526447f6d.png)

AzureADでダウンロードした **Oracle Cloud Infrastructure Console.xml** をアップロードして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/a3b51458-1d92-953e-6dab-2c0ce73dbee4.png)

以下が表示される
リクエストされたNameID形式はを「＜リクエストなし＞」から「永続」に変更する
→ AzureADユーザで必ず一意になるプリンシパルユーザ名と、IDCSユーザのプライマリメールアドレスとで、紐づけを行うということ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/6ab793db-072f-cc81-3de3-d7b12655753b.png)



この画面でIDCSの「サービス・プロバイダ・メタデータ」ダウンロードする
→ **Metadata.xml** がダウンロードされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/6be5f537-4c9e-6fac-4ff9-11b1d9e2ef54.png)

ここでテストしてもNGなので、一旦「終了」押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/37d0eb06-42ac-32c5-09da-4c102829a943.png)

## 3. IDCSの認証ポリシー設定

「セキュリティ」-「IdPポリシー」
「Default Identity Provider Policy」を選択
中の設定で、「アイデンティティ・プロバイダ・ルール」タブの
「Default IdP Rule」を編集

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/9568f364-d945-e54e-e858-5856173f81c8.png)

Azureを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/3697fba5-629d-aa7b-d5ec-8a6b1cc2cea9.png)

「セキュリティ」-「アイデンティティ・プロバイダ」 
Azureを有効化する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/a943603b-4dc5-93cd-6283-c8fc5edba547.png)


## 4. AzureADでIDCS情報の追加設定

AzureADコンソールを開く
「エンタープライズアプリケーション」-「Oracle Cloud Infrastructure」-「シングルサインオン」　を選択
「メタデータファイルをアップロードする」で、IDCSでダウンロードした **Metadata.xml** をアップロードする
その後、「基本的なSAML構成」を編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/49492bed-ef67-f9f6-fec4-c4115cca1bbe.png)

サインオンURLだけ値が入らないため、応答URLと同じものを入れ、保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/2c9157c6-a86a-aa6a-846c-79c38a911c5c.png)

テストするか表示が出たら、スキップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/c9cdb51b-0d1d-8371-798b-747410228946.png)


## 5. AzureADのユーザ作成

「AzureAD」－「ユーザ」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/a29cb8a3-fb30-84ed-e2d5-b6a402ce6477.png)

「新しいユーザー」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/c3acae52-a799-8665-3b70-3bdd778873f8.png)

例では「oper1」アカウントを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/6713f9c4-7d68-dfa1-34cb-83d938f77e80.png)

作成後、 **「ユーザー プリンシパル名」のメールアドレスを控えておく** （IDCS側ユーザのメールアドレスと一致させる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/018984f3-1586-978b-5055-b8cd3dcc34c4.png)

次にグループを作成し、先ほどのアカウントをメンバとして追加しておく
名前は任意。ここでは「OCI_Administrators」というグループにしている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/92dd9620-6102-09e8-86f5-9d9d43e1f281.png)

グループに先ほど作成したユーザを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/b9ede774-f015-9079-e716-ec7ddf1c7be7.png)

次にAzureAD 「エンタープライズアプリケーション」-「Oracle Cloud Infrastructure」-「ユーザとグループ」を開き
AzureADからIDCSにフェデレーションするユーザもしくはグループを追加する
今回は「OCI_Administrators」グループを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/688bd350-2ce5-1a08-0605-921fde8923b1.png)


## 6. IDCSのユーザ作成

「グループ」を選択
名前は任意。ここでは「Azure_Users」というグループを作成した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/d4932f82-adda-5bc8-6fa4-a4a896e8763f.png)

グループに対してアクセス許可「OCI-V2-<テナント>名」を割り当てる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/283b9933-1484-b747-cf0f-e1879f6d92bb.png)

次にユーザを作成
「ユーザ」ー「追加」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/fb19b337-8ec8-c7b0-337d-144ec82e86e5.png)

姓は任意
ユーザ名は、AzureADのユーザー プリンシパル名と同一にする
（AzureADと別の名前にする場合は、「ユーザ名として電子メール・アドレスを使用」のチェックを外し、ユーザ名と電子メールアドレスを別々に指定する）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/8b0963b4-7da9-0b86-7525-fa90249ec723.png)

先ほど作成したグループ「Azure_Users」に追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/5aaad7ef-bc88-756d-a2ce-e1cac7fb35eb.png)

作成したユーザ情報を開く
ユーザ名がAzureADのユーザプリンシパル名と同一であることを確認
また、「フェデレーテッド」を「はい」に変更する
※デフォルトの「いいえ」のままの場合、AzureADとIDCS、いずれでもログイン（認証）ができる状態

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/5e8d91d7-2c7d-f38d-ed63-01424a6e5b6d.png)


確認：所属グループ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/4f3421e5-829c-29c7-250b-9d082df03f4c.png)

確認：アクセス権（グループに割り当たったものが下りてきている為、グレーアウトしている）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/3607dad6-70bd-cc1a-dc0a-ef26b0e02d23.png)



## 7. OCI IAMの設定

OCI側のコンソールにサインインし、IAMを設定していく
「アイデンティティ」-「グループ」を開く
任意の名前でグループを作成する
今回は「Azure_Users_Audit」というグループを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/df39580a-39d8-96d0-739f-2498f7083552.png)

「アイデンティティ」-「ポリシー」を開く
ここでは、作成したグループにネットワークだけを管理できる権限を付与している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/f1240d0b-c12e-ec6f-2455-0dad058d1ca4.png)

「アイデンティティ」-「フェデレーション」を開く
右画面の「OracleIdentityCloudService」リンクを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/b3c1fc02-514a-8b06-0eb0-d5bf59df216f.png)

「グループ・マッピング」の「マッピングの追加」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/48d6f8fa-fc2b-d43f-4cb9-772215efbfe8.png)

IDCSの「Azure_Users」グループと、IAMの「Azure_Users_Audit」グループをマッピングする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/7e7a881f-29d4-0a81-07de-777565627da8.png)

マッピング追加後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/99b54f96-d20f-f5d5-9d89-2599ceac91ee.png)

※IAM側はユーザを作成しなくてよい


## 8. OCIへのサインインテスト

OCIにログインする
https://cloud.oracle.com/?tenant=nicaregi

以下では、IDCS側でログインするように左側「Continue」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/8abafd7c-e06e-e894-4798-bb09406a4d63.png)

IDCSのサインイン画面が表示される
ここではユーザ名は入力せず、下部に表示される「Azure」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/381a6c3e-4d72-e426-52c8-4f34b286988c.png)

AzureADのユーザ名、パスワードを入力
（AzureAD側でMFAなどを有効化すれば、その旨が問われる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/afa095e4-b13a-f49a-ccf1-48fa9d7d4847.png)

OCIにサインインできた画面
OCI(IAM)からすると、IDCSユーザでサインインしている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/f29974e6-2a2d-03fe-0d2b-dae3c589bd38.png)

## 9. 動作確認：認可範囲
ネットワークは管理できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/b2d6dde6-885a-80b2-2517-f51ee58b2e24.png)

コンピュートは管理できない
→ 意図したポリシーが適用されている事が確認できた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/482a3d1d-b94a-ad8a-f5a4-19c1ae8fe00b.png)

## 10. 動作確認: AzureADユーザでOCIを利用しても、APIキーが利用できる事がわかる (2021/11/09追記)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/2b2c1a66-4d80-998e-b758-45561e652e2e.png)


以上

# Appendix

## IDCSユーザでログインしようとするとできない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/6ea9217e-e44f-6291-4942-153ebf09c50e.png)


# 参考資料

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

Microsoft Azure Active Directoryのフェデレート
https://docs.oracle.com/ja-jp/iaas/Content/Identity/Tasks/federatingADFSazure.htm

Oracle Identity Cloud Serviceを使用したOracle Cloud Infrastructure (OCI)コンソールの提供
https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/federatingIDCS.htm

IDCSチュートリアル
https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/tutorials.html