AWS Control Tower を試してみた

## はじめに

DX技術本部のyu-yamaです。

ちょっと前(2021/04)ですが、AWS Control Tower が東京リージョンで利用可能になりました。

https://aws.amazon.com/jp/blogs/news/aws-control-tower-tokyo/

これまで マルチアカウント管理には AWS Organizations を使用して... 組織(OU)作成して... SCP でポリシー制限して... と頑張っていましたが、このサービスを使用すると 簡単にベストプラクティスに沿ったマルチアカウント管理環境を作成できることが出来るそうです。

との事で試してみました。

## 概念

はじめに AWS Control Tower を触るにあたり概念を押さえます

![2021-07-13-16-07-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/ad9a15d8-45df-62ce-fdba-302428eb8cf5.png)

### Landing Zone

AWS Control Tower は Landing Zone という AWS マルチアカウントを一元管理する環境を作成します。 Landing Zone は以下の機能を提供します。

-   AWS Organizations を使用してマルチアカウント環境を作成する
-   AWS Single Sign-On (SSO) のデフォルトのディレクトリを使用して ID を管理する
-   AWS SSO を使用してアカウントにフェデレーティッドアクセス
-   AWS IAM および AWS SSO を使用してクロスアカウントセキュリティ監査を有効化する
-   AWS CloudTrail のログや、Amazon S3 に保存される AWS Config のログを集中管理する

### Account Factory

新しいアカウントのプロビジョニングを自動化します。ネットワーク構成とリージョンを指定し、どの組織(OU)に所属するかを指定してアカウントを作成します。

### ガードレール

組織単位 (OU) でポリシーを適用したり違反を検出したりするために有効にできるガバナンスルールです。ガードレールには予防用および検出用のガードレールがあります。

-   予防ガードレール

    -   ポリシー違反につながるアクションが禁止される

-   検出ガードレール

    -   ポリシー違反につながるアクションが検出された場合、ダッシュボードを通じてアラートがあがる

## 事前準備

ランディングゾーンを作成するために以下が必要になります

-   管理用 AWS アカウント ※組織の管理アカウントである必要があります
-   新規 AWS アカウント用のメールアドレス 2 つ
    -   ログアーカイブ用
    -   監査用

## やってみる

ホームリージョンを選択します
![2021-07-08-14-29-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/ef915149-0cff-dbd2-d137-1f11b99dee7c.png)

ログアーカイブ用アカウントEメール、監査用アカウントEメールを入力して次へ
![2021-07-08-14-32-04r2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/780f7c53-a6d0-38ae-f309-f23649c80560.png)

ランディングゾーンの設定押下すると
ランディングの作成が開始します...

![2021-07-08-14-33-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/16b6220a-9d3f-1510-f410-dc3ed8728cbb.png)

管理用AWSアカウントのEメールを見てみましょう。

Control Tower 管理者の SSO ユーザーアカウントを有効にしてください メールが来ているので有効に
SSOポータルの URL も記載されています

![2021-07-08-14-36-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/c50270fb-447e-dbb7-8bdd-914d9e40cf16.png)

---

マネジメントコンソールに戻ります。
AWS Control Tower は以下を設定していますとのこと...

-   2 つの組織単位。1 つは共有アカウント用、もう 1 つはユーザーによってプロビジョニングされるアカウント用です。
-   3 個の共有アカウント。**ログアーカイブ**および**セキュリティ監査用の管理アカウント**と**独立アカウント**です。
-   事前設定されたグループとシングルサインオンアクセスを持つネイティブクラウドディレクトリ。
-   ポリシーを適用するための 20 つの予防ガードレール、および設定違反を検出するための 2 つの検出ガードレール。

![2021-07-08-14-40-27r2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/6edd5943-4315-a5d5-81ed-05ba30823b0f.png)

完了しました

![2021-07-08-14-55-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/59bd2404-0149-44ce-20f1-c167fc6b1ca7.png)

## 確認

Organization でみると

> 2 つの組織単位。1 つは共有アカウント用、もう 1 つはユーザーによってプロビジョニングされるアカウント用です。

-   共有アカウント用としての組織 **Security**
-   ユーザーによってプロビジョニングされるアカウント用の組織として  **Sandbox**

2 つの組織(OU)が作成されているのが確認できます。

> 3 個の共有アカウント。**ログアーカイブ**および**セキュリティ監査用**管理アカウントと**独立アカウント**です。

共有アカウント用組織 (**Security**)の配下に

-   ログアーカイブ用の **Log Archive**
    -   **すべてのアカウントからの API アクティビティとリソース設定のログのリポジトリとして使用**
    -   arn:aws:s3:::aws-controltower-logs-{アカウント ID}-ap-northeast-1
-   セキュリティ監査用の **Audit**
    -   **セキュリティおよびコンプライアンスチームがすべてのアカウントへの読み取りと書き込みアクセスを取得するための制限付きアカウント**

2 つのアカウントが作成されているのが確認できます。

![2021-07-08-15-05-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/454cc5e4-e010-f425-5a49-71447aeb2d9b.png)


## アカウント登録

Sandbox にアカウントを追加してみましょう

Account Factory -> アカウントの登録

![2021-07-08-16-05-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/78903878-3323-a5cb-f10a-d0f2209b3284.png)

アカウント E メール、表示名、SSO E メールを入力してアカウント登録

![2021-07-08-16-08-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/fea93928-c9bd-ffec-2d4a-1003af9cda0a.png)


## ガードレール動作確認

検出ガードレールの動作を確認してみます。

"EC2 インスタンスにアタッチされた EBS ボリュームの暗号化を有効にする" を Sandbox 組織(OU)で有効にします

OU でガードレールを有効にする
![2021-07-12-14-43-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/6e5e2ad2-4854-2ad0-5fc3-baa3f92f02aa.png)


OU でガードレールを有効にする
![2021-07-12-14-43-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/02121575-818f-e3d6-e898-0afd979b59b8.png)


有効化中になり...
![2021-07-12-14-44-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/388358fc-5bd5-9350-7e53-6c3230fcff94.png)


有効になりました
![2021-07-12-14-46-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/935bcdf8-bf73-2087-fd75-e5e1361a9302.png)


Sandbox 組織配下のアカウントにログインし、ガードレール違反(暗号化されていない EBS をアタッチ)をしてみます
![2021-07-12-15-13-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/9b1b0ff6-a78f-d5a3-ef0a-ca8c0f9cef19.png)


しばらく待って AWS Control Tower のダッシュボードを見ると...

検知されています!!
![2021-07-12-15-24-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/a05f1fc0-3ce2-00ed-b124-58bf81577a44.png)


## ログアーカイブ用アカウントを見てみます

SSO ポータルからマネジメントコンソールへ
![2021-07-13-16-24-07r2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/4de58fa2-762c-8e75-cb05-ecc1b754f171.png)

S3 バケットを見ると aws-controltower-logs バケットが作成されています
![2021-07-13-16-26-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/47569a7e-7599-8e36-0583-29dd1233e42b.png)


配下のアカウントごとの...
![2021-07-13-16-27-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/6b4ab88c-08f8-09e3-f12b-1ae5e106cc73.png)


CloudTrail と Config のログが集約されています
![2021-07-13-16-28-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/20342e3e-7fc7-8268-c650-e80eb8f903e6.png)


## 監査アカウントを見てみます

### AWS Config 集約結果

SSO ポータルからマネジメントコンソールへ
![2021-07-13-16-40-02r2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/a9a85485-f2cd-bf28-c5e9-4663cb0c2eb5.png)


アグリゲータが作成され、配下アカウントの AWS Config 結果が集約されています
![2021-07-13-16-41-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/6abaf7c7-9a25-ca6e-8fdd-2638c13edbcf.png)


### 読み取り権限での全てのアカウント参照確認

管理アカウントに戻り AWS SSO からユーザーを追加
![2021-07-13-16-45-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/309b776f-4172-41d2-ddf7-052296554d2a.png)


ユーザー詳細を設定
![2021-07-13-16-46-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/d2a7d56e-4185-14c0-5877-b852d7ef559f.png)


監査情報読み取り専用グループに所属
![2021-07-13-16-47-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/5902234e-ac93-a1a6-a766-6e852293c34e.png)


追加完了
![2021-07-13-16-48-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/fe225ef3-59bc-69c2-6a0b-036745ae36ed.png)


招待された監査情報読み取り専用ユーザーで SSO からログイン。全てのアカウントに対し、読み取り専用でログインできるユーザが作成できました
![2021-07-13-16-56-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/8a048584-7484-d40e-76c4-455546a2e1e3.png)

## SSO で設定できる AWS Control Tower によって用意された権限を見てみます

![2021-07-13-17-07-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/1efffeba-52fc-73e1-aa42-a4ee2ebeee66.png)


### アクセス許可セット

特定の AWS アカウントにアクセスするためのユーザーの有効なアクセス許可を決定するために AWS Single Sign-On が使用する管理者定義のポリシーの集合。

-   AWSServiceCatalogEndUserAccess - AWS Service Catalog で承認された製品を起動する権限を付与します。
-   AWSPowerUserAccess - AWS のサービスとリソースへのフルアクセスが付与されますが、ユーザーおよびグループの管理は許可されません。
-   AWSAdministratorAccess - AWS のサービスとリソースへのフルアクセスを付与します。
-   AWSServiceCatalogAdminFullAccess - AWS Service Catalog 製品とポートフォリオを管理する権限を付与します。
-   AWSReadOnlyAccess - すべての AWS サービスのリソースおよびメタデータを閲覧するためのアクセス許可を付与します。
-   AWSOrganizationsFullAccess - AWS Organizations へのフルアクセスを提供

### ユーザーグループ

組織内で特定のタスクを実行するユーザーを整理するための事前設定グループ。AWS Single Sign-On で直接ユーザーを追加してこれらのグループに割り当てることができます。

- 管理
  -   AWSControlTowerAdmins - すべての AWS Control Tower アカウントに対する管理者権限。
  -   AWSAccountFactory - AWS Service Catalog で新しいアカウントをプロビジョニングできるユーザー。
  -   AWSServiceCatalogAdmins - AWS Service Catalog でアカウントファクトリー製品へのアクセスを管理するユーザー。
- ログアーカイブ
  -   AWSLogArchiveAdmins - ログアーカイブアカウントに対するフルアクセスの管理者権限。
  -   AWSLogArchiveViewers - ログアーカイブアカウントに対する読み取り専用アクセス。
-   Security
  -   AWSSecurityAuditPowerUsers - セキュリティ監査のためのアカウントすべてに対するパワーユーザーアクセス。
  -   AWSSecurityAuditors - セキュリティ監査のためのアカウントすべてに対する読み取り専用アクセス。
  -   AWSAuditAccountAdmins - アカウントの監査に対するフルアクセスの管理者権限。

初めは用意されたユーザーグループに作成した SSO ユーザーを割り当てるやり方で検討し、細かい制御が必要になってきた際にアクセス許可セットの作成 → AWSアカウント内への割り当てを行えば良さげ。

## アクセスイメージ

### 管理者／ログアーカイブ確認者/監査者

適切なユーザーグループに所属させたSSOユーザーを作成し、 SSOポータル からログインして各 AWS アカウントに対して操作・確認を行う
![AWSControlTower_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/50ae5293-e032-fdd2-8b9d-873c4a1c4740.png)

## まとめ

かんたんに AWS マルチアカウント構成を作成することが出来ました。

ベストプラクティスに沿ったガードレールが多数用意されていて選択して適用できるのも良いですね。

AWS アカウントを多数管理していて消耗している方、後からでも Control Tower 配下に入れて制御することができるので検討してみてはいかがでしょうか。

## 参考リンク

https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html