AWS OrganizationsのOU(組織単位)と適用されるSCPをビジュアル化する
この記事で説明しないこと
- AWS OrganizationsやSCPとは何か
- それぞれの設定方法など
はじめに
AWS Organizationsは複数のAWSアカウントを管理するにあたって有用です。OU(組織単位)を使うことでAWSアカウントを階層構造で管理することができ、SCP(セキュリティコントロールポリシー)を用いれば権限の制御も可能です。
今回、OU階層構造上でSCPがどのように適用されているかを把握できるツールを作りました。
ツールについて
ツールを使うことで、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