🏢

AWS OrganizationsのOU(組織単位)と適用されるSCPをビジュアル化する

2024/04/21に公開

この記事で説明しないこと

  • AWS OrganizationsやSCPとは何か
  • それぞれの設定方法など

はじめに

AWS Organizationsは複数のAWSアカウントを管理するにあたって有用です。OU(組織単位)を使うことでAWSアカウントを階層構造で管理することができ、SCP(セキュリティコントロールポリシー)を用いれば権限の制御も可能です。
今回、OU階層構造上でSCPがどのように適用されているかを把握できるツールを作りました。
https://github.com/zaki3mymy/aws-tree-organizations

ツールについて

ツールを使うことで、AWSアカウントの階層構造はMermaidのflowchartとしてMarkdownに埋め込める形で出力されます。こんな感じに。

GitHubリポジトリのREADMEに使い方は書いていますが、ここではツールのビルドから実行までを画像付きで説明します。

ビルド

ツールはPythonで実装しています。パッケージ管理ツールはRyeを使っているのでrye buildでビルドします。

./distディレクトリにビルドしたパッケージが出力されます。

インストール

今回はCloudShell上にインストールしてみます。CloudShellには標準でPythonがインストールされているので、ビルドしたパッケージをアップロードしたらpip installでインストールできます。

実行

最後に実行してみます。aws-tree-orgsというコマンドを打ちます。

Markdownファイル用の文字列が出力されました(モザイク部分はAWSアカウントIDです)。

試しにVSCodeでMarkdownのプレビューをしてみると、

図が表示されてますね!(おもんない例だな)
図の説明をすると、円筒がOU(組織単位)で、四角形がAWSアカウントを表しています(アカウント名+アカウントID)。矢印上にある文字はそのOU(またはAWSアカウント)に適用されているSCPを表していて、今はFullAWSAccessしかないですね。SCPを増やせば改行されて表示されます。このあたりはGitHubリポジトリのREADMEを見てもらえばイメージが付きやすいと思います。

おわりに

元々の動機としては現状の階層構造にSCPを加えて一望することでした。なのでとりあえずはこれで良いかなと思っています。
今回の例はとても簡単でしたが、実際に運用されているものはもっとOUが複雑だしSCPも多いと思います。なので実際に運用に耐えうるかは正直わかりません。

出力結果としてMermaidを選んだのは、画像ファイルを出力するの大変そう~と思ったからです。Graphvizだと別途ツール入れないといけない(Pythonで完結しない)ので。本来のMermaidの使い方ではない(flowchartではない)のはすまんやでという気持ちはあります。

Discussion