AWS SSO をお試す

# 注意点

* AWS SSOを作成するAWSアカウントはAWS Organizationの親でないといけない
* 今の所バージニアリージョンのみ

# 全体の構成図(イメージ)

AWSのブログからの抜粋ですが、今回はIdP(Identity Provider)をAWS SSO、SP(ServiceProvider)をAWSやWordpressとして試します

![スクリーンショット 0031-02-23 16.27.02.png](https://qiita-image-store.s3.amazonaws.com/0/27932/47ef4be5-e395-d275-0915-5dd34eb4bb1d.png)

# MSAD(Microsoft AD)作成

#### 事前VPC作成

MSADを起動する任意のVPCとサブネットを作成しておく

#### MSADをマネコンから作成

AWSにログインし、リージョンをバージニアにし、サービスから"DirectoryService"をクリックし、
以下の画面の左メニューの"ディレクトリ"をクリックし、[ディレクトリのセットアップ]をクリック

<img width="1195" alt="スクリーンショット 0031-02-21 12.54.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/aca633e8-9c63-2023-2894-ccdb5b206095.png">

"AWS Managed Microsoft AD"にチェックを入れ、右下の[次へ]をクリック

<img width="1053" alt="スクリーンショット 0031-02-21 12.55.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/1643284b-7f50-f25a-9b50-5d20b0b0b929.png">

エディションを"Standard Edition"にチェックを入れ、その他以下の値を入力し、[次へ]をクリック
管理者アカウントは、Administratorユーザではありません。AWSにより権限を絞られたAdminユーザです

* ディレクトリのDNS名
ue.example.com

* Adminのパスワード
任意

<img width="859" alt="スクリーンショット 0031-02-21 12.56.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/f8fafad9-412e-8179-60fe-71813b369702.png">

VPCを任意のものを選び、[次へ]をクリックし、次の画面で[作成]をクリック
必要であれば事前にVPCを作成しておく
作成には20-30分かかる

![スクリーンショット 0031-02-21 12.56.59.png](https://qiita-image-store.s3.amazonaws.com/0/27932/7c1a6e60-f1db-fd22-6086-f235f245f0ae.png)


# MSAD管理用のWindowsServer(EC2)作成

### EC2作成

AMIは以下
Microsoft Windows Server 2019 Base - ami-0410d3d3bd6d555f4

詳細は割愛

### MSADへのユーザー追加手順

以下のqiitaの通り、EC2を作成し、RemoteServerToolsの"AD DS and AD LDS Tools"をインストールし、ADのドメインに参加し、参加後にAdminでログインしなおし、Administrative ToolsでADにユーザー追加する

https://qiita.com/nr0k/items/7b26832c388017fcc1f7

※ AWS公式のMSADへのユーザー追加手順

https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_install_ad_tools.html


# AWS SSO 作成

マネコンのサービスから"AWS SSO"をクリックし、"ディレクトリの管理"をクリック

<img width="999" alt="スクリーンショット 0031-02-21 14.18.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/006e3023-0607-baf2-4ce8-c075494557d1.png">

[ディレクトリの接続]をクリック

<img width="1086" alt="スクリーンショット 0031-02-21 14.18.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/0c7c5a2d-f8e5-260b-f101-80ab5e0886b8.png">

"Microsoft AD ディレクトリ"にチェックを入れ、既存ディレクトリをさきほど作ったものを選択し、[次へ]をクリック

![スクリーンショット 0031-02-21 14.18.30.png](https://qiita-image-store.s3.amazonaws.com/0/27932/3854d906-ddc8-d2a6-6dea-7fbcafd2b16f.png)

CONFIRMと入力し[完了]をクリック

<img width="934" alt="スクリーンショット 0031-02-21 14.18.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/93bc23ca-c39b-7378-3fc4-d2817962ed5d.png">

## 複数AWSマネコンへSSOする設定

AWS SSOの"ダッシュボード"に戻り"AWSアカウントへのSSOアクセスの管理"をクリック

![スクリーンショット 0031-02-21 14.29.55.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e13fc71e-3e22-b9c6-df49-5ddb8c4981bd.png)

ログイン対象のAWSアカウントを選択。今回は2つ
※AWS Organizationの子アカウントにしておく必要がある

![スクリーンショット 0031-02-21 14.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e138d1b8-f168-8c8d-f92d-cc660679c0af.png)

ADのユーザーを検索してチェックを入れる。今回はuehara

<img width="963" alt="スクリーンショット 0031-02-21 14.31.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/4546c726-9032-359e-5b04-6106fe6ecc27.png">

[新しいアクセス権限セットを作成する]をクリック

![スクリーンショット 0031-02-21 14.32.07.png](https://qiita-image-store.s3.amazonaws.com/0/27932/63082a97-74f4-0e1a-87f6-64358ef30d5d.png)

"既存の職務機能ポリシーを使用"にチェックを入れ、"AdministratorAccess"を選択し、[作成]をクリック

<img width="938" alt="スクリーンショット 0031-02-21 14.32.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/3e7a1d44-45fc-964c-b5fb-e41683f5581e.png">

確認し[完了]をクリック
今回は例として管理者権限のアクセス権限セットを渡す

<img width="955" alt="スクリーンショット 0031-02-21 14.32.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/81a34ef0-09ab-d0fa-9375-8c36b5338b47.png">

AWSアカウントがセットされたことを確認

![スクリーンショット 0031-02-21 14.32.58.png](https://qiita-image-store.s3.amazonaws.com/0/27932/68a35398-2159-862e-dea4-967ab7d95058.png)

ユーザーポータルにアクセスしログイン確認

![スクリーンショット 0031-02-21 14.25.22.png](https://qiita-image-store.s3.amazonaws.com/0/27932/8b2902e9-c27c-cf4d-4311-f2040ee538b1.png)

ログイン後に対象のAWSアカウントの"Management console"をクリック

![スクリーンショット 0031-02-21 14.45.36.png](https://qiita-image-store.s3.amazonaws.com/0/27932/1f7110c2-a439-ba7a-8a01-e08219eb031a.png)

ログイン完了

![スクリーンショット 0031-02-21 14.44.48.png](https://qiita-image-store.s3.amazonaws.com/0/27932/417a496b-50d1-fb9e-bc50-ca9f4e3318e5.png)

## カスタムSAMLアプリとAWS SSO連携

今回はWordpressとAWS SSOを連携させる

#### WordpressをEC2にインストール

以下の手順でインストールを実施

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/hosting-wordpress.html

Wordpressに管理者ログインし、左側メニューの"プラグイン"->"新規追加"をクリックし、検索窓で"saml"を入力し検索、"OneLogin SAML SSO"の[今すぐインストール]をクリックしOneLogin SAML SSOプラグインをインストールする

![スクリーンショット 0031-02-23 15.22.36.png](https://qiita-image-store.s3.amazonaws.com/0/27932/1100d51e-385f-764f-754e-0a493f5adf6a.png)

#### AWS SSO設定

AWS SSOの画面で、左側メニューの"アプリケーション"をクリックし、[新規アプリケーションの追加]をクリック

![スクリーンショット 0031-02-23 15.17.11.png](https://qiita-image-store.s3.amazonaws.com/0/27932/9a20b4a1-4669-8c66-826b-4a4fe0e4c28c.png)

"カスタム SAML 2.0 アプリケーションの追加"をクリック
次の画面で、以下を入力し、[変更の保存]をクリック

* 表示名: Wordpress 1 (任意)
* アプリケーション開始URL： http://"wordpress ec2 ip"/wp-admin/
* アプリケーション ACS URL: http://"wordpress ec2 ip"/wp-login.php?saml_acs
* アプリケーションSAML対象者: php-saml

![スクリーンショット 0031-02-23 15.18.34.png](https://qiita-image-store.s3.amazonaws.com/0/27932/07b24c42-0ab2-7346-3d82-4b6d510b358e.png)

"割り当て済みユーザー"タブをクリックし、[ユーザー割り当て]をクリック

![スクリーンショット 0031-02-23 15.34.35.png](https://qiita-image-store.s3.amazonaws.com/0/27932/794802c2-a492-86bd-b454-69327d02765c.png)

"ユーザー"をクリックし、"uehara"を入力し[接続されたディレクトリを検索]をクリックし、"uehara"にチェックを入れ、[ユーザーの割り当て]をクリック

![スクリーンショット 0031-02-23 15.36.04.png](https://qiita-image-store.s3.amazonaws.com/0/27932/866ecbb3-a521-f339-6e58-04becea641b9.png)

#### Wordpress saml設定

左側メニューの"設定"->"SSO/SAML Settings"をクリック

![スクリーンショット 0031-02-23 15.25.11.png](https://qiita-image-store.s3.amazonaws.com/0/27932/05e1a4af-f5ac-ea37-7af7-ac1cb3b0e81d.png)

必要箇所を入れ、[保存]をクリック

* Enable:チェック
* IdP Entity id:AWS SSOのアプリケーションWordpress1の"AWS SSO発行者URL"のURL
* Single Sign On Service Url:AWS SSOのアプリケーションWordpress1の"AWS SSOサインインURL"のURL
* Single Log Out Service Url:AWS SSOのアプリケーションWordpress1の"AWS SSOサインアウトURL"のURL
* X.509 Certificate:AWS SSOのアプリケーションWordpress1から証明書ダウンロードし中身貼り付け
* Create user if not exists:チェック
* Update user data:チェック
* Keep Local login：チェック

ATTRIBUTE MAPPING
* Username:username
* E-mail:email

保存後、画面右上に"Go to the metadata of this SP"のリンクをクリックし、SP(ServiceProvider,今回はWordpress)のXMLのメタデータをダウンロード

![スクリーンショット 0031-02-23 15.41.56.png](https://qiita-image-store.s3.amazonaws.com/0/27932/4244dfbc-9281-7283-7678-845f518dc52f.png)

#### AWS SSOでの追加設定

SSOの画面で"アプリケーション"->[設定の編集]をクリック

![スクリーンショット 0031-02-23 15.44.37.png](https://qiita-image-store.s3.amazonaws.com/0/27932/5b3e1434-57f7-d07e-8bf6-572f3f8409cd.png)

"メタデータファイルがある場合は、代わりにそれを今すぐアップロードできます"のリンクをクリックし、先程ダウロードしたXMLファイルを指定し、[変更の保存]をクリック

![スクリーンショット 0031-02-23 15.45.50.png](https://qiita-image-store.s3.amazonaws.com/0/27932/99f2fdf8-93f7-6822-0b6a-1a873deffcf1.png)

"属性マッピング"タブをクリックし、以下のマッピングを保存する
Subject ${user:subject} unspecified
email ${user:email} unspecified
username ${user:name} unspecified

※サポートされるディレクトリとAWS SSOの属性
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/attributemappingsconcept.html?icmpid=docs_sso_console

![スクリーンショット 0031-02-23 16.17.16.png](https://qiita-image-store.s3.amazonaws.com/0/27932/d1907f29-a57a-1724-927a-f1ffd0b0c9a8.png)

#### WordpressからSSO確認

Wordpressの画面から"SAML Login"をクリック

![スクリーンショット 0031-02-23 15.48.35.png](https://qiita-image-store.s3.amazonaws.com/0/27932/2ee58037-cdfb-3920-6ed1-a4d3bdc9a52b.png)

AWS SSOポータルにリダイレクトする。ポータルでログインする

![スクリーンショット 0031-02-23 15.49.16.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e61934e4-c1df-f0cc-9b6e-6b8663fa6f1f.png)

ADのユーザー名の"uehara"でログインできてる

![スクリーンショット 0031-02-23 16.19.41.png](https://qiita-image-store.s3.amazonaws.com/0/27932/53e1e3a7-98c3-3afe-b61c-932ad68b4ed2.png)

メアドも入っている

![スクリーンショット 0031-02-23 16.19.57.png](https://qiita-image-store.s3.amazonaws.com/0/27932/ae24a9f8-6e85-977d-31c5-d4664f850783.png)

## ログ確認

CloudTrailにて確認。"イベントの表示"をクリックすれば詳細が確認できます。長期間分を保存が必要ならCloudTrail=>S3へ保存の設定ができます。イベント名がAuthenticateで認証成功、Federateで別のAWSアカウントにログインができたことが確認できるが、現状ログイン失敗などのログが出てこないようで、IdP側でのログも必要と思われる

![スクリーンショット 0031-02-22 11.28.17.png](https://qiita-image-store.s3.amazonaws.com/0/27932/c9cdd7da-4441-6b5e-c40f-efbd849e33d2.png)

## 2 Step認証

ポータルからパスワード認証後にユーザーのメアドに認証コードが送られ、そのコードで認証を行う設定

ADのユーザーにメアド追加

![スクリーンショット 0031-02-22 13.49.51.png](https://qiita-image-store.s3.amazonaws.com/0/27932/b7078f84-32b4-7c6c-943d-cfe1ffb769d1.png)

AWS SSOの画面の"設定"をクリックし、[設定]をクリック

<img width="1091" alt="スクリーンショット 0031-02-22 13.50.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/07638ce9-6546-1d78-480b-a5cb1ae3af38.png">

"コンテキスト対応"にチェックし、[変更の保存]をクリックし、次のポップアップで[確認]をクリック

<img width="942" alt="スクリーンショット 0031-02-22 13.50.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/b51c98c0-0926-f68e-f11c-b97180415050.png">

ポータルにID/Passwordでサインイン

![スクリーンショット 0031-02-22 13.57.17.png](https://qiita-image-store.s3.amazonaws.com/0/27932/fcc8a73f-354d-7289-ab8f-a6f69df904b2.png)

メールでVerification Codeが送られてくる

<img width="861" alt="スクリーンショット 0031-02-22 13.51.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/82354e67-10aa-a085-dfb0-ca5136bc8f7c.png">

Verification Codeを入れサインイン

![スクリーンショット 0031-02-22 13.51.55.png](https://qiita-image-store.s3.amazonaws.com/0/27932/760a3f3d-6675-2418-74c8-fa43d5a11bee.png)

# 参考資料

AWS SSOの使い方の公式ブログ
https://aws.amazon.com/jp/blogs/news/introducing-aws-single-sign-on/
AWS Summit Tokyo 2018の資料でP47あたりからAWS SSO
https://d1.awsstatic.com/events/jp/2018/summit/tokyo/aws/40.pdf
SSOのログ関連
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/logging-using-cloudtrail.html