注意点
- AWS SSOを作成するAWSアカウントはAWS Organizationの親でないといけない
- 今の所バージニアリージョンのみ
全体の構成図(イメージ)
AWSのブログからの抜粋ですが、今回はIdP(Identity Provider)をAWS SSO、SP(ServiceProvider)をAWSやWordpressとして試します
MSAD(Microsoft AD)作成
事前VPC作成
MSADを起動する任意のVPCとサブネットを作成しておく
MSADをマネコンから作成
AWSにログインし、リージョンをバージニアにし、サービスから"DirectoryService"をクリックし、
以下の画面の左メニューの"ディレクトリ"をクリックし、[ディレクトリのセットアップ]をクリック

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

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

VPCを任意のものを選び、[次へ]をクリックし、次の画面で[作成]をクリック
必要であれば事前にVPCを作成しておく
作成には20-30分かかる
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にユーザー追加する
※ AWS公式のMSADへのユーザー追加手順
AWS SSO 作成
マネコンのサービスから"AWS SSO"をクリックし、"ディレクトリの管理"をクリック

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

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

複数AWSマネコンへSSOする設定
AWS SSOの"ダッシュボード"に戻り"AWSアカウントへのSSOアクセスの管理"をクリック
ログイン対象のAWSアカウントを選択。今回は2つ
※AWS Organizationの子アカウントにしておく必要がある
ADのユーザーを検索してチェックを入れる。今回はuehara

[新しいアクセス権限セットを作成する]をクリック
"既存の職務機能ポリシーを使用"にチェックを入れ、"AdministratorAccess"を選択し、[作成]をクリック

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

AWSアカウントがセットされたことを確認
ユーザーポータルにアクセスしログイン確認
ログイン後に対象のAWSアカウントの"Management console"をクリック
ログイン完了
カスタムSAMLアプリとAWS SSO連携
今回はWordpressとAWS SSOを連携させる
WordpressをEC2にインストール
以下の手順でインストールを実施
Wordpressに管理者ログインし、左側メニューの"プラグイン"->"新規追加"をクリックし、検索窓で"saml"を入力し検索、"OneLogin SAML SSO"の[今すぐインストール]をクリックしOneLogin SAML SSOプラグインをインストールする
AWS SSO設定
AWS SSOの画面で、左側メニューの"アプリケーション"をクリックし、[新規アプリケーションの追加]をクリック
"カスタム 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
"割り当て済みユーザー"タブをクリックし、[ユーザー割り当て]をクリック
"ユーザー"をクリックし、"uehara"を入力し[接続されたディレクトリを検索]をクリックし、"uehara"にチェックを入れ、[ユーザーの割り当て]をクリック
Wordpress saml設定
左側メニューの"設定"->"SSO/SAML Settings"をクリック
必要箇所を入れ、[保存]をクリック
- 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のメタデータをダウンロード
AWS SSOでの追加設定
SSOの画面で"アプリケーション"->[設定の編集]をクリック
"メタデータファイルがある場合は、代わりにそれを今すぐアップロードできます"のリンクをクリックし、先程ダウロードしたXMLファイルを指定し、[変更の保存]をクリック
"属性マッピング"タブをクリックし、以下のマッピングを保存する
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
WordpressからSSO確認
Wordpressの画面から"SAML Login"をクリック
AWS SSOポータルにリダイレクトする。ポータルでログインする
ADのユーザー名の"uehara"でログインできてる
メアドも入っている
ログ確認
CloudTrailにて確認。"イベントの表示"をクリックすれば詳細が確認できます。長期間分を保存が必要ならCloudTrail=>S3へ保存の設定ができます。イベント名がAuthenticateで認証成功、Federateで別のAWSアカウントにログインができたことが確認できるが、現状ログイン失敗などのログが出てこないようで、IdP側でのログも必要と思われる
2 Step認証
ポータルからパスワード認証後にユーザーのメアドに認証コードが送られ、そのコードで認証を行う設定
ADのユーザーにメアド追加
AWS SSOの画面の"設定"をクリックし、[設定]をクリック

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

ポータルにID/Passwordでサインイン
メールでVerification Codeが送られてくる

Verification Codeを入れサインイン
参考資料
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