MS O365(Azure含む) MFAを使用した多要素認証の有効化手順

# ■はじめのご挨拶
お久しぶりの更新になりました。
djangoもAWSもものの見事に失敗に終わったわけなのですが、、
性懲りもなく、またアップしていこうというわけです

今度はお仕事でMS WindowsAzureを触ることとなりましたため、
組織のためではなく、自分を楽にしていこうという観点で
仕事中にこうやって手順メモをアウトソーシングしていくことにしました。

しかし、それは単に自分本位な考え方ではなく、自分も改善できないやつは
組織を改善するなんてこともできないだろうという観点に立っての行動なわけです。

# ■目的
O365を利用する際の認証をADFSを利用し、多要素認証で処理をさせつつ、
シングルサインオン構成とする場合

<font color=OrangeRed>__2017/10/27日 追記__</font>
__結果的に設定してみて分かったことですが§1の手順は丸ごと必要ないと思われます。
§2に記載されているO365の手順を実施するのみでMFAは有効化できると思いますので
この記事を参考にされる方がいらっしゃるのであれば§2の手順のみを実施してください。__

# §1 ADFSの設定追加手順
## ■手順1 ADFSに設定追加 (多要素認証成功時の処理設定)
1.ADFS管理画面を開き、左側のメニュー表示から[AD FS]->[信頼関係]->[証明書利用者信頼]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/17fc29d1-3e98-e0bc-437b-b5c857836523.png">
2.表示された一覧上から[Microsoft Office 365 Identify Platform]を右クリックして[要求規則の編集]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/14b7c557-a43f-6c49-f967-f5917148033c.png">
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/4603682b-0125-26b4-ad05-c681158228d9.png">
3.[規則の追加]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/f5cfe52c-49d8-166e-877d-fcf3c0817e45.png">
4.プルダウンメニューから[入力方向の要求をパススルーまたはフィルター処理]を選択して[次へ]を押下
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/010063f4-a79e-22a6-340f-64008328aa5f.png">
5.以下の情報を入力・選択し、[完了]ボタンを押下する
　①要求規則名欄
　　任意の規則名を設定 
　　(ここではMulti-Element AuthMethodと設定)
　②入力方向の要求の種類
　　プルダウンメニュー内から[認証方法の参照]を選択
　③処理の選択
　　[すべての要求値をパススルー]を選択
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/52845d47-5e6b-0dda-3a32-d5551de1b7bc.png">
6.追加されたことを確認して[OK]ボタンを押下
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/a11df191-694e-a743-ddbc-606be18b4031.png">
※ここまでの手順でユーザーが多要素認証に成功したときにADFSからAzureADに認証情報が渡される準備ができました

## ■手順2 信頼できるIPの設定
指定したIPアドレスのみ多要素認証をパスできるようにする設定を実装できます。
大きな流れでいうと以下の2点です。

### __◆2-1 ADFSで設定すること__
　①認証に成功した場合の処理を定義
　②処理対象ユーザ(設定を適用するユーザのスコープ)を定義
### __◆2-2 O365テナントで設定すること__
　・IPアドレスを指定して多要素認証をスキップする処理を適用する
## ■手順2-1 ADFSで設定すること
　①社内ネットワークからのアクセスに対する処理を定義
　　　1.ADFS管理画面を開き、左側のメニュー表示から[AD FS]->[信頼関係]->[証明書利用者信頼]を選択する
　　　2.表示された一覧上から[Microsoft Office 365 Identify Platform]を右クリックして[要求規則の編集]を選択する
　　　3.[規則の追加]を選択する
　　　4.プルダウンメニューから[入力方向の要求をパススルーまたはフィルター処理]を選択して[次へ]を押下
    　　__　※1～4の手順の画像は割愛__
　　　5.以下の情報を入力・選択し、[完了]ボタンを押下する
　　　　5-1.要求規則名欄
　　　　　　任意の規則名を設定 
　　　　　　(ここではInside Corporate Networkと設定)
　　　　5-2.入力方向の要求の種類
　　  　　　プルダウンメニュー内から[会社ネットワーク内]を選択
　　　　5-3.処理の選択
　　  　　　[すべての要求値をパススルー]を選択
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/ad8b4fea-8eb7-8c00-a3d3-6bc41be024b9.png">
__※画面は編集画面のものを使用__
　②O365からのアクセスをカスタムルールを適用して要求処理する
　　O365はユーザーの認証情報(トークン)をSAML形式で発行されたデータで認証処理を行っている
　　上記①の設定とこの②の手順で行った設定を組み合わせることによって、
　　指定された社内のIPアドレスを所有するユーザーからのSAML形式認証トークンに対しては処理をパスするという意味になる

　　　1.ADFS管理画面を開き、左側のメニュー表示から[AD FS]->[信頼関係]->[証明書利用者信頼]を選択する
　　　2.表示された一覧上から[Microsoft Office 365 Identify Platform]を右クリックして[要求規則の編集]を選択する
　　　3.[規則の追加]を選択する
    　　__　※1～3の手順の画像は割愛__
　　　4.プルダウンメニューから[カスタム規則を使用して要求を送信]を選択して[次へ]を押下
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/a3a370ad-9c2f-04c4-0aa1-ab5b0d8cadee.png">
　　　5.表示された画面内の[要求規則名]に任意の規則名(※ここではKeep Users Signed Inと入力)し、
　　　　[カスタム規則]に以下の内容を入力し、[OK]ボタンを押下する

```   c:[Type == "http://schemas.microsoft.com/2014/03/psso"]
      => issue(claim = c)```

<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/70b17aa7-9d47-a03a-7756-646c260aa59d.png">

# §2 O365の設定追加手順

本手順を実施する前の注意点としてAzureのサブスクリプション登録が必要となるので注意！！
この記事を掲載した2017年10月24日時点では12ヶ月の利用無料キャンペーン期間が存在しないため、
お金を請求されることはなかったがクレジットカード情報の登録は必要。

### __§2-1 MFA認証プロバイダーの追加手順__

O365上でMFA機能を有効にするための第一歩として連携先のAzureADにMFA認証プロバイダーのモジュールを追加する必要がある。

1.Azureクラシックポータルにサインインする
  ※クラシックポータル画面からしかMFA機能を有効化できないので注意が必要
2.ログイン後に左側メニューから[ACTIVE DIRECTORY]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/b19ed1cd-d7f8-3b9c-924f-e278cc184444.png">
3.画面上部のメニュー上に表示されている[多要素認証プロバイダー]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/32dc8abc-2ed5-e7a9-3052-82d0fefcf3ec.png">
4.[新しい Multi-Factor Authentication プロバイダーの作成]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/4140fdac-745c-b534-3c29-a45a4d342e50.png">
5.以下の通り、各項目を設定し[作成]をクリックする
　[名前] ： MFAに任意の名前を登録する
　[使用モデル]　：
　　※下記は公式ページの作成手順より抜粋
　　　【参考ページ】https://docs.microsoft.com/ja-jp/azure/multi-factor-authentication/multi-factor-authentication-get-started-auth-provider
　　　•認証ごと – 認証ごとに課金される購入モデル。 通常、コンシューマー向けのアプリケーションで Azure Multi-factor Authentication を使用するシナリオで使用されます。
　　　•有効ユーザーごと – 有効ユーザーごとに課金される購入モデル。 通常、Office 365 などのアプリケーションにアクセスに従業員向けに使用されます。 Azure MFA のライセンスを既に許諾されているユーザーがいる場合には、このオプションを選択します。
　[ディレクトリ]　：
　　※下記は公式ページの作成手順より抜粋
　　　【参考ページ】https://docs.microsoft.com/ja-jp/azure/multi-factor-authentication/multi-factor-authentication-get-started-auth-provider
　　　•Multi-Factor Auth Provider の作成に、Azure AD ディレクトリは必要ありません。 Azure Multi-Factor Authentication Server または SDK をダウンロードするだけであれば、空欄にしておいてください。
　　　•高度な機能を利用するためには、Azure AD ディレクトリに Multi-Factor Auth プロバイダーを関連付ける必要があります。
　　　•1つの Azure AD ディレクトリに関連付けることができるのは 1 つの Multi-Factor Auth プロバイダーのみです。
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/0fb6bfd9-8d7f-7efa-0ac7-c4f611de8e3d.png">
6.作成が完了すると以下のように一覧にMFAが表示される
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/df9d89bb-d9ef-b3f6-942e-0e777b50d751.png">

### __§2-2 O365側でのMFA 追加手順__
認証プロバイダーを追加した後はO365上で各ユーザーごとにMFAの設定を追加する必要がある。
※ただし、追加した認証プロバイダーの種類によってここの作業工程は内容が変わる。
　具多的には前項の手順にて[使用するモデル]の設定項目に対して[有効化されたユーザーごと]を設定した場合に本手順が必要になる

1.O365の管理者アカウントにてテナントにログインする
2.メニューから[管理]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/4d75748a-12e8-0e2f-0222-2a2b24b1b7ae.png">
3.左のメニュー画面から[ユーザー]->[アクティブなユーザー]を選択する
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/2e2ba1ad-04b8-11aa-4489-80649a4d383a.png">
4.画面上部の[その他]プルダウンメニューから[Azure Multi-Factor Authentication]を選択する
5.多要素認証設定画面が表示されるので機能を有効化したいユーザーのチェックボックスにチェックを入れる
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/227043eb-a4fb-f0a5-dcba-b39a3d421b09.png">
6.チェックを入れると画面右側に[有効にする]という項目が表示されるのでそれをクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/80d90d3c-89bb-b68e-cddc-c22b9f050090.png">
7.下記の画面が表示されるので[multi-factor authを有効にする]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/f7e4dd70-5b6c-785d-fed4-d6532c492e06.png">
8.下記の画面が表示されるので[閉じる]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/e35a0dc5-f95b-6f82-e65f-de017d3f8996.png">

<font color=OrangeRed>__★ちなみに…__</font>
　この時点でuser01というアカウントは多要素認証が有効になっています。
　試しにO365にログインしてみると下記のような形でログインできなくなりました。
　<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/7f81ad9e-a5d3-8ad3-9d3a-ca0489e29e7b.png">
  ただし、多要素認証設定のデフォルトにより、ユーザー側で任意のパスワードを決める設定となっている。
　ユーザー側で設定したパスワードがO365のログインとはまた別にアプリケーションを使用する際の多要素認証用パスワードとして使用される。

　ここから先の画面に行くとパスワードを送信方法を確認する画面に遷移します。
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/4905d647-9c18-52ce-48aa-0de87214be69.png">


### __§2-3 MFA アプリパスワードの設定を変更する__

※ユーザー側で任意のパスワードを設定させない場合は下記の手順を実施
<font color=OrangeRed>（書いた後で分かったことのですがこの設定を変更してもしなくても処理結果に変わりはありませんでした）</font>

1.多要素認証の設定画面上部に表示されている[サービス設定]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/3aa64619-91b6-5fc8-76ef-a676ba260799.png">
2.あえてここはデフォルトの設定ではない、[ブラウザーではないアプリケーションへのサインイン用にアプリケーション パスワードの作成を許可しない]にチェックを入れる
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/dba97c31-7281-9d79-abe8-f65925eaeb92.png">
3.[保存]をクリックすると[更新が正常に完了しました]と表示されるので[閉じる]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/81bab8b4-12b9-77e5-a774-6e4474f9eb66.png">
4.試しにテストアカウントでログインしてみて挙動を確認してみる


以上