AzureADの認証情報(SSO)を使って AWSのコンソールにアクセスする

## 目的
複数のAWSアカウントを利用用途に使い分けていると、それぞれのログイン情報を管理するのは煩雑なので Azure Active Directory の認証情報を用いて、Office 365 ポータル からAWSコンソールを利用できる状態にします。

<img width="527" alt="Office365ポータル.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/341c0e08-b000-7f0f-a698-e7b6d35d8414.png">

## 手順1. AzureADにエンタープライズアプリケーションを追加

[チュートリアル:Azure Active Directory シングル サインオン (SSO) とアマゾン ウェブ サービス (AWS) の統合](https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/amazon-web-service-tutorial) に書いてある通りです。

### AzureAD のエンタープライズアプリケーション に追加

![01azureAdd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/d5091962-8cec-36e0-e0d0-714b16b5504e.png)


「Azure Active Directory 管理センター」 の 「エンタープライズ アプリケーション」 で `+ 新しいアプリケーション` を選択します。

--- 
![02addApp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/d49dc7f9-49de-9bf7-e8c0-88da7f21855e.png)

追加するアプリケーションを指定するので、「ギャラリーから追加する」にあるテキストボックスに「Amazon Web Services」と入力して、 候補に上がった `Amazon Web Services(AWS)` を選択します。

---
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/997fd297-06b2-5eea-d183-ed60c460a640.png)

画面右側に詳細が表示されるので、 「名前」に利用するAWSアカウントを識別できるものに変更して、 `追加` をクリックします。 ここで指定した名前は Office 365 ポータルのの表示にも使われます。

---

### Azure Active Directoryのエンタープライズアプリケーション でSAMLの設定

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/eb7be739-388c-7471-4c06-22a4b4f284f4.png)

追加した エンタープライズアプリケーション の「概要」が表示されるので、 `2。シングル サインオンの設定` を選択します。

---
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/2717fd36-51f6-6b63-9f3a-53f09f506b77.png)

「シングル サインオン方式の選択」から `SAML` を選択します。

---
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/a42ecee8-d419-dcac-d7ee-1ac893043097.png)

SAMLの設定画面を表示した時に 識別子と 応答URL を問われるので、 `いいえ、後で保存します` を選択します。

---
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/e2970fca-045b-d2ba-20ae-acc906bb76e2.png)

スクロールして、 「SAML署名証明書」にある `フィレデーション メタデータXML` をダウンロードします。ここでダウンロードしたXMLは AWSに設定を行う過程で、AWSコンソールからアップロードします。

---

## 手順2.AWSにIDプロバイダーを追加

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/c9d49a30-858a-c8fe-71c7-97af269d5493.png)

AWSコンソソールにログインして、　「Identity and Access Management (IAM)」の `IDプロバイダー` の作成を開始します。

---
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/0e4e8178-32b4-7c4a-793a-a5962a173179.png)

作成する IDプロバイダーの情報を入力します。入力後は画面右下の `次のステップ` をクリックします。

* プロバイダーのタイプ
    * `SAML` を選択する
* プロバイダー名
    * 任意の名前を入力する
    * 次の手順で IAM ロールを作成する時に指定するので名前を控えておく
* メタデータドキュメント
    * AzureADのエンタープライズアプリケーションの設定をこなう過程でダウンロードした 「SAML署名証明書」にの `フィレデーションメタデータXML` を指定する

---
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/15af7395-15fd-12de-3978-4c30bb9c8cac.png)

入力した IDプロバイダーの確認画面が表示されるので、誤りがなければ画面右下の `作成` をクリックします。

---
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/90f67b7e-99be-b490-6b09-07df32ce992f.png)

IDプロバイダーが作成されると、一覧に追加されます。

---

## 手順3. AWSでIAMロールを作成してSSOで認証されたユーザの権限を定義する

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/3cf0a0c5-f672-aba0-8267-ee7f9b6ae31b.png)

「Identity and Access Management (IAM)」の `ロール` の作成を開始します。

---
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/0bbbc93b-ee8b-564a-b2d2-4e4dcf5ee8a4.png)

作成するロールの情報を指定します。必要な指定を行ったら、 `次のステップ: アクセス権限` をクリックします。

* 信頼されたエンティティの種類を選択
    * `SAML2.0 フィデレーション` を選択する 
* SAML 2.0 プロバイダを選択
    * SAML プロバイダーは一つ前の手順で作成した IDプロバイダーを指定する
    * `プログラムによるアクセスとAWSマネージメントコンソールによるアクセスを許可する` を選択する
    * `属性` は変更しない
    * `値` は変更しない
    * `条件` はAzure Active Directoryの属性に基づいて条件付けを行うのであれば指定する

---
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/902012c7-ef78-4a15-0c9c-90659161b579.png)

Azure Active Directoryで認証したユーザに付与する IAM ポリシーを指定したら、`次のステップ: タグ` をクリックします。今回は 「ReadOnlyAccess」にしました。

---
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/06823c94-356b-619a-9a06-c4c9ba67a636.png)

タグを適宜設定したら、`次のステップ: 確認` をクリックします。

---
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/63822046-89bd-025b-f00b-177fd956c420.png)

最後に、ロール名とロールの説明を入力して、 `ロールの作成` をクリックします。ここで指定したロール名は AzureADの「エンタープライズ アプリケーション」の「ユーザとグループ」で利用されます。後の手順でユーザを単位に付与するロールを指定します。

* ロール名
    * 「ReadOnlyAccessWithAzureAD」 
* 説明
    * 「Grant ReadOnlyAccess permission to the user authenticated by Azuru AD.」 

---
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/a89ddcd3-2847-9a43-4be6-c9ce8fbca4b9.png)

ロールの一覧に今回作成した IAM ロールが追加された事を確認します。

---

## 手順4. AWSのIAMロールのリストを取得できるIAMユーザを作成する

### ポリシーを作成

AzureADがユーザにロールを割り当てるために、ロールの一覧を取得できるIAMユーザを作成します。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/828bf414-22b0-9c9a-7e6f-675778612f14.png)

まずは、ポリシーを作成します。 「Identity and Access Management (IAM)」の ポリシーの作成を開始します。

---
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/e7f874e0-7a93-034c-b151-7f90f099ecda.png)


ポリシーの作成画面では、 `JSON` タブに下に JSONを設定して、 `ポリシーの確認` をクリックします。

```json:IAMロールの一覧取得を許可する
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            "iam:ListRoles"
            ],
            "Resource": "*"
        }
    ]
}
```

---
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/a96c33e7-2e5c-9b0e-a9d3-b345a691aafc.png)

作成したポリシー名と説明を入力します。　参考にした [チュートリアル:Azure Active Directory シングル サインオン (SSO) とアマゾン ウェブ サービス (AWS) の統合](https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/amazon-web-service-tutorial) に従って入力します。最後に、 `ポリシーの作成` をクリックして、ポリシーを作成します。

* 名前
    * 「AzureAD_SSOUserRole_Policy」
* 説明
    * 「This policy will allow to fetch the roles from AWS accounts」

---
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/524d7843-5f62-0263-9bd8-c86993393632.png)

作成されると、一覧に追加されます。

---

### IAMユーザを作成

AzureADでユーザにIAMロール (今回であれば `ReadOnlyAccessWithAzureAD` )を割り当てるために、AWSにあるロールの一覧を取得します。それを行うために、IAMユーザを作成して「Access key ID」と「Secret access key」を発行します。

---
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/62dc4886-6410-bbfb-e59d-c4a836d50a76.png)

 「Identity and Access Management (IAM)」の ユーザの作成を開始します。

---
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/b586c789-80b6-2acf-6d50-3cc6c8eeb742.png)

作成するユーザ名とアクセスの種類を指定して、 `次のステップ: アクセス権限` をクリックします。

* ユーザ名
    * 「AzureADRoleManager」 
* アクセスの種類
    * 「プログラムによるアクセス」

---
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/7eab147a-3728-12c1-21a6-be1f5dcc6380.png)


直前で作成したポリシー「AzureAD_SSOUserRole_Policy」を指定して、 `次のステップ: タグ`をクリックします。

* アクセス許可の設定
    * 既存のポリシーを直接アタッチ 
* 指定するポリシー
    * 「ポリシーのフィルター」に `AzureAD_SSOUserRole_Policy`  を設定してフィルターをかけます。 
    * 「AzureAD_SSOUserRole_Policy」 

---
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/7d3ff8ec-75f2-9ce4-4190-c1558d80d20a.png)

タグを適宜設定して、 `次のステップ: 確認` をクリックします。

----
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/3bf9230a-5c78-9e75-e651-fa4969dcf5c3.png)

内容を確認して問題なければ `ユーザの作成` をクリックします。

---
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/ff14a8ed-0c98-2c68-5f1f-f12dc69c4d01.png)


ユーザの追加が完了したら、 アクセスキーとシークレットアクセスキーが記載された CSVファイルをダウンロードしておきます。

## 手順5. Azure ADに AIMユーザ AzureADRoleManager のアクセスキーとシークレットアクセスキーを設定する

![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/d71fd19d-df03-d9bf-34f1-b705b7520801.png)


AzureADのエンタープライズアプリケーションから 手順1 で追加したものを選択し、 「管理」の「プロビジョニング」を選択します。

---
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/0124a754-d274-eff9-8817-0a6772166f53.png)


プロビジョニングモードを指定して、 AIMユーザ「AzureADRoleManager」の認証情報を設定して、「テスト接続」を行い、成功する事を確認します。成功した後に「保存」をクリックして、入力値を保存します。

* プロビジョニングモード
    * 自動
* clientsecret
    * IAMユーザ「AzureADRoleManager」のアクセスキー
* シークレットトークン
    * IAMユーザ「AzureADRoleManager」のシークレットアクセスキー

必要事項を入力した後に、「テスト接続」を行い、画面右上に成功メッセージが表示されるのを確認する。

---
![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/b579ab28-d919-58d3-0927-444690ab5c2c.png)


入力値を保存すると 「プロビジョニング状態」が活性状態になるので、「オン」に変更して、再度保存します。

## 手順6. SSOで AWSにアクセスできるユーザを指定する

![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/7e4e713e-a84b-db6f-2c0d-1a62eff5000c.png)

AzureADのエンタープライズアプリケーションから 手順1 で追加したものを選択し、 「管理」の「ユーザとグループ」を選択します。

---
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/51cab8d5-0b43-ac1f-f47b-ff386966c9cc.png)

「ユーザとグループ」の `+ ユーザの追加` をクリックします。

---
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/0f723645-0ecd-720c-6163-d71d10542133.png)

画面右側でAWS コンソールへのログインを許可するユーザもしくはグループを選択します。

  1. Active Direcotryに登録されているユーザとグループの一覧が表示されるので対象を選択する
  2. 中段の 「選択したアイテム」に、選択肢たユーザもしくはグループが表示されるのを確認する。
  3. 下段の `選択`をクリックする


---
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/c6c2a210-9484-ccd9-8c88-6dfb14837c11.png)

ロールは一つだけ作成したので、それが適用されます。複数のロールを作成している場合は、「ロールの選択」から適宜指定します。ユーザとロールの選択すると、 `割り当て` が活性化されるでクリックして保存します。

---
![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/3ab80384-889e-850f-3d05-0eab6031a414.png)

ユーザとグループの一覧に戻り、割り当てたユーザが表示されています。

## Office 365 ポータルからAWSコンソールにログインする

![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/7e532d58-6f05-3984-3047-6949acafc5f0.png)

追加されたユーザで Office 365 ポータルにアクセスすると、 「All Apps」に追加されているので、これをクリックするとAzureADの認証情報が使われてAWSコンソールを利用できます。

## AWSで権限を分けたい場合

![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/c393b36f-af0f-5b2a-8bf2-84eeba265b99.png)

新しいIAMロールを作成します。「信頼されたエンティティ」は同じものを使います。