(無料枠で可能)AWS上にADサーバを構成してAWSアカウントにSSOする


AWSの試験勉強でよく”Active Directory"(通称AD)がよく出てくるけど、実際触ったことがない、、、ということで
AWS無料枠の範囲内で、Active Direcrotyを構成し、SSOするところまで実施しました。

## 前提
* 2023/4/1時点
* 東京リージョン (ap-northeast-1)
# 構成
こんな感じ
![AD_Connector_アーキテクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/05fb3583-5e4b-0edb-1dfd-1fbaa1ed31bb.png)




**注意点は以下**
・AD Connector, AD Server はセキュリティ観点からプライベートサブネットに置くべきです。今回はお試しということもありパブリックサブネットに配置しました。


> 参考: [リモートデスクトップは危険って本当！？利用時の注意点と対策](https://eset-info.canon-its.jp/malware_info/special/detail/220602.html)



踏み台サーバ経由でRDP接続する方法


> 参考: [踏み台サーバ経由でリモートデスクトップ接続してみた](https://dev.classmethod.jp/articles/rdp-via-bastion-server/)



・AD Connectorは初めての利用から30日間無料です。それを超えると料金が発生しますので、注意してください。


・EC2の無料期間に関しては月750時間の無料枠を利用しています。それを超える利用は料金が発生しますので注意ください。EBSについても同様です。


・その他設定によっては料金が発生しますのでご注意ください。あくまで自己責任でお願いします。



### EC2インスタンス
OS: Windows Server-2022
インスタンスタイプ: t2.micro
キーペア: 作成（RDP接続の際に必要となります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/0ba99fbe-6a4f-e45b-c3bc-60132a343729.png)

## セキュリティグループ
EC2インスタンスのセキュリティグループに関して、最低限こちらのインバウンドルールの設定が必要。
今回はソースを0.0.0.0/0としています。
インターネットからRDPで接続するほか、AD Connectorからサーバへ接続するために必要なポートとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/267c5459-4721-ff55-dc7b-fe7bf9f21f21.png)
その他、ADサーバの設定によっては別ポート接続のインバウンド許可が必要となります。


参考: [AD Connector の前提条件](https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/prereq_connector.html)
> サブネット用のポート
AD Connector で既存の Active Directory のドメインコントローラーにディレクトリリクエストをリダイレクトするには、既存のネットワークのファイアウォールで、Amazon VPC の両方のサブネットの CIDR に対して次のポートを開く必要があります。
TCP/UDP 53 - DNS
TCP/UDP 88 - Kerberos 認証
TCP/UDP 389 - LDAP
これらは、AD Connector をディレクトリに接続する前に必要な最小限のポートです。固有の設定によっては、追加ポートが開かれていることが必要です。



## 手順
### 1. Active Directory の中のAD_DNS機能の有効化、ドメインコントローラ化の実施
以下サイトを参考に実施しました。とても分かりやすいので必見。
> [EC2をADサーバーとして作成してみた](https://zenn.dev/mn87/articles/cdade63da9f60a)

今回ドメインは"test.com"としました。

### 2. AD Connector用ユーザを作成
AD内に、AD Connectorがログインして利用できるユーザを作成します。
AD Connectorは、このユーザを利用して、ドメイン内の情報（ユーザとか、グループとか）を読み取ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/23b80eec-9631-843f-9683-6aaf9d0ea9c8.png)


今回は "Connectors"グループの"connector-admin@test.com"のユーザを追加しました。
この情報は後程利用します。



### 3. 作成したユーザに読み取り権限を付与

先ほどAD Connectorはこのユーザを利用してドメイン内の情報を読み取るといいました。つまるところ、このユーザには読み取り権限が付与されている必要があります。その権限も付与します。
権限の付与は以下サイトに従って実施しました。


> [Active Directory Connector(AD Connector)を試してみた](https://dev.classmethod.jp/articles/try-active-directory-connector/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/3d3e3a3b-58fd-5690-59e9-1f4dfe8860f7.png)

[制御の委任]→Connectorsグループに「コンピュータオブジェクトの読み取り権限」を付与


### AD Connector 設定

#### 1.Directory ServiceからAD Connectorを選択する


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/5652235f-fc4f-a7c3-7daf-55a30984ed4d.png)

#### 2.VPC,サブネットを選択する


AD ConnectorはVPC内に配置します。そしてデフォルトで複数サブネットに分散される仕様のため、複数サブネットを指定します。

今回はパブリックサブネットに配置してますが、プライベートサブネットに配置するのがセキュリティ的には正しいです。（今回のアーキテクチャではAD Connectorがインターネットに接続することはありません）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/76b5e88d-6d54-a71b-a3fa-9e9cfae626bc.png)

#### 3.ドメイン情報を指定する


Active Directory 内で設定したDNS名を指定します。
NetBIOS名は不要で構いません。
DNS IPアドレスは**ADサーバのプライベートIP**を指定します。（パブリックIPではない点に注意）



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/0320cfca-d333-6b55-806c-81264bf4fe1a.png)


サービスアカウントのユーザ名、パスワードは「2. ADコネクタ用ユーザを作成」で指定したユーザ名、パスワードを指定します。

すると以下のようにディレクトリが作成されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/d47eb5cb-8881-f171-0346-e82ed432c034.png)

### 4. IAM Identity ManagerでSSOを設定する
IAM　Identity Manager（旧 AWS SSO)はAWSマネージメントコンソールやサードパーティーサービスへのSSOログインを実現するサービスです。

#### 1. アイデンティティソースをAD Connectorにする

まずはこちらでアイデンティティソース（ユーザ、パスワードの情報元）をAD Connectorに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/0890998d-2881-b7f6-f69e-c2ab7789266a.png)


設定から、「アイデンティティソースを変更」を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/6c3c493b-5752-c683-518c-cf8d5ab69008.png)


Active Directory を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/e6c637e1-a42c-4fd1-e095-b2b10e622040.png)



設定したディレクトリをプルダウンで選択します。

#### 2. 同期の範囲を設定する
Active Directory のどのユーザやグループをSSO設定するか、IAM Identity Managerと連携して設定する範囲を指定します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/c8f23664-6f5c-f38e-41ba-72c73af587ec.png)

同期の管理を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/7d0cf2e5-a759-b20f-19eb-152be787b0b4.png)


ユーザとグループの追加を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/000d2c03-1e9d-bab1-a51e-2156b326d59c.png)


赤枠のところに、ADで設定したユーザ(赤線）を入力し検索すると出てくるので、追加します。
すると、以下のように、「ユーザ」または「グループ」のタブ内に追加したユーザ、またはグループが追加されていることが確認できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/2e985bcd-713d-1a79-ab4f-51dd3cbd0f7a.png)

#### 3. 許可セットの作成
許可セットというのはSSO認証し、AWSのマネージメントコンソールにログインした後にどのような権限を持たせるか（認可）です。
許可セットを作成し、ユーザに割り当てるようなイメージです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/60957c1c-0fe0-6038-75dd-416fdcfe7d8d.png)


「許可セット」タブから「許可セット作成」を選択
（デフォルトでAdministrator Accessが作られています。）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/17a7f931-8f0b-abc6-5c3f-7cb75d1b0f01.png)


事前定義の許可セットから、ポリシーを選択します。
今回は「ReadOnlyAccess」にします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/e9de8c04-130f-8b52-91ae-f39474c5d941.png)


セッション時間も設定できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/94d61f35-b7e9-28b9-34b3-094c0c48f5c7.png)


するとめでたく「ReadOnlyAccess」の許可ポリシーが作成できます。

#### 4. SSOするアカウントの設定をする


「AWSアカウント」タブを選択し、SSOログインしたいアカウントを選択します。
※AWS OrganizationOnが設定されている必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/3fde272b-b881-f2dd-fdf5-b209a1b9b381.png)


続いてユーザ、グループをアカウントに割り当てます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/b2d18661-2f8b-593c-162a-2a0bafef32c4.png)


割り当てたユーザに、SSOログイン後の許可を割り当てます。（許可ポリシー）
複数許可を与えることもできます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/34e17ad3-d209-4a8b-d6b9-1e4633c4f4e6.png)

### 5. ADユーザでログインし、AWSマネージメントコンソールにログインする

Identity Managerのダッシュボードに、AWSアクセスポータルのURLがあるので、こちらをクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/55e293a8-c4e9-e068-021a-30939bdbb308.png)



すると、以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/811e7512-15d5-efb2-e1d8-01051a51f4cf.png)



あとはこの画面にユーザ名とパスワードを入力して、ログインします。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/1e2f882c-f13d-8130-bae3-c0ba1a249a0e.png)


どの権限でログインするかを選択すると。。。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179263/a183b3ec-2072-b8f4-ac61-4b9503bd382b.png)


めでたくログインできました！！！

# 最後に
私はこの構成を作ってみて、認証周りの理解が大分進みました。
これは動画のほうがわかりやすいなぁと思いつつ。
動画だとアカウント情報とかを隠したりする編集が大変なんですよね。。