Control Tower Landing ZoneとBaselineの関係

Landing Zoneを更新した時に、Landing Zoneアカウント（Management、Audit、Logアカウント）以外のメンバーアカウントは自動ではバージョン更新されません。

メンバーアカウントのバージョンを追従させようと思ったら、Baselineバージョンと言う概念を理解する必要があるのですが、それがややこしかったので、メモを共有します。

---

_Landing Zoneを更新しても、AuditやLogアカウント以外は更新されない_
![update01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472376/37931094-c944-3199-a609-2ec7d4a51a02.png)

_メンバーアカウントはこんな感じでドリフトしっぱなしになりがち_
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472376/1ca6d998-b909-db92-5225-4c3ad170a934.png)





## Baselineとは
Control TowerマネコンのアカウントやOUの詳細画面で表示されるコレです。4.0とかみたことない数字で出てきて、ハァ？ってなるやつです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472376/19bf58eb-409b-c064-614b-86fa3162ebf8.png)


ユーザーガイドには以下のように説明されています。

>AWS Control Tower のベースラインは、ターゲットに適用できるリソースと特定の設定のグループです。最も一般的なベースライン ターゲットは組織単位 (OU) です。たとえば、ターゲットとして選択された OU でベースラインを有効にして、その OU を AWS Control Tower に登録できます。
>
>ランディング ゾーンのセットアップ中、ベースライン ターゲットは共有アカウントまたはランディング ゾーン全体である可能性があります。特定のベースラインは、ランディング ゾーンの設定と構成に基づいて有効化および更新される場合があります。 AWS Control Tower は、ベースラインで指定された方法でリソースを作成し、ターゲットにデプロイします。
>
> User Guide [Types of baselines](https://docs.aws.amazon.com/controltower/latest/userguide/types-of-baselines.html)

読み解くとこんな感じかなと。

| 用語| 説明 |
|:-----------:|:----------------------------------------------|
| Landing zone<BR>（LZ）  | * Landing Zoneアカウント（マスター、Audit、Logging）の設定集合体 <BR>* Landing Zoneのバージョンが変わると、SCPやService Lined Role（SLR）が変わったりする <BR>* Landing ZoneのバージョンとBaselineバージョンは関係性がある（後述） |
|  Blueprint | * メンバーに配布されるリソースはBlueprintという単位で管理される<BR>* 同じBaselineバージョンのLZバージョンであれば、メンバーに配布されるBlueprint＝リソースは基本的に同じはず（欄外に注、確認方法不明） |
| Baseline<BR>（BL）  |* LZアカウントと、メンバーアカウントそれぞれに配布される設定集合体(=Blueprintのセット）<BR>* LZバージョンが変わっても、BLバージョンが変わらない限り変更は（ほとんど？）ないので、メンバーはBLバージョンだけを管理すればOK<BR>* LZアカウントとメンバーアカウントで異なるBLバージョンになっても問題ない。（少なくともLZアカウントが4.0、メンバーアカウントは3.0という組み合わせでも手元環境では問題なく動作している様子）|

:::note warn
注）Blueprintの詳しい情報は、ドキュメント探しても見つけられませんでした。同じBaselineバージョンのLanding Zone v3.2とv3.3のリリースノートを比較してみる限り、v3.3ではメンバーに影響のあるBlueprint更新はなかったように一応見えます。(https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-3） 
:::

なお、Landing ZoneバージョンとBaselineバージョンはいまのところこんな関係性です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472376/27dfe918-d3ad-77e2-6325-5536a30e8411.png)
（出典：https://docs.aws.amazon.com/controltower/latest/userguide/table-of-baselines.html ）

## バージョンアップの影響の整理

よくあるユースケースとして、メンバーアカウントの設定変更はできるだけやりたくないみたいなユースケースでは、以下のように整理できるかなと考えました。悩ましいですが。

* Landing Zoneバージョンを更新するとマンダトリーなSCPとかは更新される。（基本的にはマンダトリーなSCPは、コントロールタワーのリソースにしか影響しないので、メンバー影響を避けたい時でも更新してOK）
* Baselineバージョンが更新されなければ、メンバーアカウント上のリソースは更新されない。(だからLanding Zoneバージョンだけなら更新してもメンバー影響はほとんどない）
* マンダトリーなSCPやリソースでも影響を受けそうなもの、（たとえばControlTowerExecutionRoleとか）を日常利用してるケースではLanding Zoneバージョンアップの影響でメンバーが影響を受けるかもしれないので注意する。（そのような使い方は避けた方がいいわけですが・・・）




## Landing Zoneや組織関連のオペレーションによるBaselineバージョンへの影響

手元環境で試した感じでは、管理対象リージョンの追加やOU移動など、Landing Zone関連オペレーションでのメンバーのBaselineバージョンへの影響は以下のように挙動しました。この辺りは、今後変わるかもしれないので、参考程度に見てください。いずれにせよControl Towerを使うときは、検証用Organizationを別に用意しておいて事前検証するのがベスプラかなとの印象です。（2024/9/2時点）

| オペレーション | メンバーへの影響 |
|:-------------------------|:------------------------------------|
| 管理対象リージョンの変更  | メンバーのBaselineバージョンが最新でなければ最新化される（注）  |
| 旧いBaselineバージョンのOU間の移動  | 移動メンバーのBaselineバージョンの更新なし  |
| 新しいBaselineバージョンのOUへの移動  | 移動メンバーのBaselineバージョンが更新される  |
| ネスト親OUのBaselineバージョン更新  |  子OUや、子OU配下のアカウントのBaselineバージョンは更新なし |
| 直上OUのバージョン更新  | 子アカウントのBaselineバージョンが更新される  |

:::note warn
注）　[ユーザーガイド](https://docs.aws.amazon.com/controltower/latest/userguide/region-how.html#deploying-to-new-region)には、以下のような記載がありますが、手元の検証結果では、Landing Zone version 3.2（現在最新は3.3）にリージョン追加しても、LZバージョンはそのままだったので、Baselineバージョンが最新ならリージョン追加してもLZバージョンは変わらないのかなと理解。

> You are directed to the update landing zone workflow, because governing new Regions, or removing Regions from governance, requires you to update to the latest landing zone version.
:::

## まとめ　：　結局動かしてみないとわからない
長くなったのでまとめます。いちおう実機で動作確認した結果を書いていますが、勘違いや変更があるかもなので、やっぱり最終的には「プロダクション適用前に動作確認する」のがベストソリューションかなと思いました。

* Control Towerには、中央管理系のバージョンを管理するLanding Zoneバージョンと、メンバーへの配布リソースを管理するBaselineバージョンの2つのバージョン体系がある。
* 現状、Landing Zone v3.2とv3.3は、同じBaselineバージョン v4.0を使用している。
* メンバーアカウントで特段ニーズがないなら、Landing Zoneだけ3.3で、Baselineは3.0（一個前のやつ）でも使うことはできる。