[Tips] AWS Control Towerのコントロールが関連付けされたOUを簡単に削除する方法
あしざわです。
皆さんは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公式ドキュメントをご覧ください。
主題となる事象の紹介
Control Towerの検出コントロールが関連付けされたOUを準備します。
このOUをControl Towerのマネジメントコンソールから削除しようとすると...
以下のコントロールを無効にしてください、というメッセージが出ますが気にせず進めます。
OU を削除するには、この OU で有効になっているすべてのオプションコントロールを無効にする必要があります。
結果、このようにAPIエラーとなり削除に失敗します。
AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.
エラーを回避するために、事前に検出コントロールの関連付けを解除します。
再度Control TowerのマネジメントコンソールからOUを削除すると、APIエラーにならず成功します。
回避策
数個のOUを削除したい通常の例であれば問題ないですが、大量のOUを削除することになった際にOUに設定した検出コントロールを1つずつ削除していく作業をあまりやりたくないなと思いました。
直近は困っていないですが、いつか大量のOUを削除したくなったときにこのエラーを回避する策を知っておきたいと思い、調べてみました。
調査の過程は割愛しますが、結論から言うと OrganizationsのマネジメントコンソールもしくはAWS CLI(API)からOUを削除すればエラーを回避できる ということがわかりました。
以降、回避策を紹介します。
※検証の前提として、再度Control Towerの検出コントロールが関連付けされたOUを準備しておきます。
Organizationsのマネジメントコンソールへ移動し、該当のOUを削除します。
すると、APIエラーとならず削除が完了します。
削除したOUはControl Towerで管理しているリソースではないため、Control Towerのドリフト検出も発生しません。
主題の検証は以上です。
(おまけ)他のコントロールでの検証
検出コントロールが関連付けされたOUの例で発見した事象でしたが、他コントロールでも同様なのかを念のため確認してみました。
結果、予防コントロール・プロアクティブコントロールのどちらが関連付けされていても、検出コントロールと同様でした。
- 予防 or プロアクティブコントロールが関連付けされているOUは、Control Towerコンソールからは削除できない
- 予防 or プロアクティブコントロールが関連付けされているOUは、Orgnaizationsコンソールから削除できる
検出コントロールとほぼ変わらないのでトグルに閉じましたが、予防コントロール・プロアクティブコントロールの検証例が気になる方は以下をご覧ください。
予防コントロールでの検証
予防コントロールが関連付けされたOUを準備します。
その状態でOUを削除しようとすると...
検出コントロールと同様にエラーとなります。
AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.
Organizationsのコンソールから削除しようとすると...
エラーにならず削除できました。
組織単位「Attach_Preventive_Control_OU」が正常に削除されました。
プロアクティブコントロールでの検証
プロアクティブコントロールが関連付けされたOUを準備します。
その状態でOUを削除しようとすると...
検出コントロールと同様にエラーとなります。
AWS Control Tower cannot perform a DisableBaseline operation on a target OU with enabled optional controls.
Organizationsのコンソールから削除しようとすると...
エラーにならず削除できました。
組織単位「Attach_Proactive_Control_OU」が正常に削除されました。
最後に
今回はAWS Control Towerのコントロールが関連付けされたOU(組織単位)を削除するときに役立つTipsを紹介しました。
この記事が誰かの役に立てば幸いです。
以上です。