[Tips] AWS Control Towerのコントロールが関連付けされたOUを簡単に削除する方法

[Tips] AWS Control Towerのコントロールが関連付けされたOUを簡単に削除する方法

Clock Icon2024.09.30

あしざわです。

皆さんはAWS Control Towerのコントロール、使っていますか?

AWS Control Tower のリソースを整理するとき、OU(組織単位)を削除したくなることがしばしばあると思います。

その後OUを削除したとき、以下のようなエラーが出てOU削除に失敗した経験がある方もきっといるはずです。

AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.

これはControl Towerのコントロールが削除対象のOUに関連付けされていることで出るエラーです。

つまり、コントロールをOUからデタッチすればエラーを抑止できるのですが、コントロールをデタッチする手間が厄介ですよね。

そんな時に役に立つTipsを発見したので共有します。

全体まとめ

AWS Control Towerのコントロールが関連付けされたOU(組織単位)を削除するとき...

  • Control Towerのマネジメントコンソールから削除すると、APIエラーとなり削除できない
  • Orgnaizationsのマネジメントコンソールから削除した場合、APIエラーにならずそのまま削除できる

検出コントロール・予防コントロール・プロアクティブコントロールのいずれのコントロールが関連付けされていても同様の事象となった。

前提知識

AWS Control Towerには「コントロール」というAWS環境全体の継続的なガバナンスを提供する機能があります。

記事の執筆時点でコントロールは、予防的(Preventive)コントロール検出(Detective)コントロールプロアクティブ(Proactive)コントロールの3つあります。

それぞれの概要はこちらです。

  • 予防的(Preventive)コントロール
    • 指定したAPIアクションの発生を防止し、防止されたアクションはCloudTrailやConfigに記録される。
    • SCP(Service Control Policy)を利用して実装されます。
  • 検出(Detective)コントロール
    • 特定のAPIイベントが発生したときにそれを検出し、そのアクションを CloudTrailに記録する。
    • Configルールを利用して実装されます。
  • プロアクティブ(Proactive)コントロール
    • CloudFormationテンプレートがAWSアカウントにプロビジョニングされる前に、展開されるリソースがポリシーに準拠しているかチェック、準拠していない場合はプロビジョニングが中止される。
    • CloudFormationフックを利用して実装されます。

もっと詳しく知りたい方はこちらのAWS公式ドキュメントをご覧ください。

https://docs.aws.amazon.com/controltower/latest/userguide/how-control-tower-works.html#how-controls-work

主題となる事象の紹介

Control Towerの検出コントロールが関連付けされたOUを準備します。

CleanShot 2024-09-30 at 21.13.22.png

CleanShot 2024-09-30 at 21.13.45.png

このOUをControl Towerのマネジメントコンソールから削除しようとすると...

CleanShot 2024-09-30 at 21.21.20.png

以下のコントロールを無効にしてください、というメッセージが出ますが気にせず進めます。

OU を削除するには、この OU で有効になっているすべてのオプションコントロールを無効にする必要があります。

CleanShot 2024-09-30 at 21.22.36.png

結果、このようにAPIエラーとなり削除に失敗します。

AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.

CleanShot 2024-09-30 at 21.25.05.png

エラーを回避するために、事前に検出コントロールの関連付けを解除します。

CleanShot 2024-09-30 at 21.29.52.png

再度Control TowerのマネジメントコンソールからOUを削除すると、APIエラーにならず成功します。

CleanShot 2024-09-30 at 21.34.38.png

回避策

数個のOUを削除したい通常の例であれば問題ないですが、大量のOUを削除することになった際にOUに設定した検出コントロールを1つずつ削除していく作業をあまりやりたくないなと思いました。

直近は困っていないですが、いつか大量のOUを削除したくなったときにこのエラーを回避する策を知っておきたいと思い、調べてみました。

調査の過程は割愛しますが、結論から言うと OrganizationsのマネジメントコンソールもしくはAWS CLI(API)からOUを削除すればエラーを回避できる ということがわかりました。

以降、回避策を紹介します。

※検証の前提として、再度Control Towerの検出コントロールが関連付けされたOUを準備しておきます。

CleanShot 2024-09-30 at 21.40.38.png

Organizationsのマネジメントコンソールへ移動し、該当のOUを削除します。

CleanShot 2024-09-30 at 21.41.37.png

すると、APIエラーとならず削除が完了します。

CleanShot 2024-09-30 at 21.43.05.png

削除したOUはControl Towerで管理しているリソースではないため、Control Towerのドリフト検出も発生しません。

CleanShot 2024-09-30 at 21.45.14.png

主題の検証は以上です。

(おまけ)他のコントロールでの検証

検出コントロールが関連付けされたOUの例で発見した事象でしたが、他コントロールでも同様なのかを念のため確認してみました。

結果、予防コントロール・プロアクティブコントロールのどちらが関連付けされていても、検出コントロールと同様でした。

  • 予防 or プロアクティブコントロールが関連付けされているOUは、Control Towerコンソールからは削除できない
  • 予防 or プロアクティブコントロールが関連付けされているOUは、Orgnaizationsコンソールから削除できる

検出コントロールとほぼ変わらないのでトグルに閉じましたが、予防コントロール・プロアクティブコントロールの検証例が気になる方は以下をご覧ください。

予防コントロールでの検証

予防コントロールが関連付けされたOUを準備します。

CleanShot 2024-09-30 at 21.48.25.png

その状態でOUを削除しようとすると...

CleanShot 2024-09-30 at 21.49.22.png

検出コントロールと同様にエラーとなります。

AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.

Organizationsのコンソールから削除しようとすると...

CleanShot 2024-09-30 at 21.51.15.png

エラーにならず削除できました。

組織単位「Attach_Preventive_Control_OU」が正常に削除されました。

プロアクティブコントロールでの検証

プロアクティブコントロールが関連付けされたOUを準備します。

CleanShot 2024-09-30 at 21.55.14.png

その状態でOUを削除しようとすると...

CleanShot 2024-09-30 at 21.55.32.png

検出コントロールと同様にエラーとなります。

AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.

Organizationsのコンソールから削除しようとすると...

CleanShot 2024-09-30 at 21.56.33.png

エラーにならず削除できました。

組織単位「Attach_Proactive_Control_OU」が正常に削除されました。

最後に

今回はAWS Control Towerのコントロールが関連付けされたOU(組織単位)を削除するときに役立つTipsを紹介しました。

この記事が誰かの役に立てば幸いです。

以上です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.