AWS Control Tower Guide (ハンズオン) をやってみて気が付いたことを整理してみた

# はじめに

複数の AWS アカウントを管理するための Control Tower 機能があります。管理する AWS アカウントに対して予防的ガードレールを適用してガバナンスを利かせたり、子 AWS アカウントを生成する機能を使って、本番環境に影響を及ぼさない形で検証をすすめるなど、メリットがあります。

Control Tower の細かい部分や、運用が楽になる方法がよくわかってなかったこともあり、AWS が公式で出している英語のハンズオンをやってみました。
https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US

この記事では、上記ハンズオンを実施してみて、個人的に知らなったポイントを整理します。細かい Control Tower の操作手順などは、上記の URL を参考にしてみてください。

ハンズオンの章ごとに整理をしていきます。



# Landing Zone Set Up

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/prerequisites/deploying

- 作成したばかりの AWS アカウントでは、Control Tower の Landing Zone の作成に失敗することがある。その場合は、無償枠に収まる t2.micro の EC2 インスタンスを 15 分ほど起動すると、成功となることがある。
  - 以下のエラーとなった場合は、この対処方法が該当する可能性が高い
![image-20230102140053470.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0b337103-0206-3b38-af92-300438abb4a8.png)
- ホームリージョンは一度選択したら変更できない。ホームリージョンを選択する際の考慮点は次の通り
  - IAM Identity Center が、ホームリージョンで展開される。
  - Log Archive アカウントに蓄積される CloudTrail などのログは、S3 Bucket や CloudWatch Logs に蓄積される。このときの蓄積されるリージョンが、ホームリージョンで選択したものになる。ログの保存場所が国内にするコンプライアンスがある場合は、ホームリージョンを日本に選択する。
- Region Deny Setting を有効にすると、利用しないリージョンの操作を Control Tower  側で一律禁止にできる。
  - 2023 年 1 月現在、Osaka Region を許可 (Governed) にすることができない。そのため、Region Deny Setting を有効にすると、Osaka Region が使えなくなる。



# Landing Zone を有効化にした直後の OU 構成

以下に簡単な絵で整理する

- Log Archive アカウント : CloudTrail や Config といったログ情報などをストアするための AWS アカウント
- Audit アカウント : セキュリティチーム用の監査用の役割のアカウント。デフォルトでは、Config の Aggregator が設定されていて、全 AWS アカウントの評価結果を確認できる。Security Hub や GuardDuty といった追加のセキュリティサービスの一元管理を、Audit に任せると役割に合いそう。

![image-20230102203853925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e6abcd90-93f9-df51-8476-0d25d52358eb.png)



# OU Management

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/introduction/manage-ou

- Control Tower の管理外で作成されていた Organizations の OU を、Control Tower に登録が出来る。
![image-20230102150937111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3935eac4-0792-e45e-ad9a-ff31aa728351.png)
  - 実際に登録をする際に、Control Tower の裏側で事前チェックが行われる。事前チェックに失敗した場合は、登録を中断し、修正するべき項目が表示される
  - 登録に 2 時間くらいかかる。この登録処理をしている最中に、他の Control Tower の操作は行えないため注意。
![image-20230102151248467.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8a942476-db93-e47a-324c-7108e27fcf01.png)



# New AWS Account

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/introduction/account-factory/delegation

新しい AWS アカウントを作成する権限を、他のユーザーに与えることが可能。これにより、管理者がボトルネックになることを緩和できる。



# Applying Controls

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/introduction/apply-controls#enable-an-elective-control

ガードレールを設定したときに、管理している 全 AWS アカウント上違反しているリソースを一元的に可視化可能。管理アカウントの Dashboard に表示される。

![image-20230102152343657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/135b8dd9-6919-4dfa-3da2-40781a66c59f.png)



# Moving Accounts

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/introduction/moving-accounts

OU 間の AWS アカウントの移動が可能



# 既存の AWS アカウントの登録

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/enrolling-existing/debugging

既存の AWS アカウントを Control Tower 配下で管理するときに、既に AWS Config を利用している場合は、エラーになる可能性がある。一度 AWS CLI で Config を無効化する方法が紹介されている。(マネージメントコンソールの無効化では、不十分で、AWS CLI で無効化が必要らしい)



# Identity Provider と連携

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/authentication-authorization

AWS IAM Identity Center と、Azure AD, Google WorkSpace, Okta などの IdP 間で連携する方法が紹介されている。会社全体の IdP が有るなら、基本的にはそれと連携させた方が負担が軽くなる。



# Customizations for Control Tower (CfCT)

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/customization/cfct

https://docs.aws.amazon.com/controltower/latest/userguide/cfct-overview.html

https://blog.serverworks.co.jp/customize-for-control-tower



Control Tower で作成する、子 AWS アカウントに対して、自動的なカスタマイズを提供するソリューションがある。Customizations for Control Tower (CfCT) と呼ばれている。

CfCT は、いくつかの AWS サービスで構成されているソリューションになっており、CloudFormation のテンプレートが AWS から提供されているため、簡単にデプロイ可能。CfCT をデプロイすると、次の構成図のシステムが出来上がる。

![image-20230102185220496.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3a16820d-6cdd-0a94-44d3-6aa5064864ac.png)



できることをざっくり記載。

- AWS CodeCommit (や S3?) で CfCT 用の manifest ファイルを管理する
- manifest ファイルには、OU 単位で有効にする SCP だったり、カスタマイズをするための CloudFormation  Template を指定できる
- 子 AWS Account が新たに作成されたタイミングで、その OU に割り当てられている SCP や、CloudFormation の StackSet が実行される。

例えば、全 AWS アカウントで EC2 を起動するなど、特定の処理を自動的に実行させることができる。



manifest ファイルは、こんなかんじの yaml ファイル

```yaml
---
# Home region for CodePipeline, StepFunctions, Lambda, SSM, StackSets
region: us-east-1  # Control Tower Home Region
version: 2021-03-15

resources:
  # ControlTower Custom SCPs - Additional Preventive Guardrails
  - name: test-preventive-guardrails
    description: Prevent deleting or disabling resources in member accounts
    resource_file: s3://marketplace-sa-resources-ct-us-east-1/ctlabs/preventive-guardrails.json
    deploy_method: scp
    # Apply to the following OU(s)
    deployment_targets:
      organizational_units:
        # New Essential OU names since ControlTower v2.7 April 16.
        # Observe the names of your existing OUs and comment out or uncomment below to match yours.
        - Security # Formerly Core
        - Sandbox # Formerly Custom
        #- Core
        #- Custom

  # ControlTower Custom CFN Resources - Create Additional IAM Role
  - name: create-iam-role
    resource_file: s3://marketplace-sa-resources-ct-us-east-1/ctlabs/describe-regions-iam-role.template
    deploy_method: stack_set
    deployment_targets:
      organizational_units:
        # New Essential OU names since ControlTower v2.7 April 16.
        # Observe the names of your existing OUs and comment out or uncomment these to match yours.
        - Security # Formerly Core
        - Sandbox # Formerly Custom
        #- Core
        #- Custom
    regions:
      - us-east-1

  # ControlTower Config Rule - Additional Detective Guardrails
  - name: rotate-access-keys-guardrail
    resource_file: s3://marketplace-sa-resources-ct-us-east-1/ctlabs/access_keys_rotated.template
    parameters:
      - parameter_key: maxAccessKeyAge
        parameter_value: '24'
    deploy_method: stack_set
    deployment_targets:
      organizational_units:
        # New Essential OU names since ControlTower v2.7 April 16.
        # Observe the names of your existing OUs and comment out or uncomment these to match yours.
        - Security # Formerly Core
        - Sandbox # Formerly Custom
        #- Core
        #- Custom
    regions:
      - us-east-1
```



# Account Factory for Terraform (AFT)

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/customization/aft

Terraform で子供の AWS アカウントをカスタマイズする AFT という機能が紹介されている。Terraform を使ったカスタマイズらしい。



# Personal Health Dashboard の一元管理

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/extending/operations/health

Control Tower の親アカウントで、**Enable organizational View ** の 1 ボタンを押すだけで、子 AWS アカウントの情報を一元管理できる。



# Quota request template

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/extending/operations/servicequotas

新しく作成する子 AWS アカウントで、Service Quota の上限緩和を自動的に行う Quota request template 機能がある。

簡単に画像を貼る。

![image-20230102192756497.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/deb209f6-5ad4-c511-7aff-5863c21e7ed7.png)



Add quota

![image-20230102192909465.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/7b024e2e-81c2-a272-e9cb-98078aa21652.png)



Add

![image-20230102192942039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b80bb044-cc69-909f-25ce-0b0cac83c8c7.png)



追加された

![image-20230102193003044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e269a5f6-2fd7-2662-5e28-c212f1047f76.png)



この設定で完了。Control Tower で新しい AWS アカウントを作成したら、自動的に Service Quota の上限緩和を申請してくれる。



# GuardDuty の一元管理

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/extending/security/guardduty

Organizations 内の特定の AWS アカウントを指定して、GuardDuty の管理者として委譲することが出来る。管理者に指定された AWS アカウントは、指定されたリージョンで GuardDuty が自動的に有効になり、そのリージョン内の Organizations 内のすべてのアカウントに対して GuardDuty を有効にして管理する権限が付与されます。

Control Tower 的には、Audit アカウントに委譲するのが基本的な選択肢になりそう。

Note : この設定は、リージョン単位で 全 AWS アカウントに対して自動的に有効にする設定となる。複数のリージョンを対象にしたいときは、リージョンごとに設定を入れないといけない。



この機能でできることは、ざっくり以下の通り

- 既存の AWS アカウントすべてに対して、GuardDuty の有効化の操作が出来る
- 新しく作成される AWS アカウントに対して、自動的に GuardDuty を有効化する
- Organizations 配下の AWS アカウントで検出した Findings を、一元管理して表示する



簡単に設定手順を紹介する。

## Management Account 側

GuardDuty の Setting のページで、GuardDuty を一元管理するための Audit アカウントの ID を指定する。

![image-20230102194945584.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/39e837d0-6c02-f846-ecc5-534be5d7e952.png)



## Audit Account 側

GuardDuty の Accounts のページに、Organizations で管理している全ての AWS アカウントが表示されている。

全ての AWS アカウントで GuardDuty を有効化するために、Enable を押す。

![image-20230102200638705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/962e1edf-8bbd-5860-ad94-cbfa9446770b.png)



Enable

![image-20230102200732612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8ef0428b-84f4-cf8f-8bb0-cba1dba5cd35.png)



子 AWS アカウントで、GuardDuty 有効化の処理が走っている。

更に、Auto-enable をクリックして、今後新たに作成される AWS アカウントでも、自動的に GuardDuty を有効化にさせる。

![image-20230102200951720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/de6960f0-aece-983a-1366-881058ba0c0a.png)



Update Settings

![image-20230102201048574.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/7c03488a-a119-7a36-892e-c055d73c65ee.png)



今後何かしらの脅威を検出したら、Audit アカウント側の Findings に、全 AWS アカウントのものが表示される。

![image-20230102201335603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/c1a1a37c-b38f-1a50-006d-23d89328eeec.png)



# Security Hub の一元管理

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/extending/security/securityhub

Security Hub の Findings を、特定の AWS アカウントで一元管理させることが可能

- 既存の AWS アカウントに対して、Security Hub を有効化する
- 新しい AWS アカウントに対して、自動的に Security Hub を有効化する
- Organizations 配下の AWS アカウントで検出した Findings を、一元管理して表示する
- Security Standard にある、セキュリティスコアを付けてくれる機能は、子 AWS アカウントの分は表示されないので、それぞれ 子 AWS アカウントにログインする必要がある。



簡単に設定手順を紹介する。

## Management Account 側

SecurituHub の Settings で、委譲する AWS アカウントの ID を指定。ここでは、Audit を指定する。

![image-20230102202129282.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/049bee26-18e7-2727-2d67-82018bfacaab.png)



## Audit Account 側

Organizations 配下のすべての AWS アカウントが表示されている。Add member をして、管理する対象を選択する。

![image-20230102202513154.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/851dd056-91ff-c53f-16a3-4aaf83c14b07.png)


Add member

![image-20230102202522050.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/17827d94-cd1c-9068-4d21-fd5eb465cfd5.png)



Auto Enable

![image-20230102202551737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/fc87b40c-0c59-3184-db25-6ec567851195.png)



ON

![image-20230102202601160.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/9868facc-d856-3e1d-face-385874b674bb.png)



Enable に変わった

![image-20230102203005673.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/cb242869-20cc-149c-a058-c1781c7812a0.png)



Findings に、子 AWS アカウントが全て表示される

![image-20230102203054597.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/38ba1eb1-693d-adb4-08ce-49b14bf4559d.png)



Security Standard の方は、子 AWS アカウントの分は表示されない

![image-20230102203128201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/72fbed85-e588-f685-8a7b-41e9b96de749.png)



# IAM Access Analyzer の一元管理

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US/extending/security/iamaccessanalyzer





# 参考 URL

https://catalog.us-east-1.prod.workshops.aws/workshops/122b644d-03d6-4e2f-80dc-854c4a0f5bca/en-US

https://blog.serverworks.co.jp/customize-for-control-tower