AWS Organizationを使って本気でAWSアカウントを守る

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではAWS Organizationに関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

- AWS Organizationとは
- AWS Organizationの仕組み
- AWS Organizationの活用
- AWS Organizationのベストプラクティス

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- AWS Organizationがどういうサービスか説明できるようになりたい人
- AWS Organizationを採用するときのベストプラクティスを説明できるようになりたい人
- AWS Certified DevOps Engineer Professionalを目指している人

# AWS Organizationとは
AWS Organizationは、AWSアカウントを階層的に管理するサービスです。

![](https://storage.googleapis.com/zenn-user-upload/fd76ef66f803-20231215.png)

AWS Organizationを使うと、複数のAWSアカウントを組織単位（OU）と呼ばれるグループにまとめて、ポリシーを一括で適用したり、請求情報を集約したりすることができます。

AWS Organizationは、大規模な組織やマルチアカウント戦略を採用している場合に便利なサービスです。

# AWS Organizationの仕組み
AWS Organizationは、マスターアカウントとメンバーアカウントから構成されます。

マスターアカウントは、AWS Organizationを作成したり、メンバーアカウントを招待したり、ポリシーを設定したりすることができる特別なアカウントです。

メンバーアカウントは、マスターアカウントによってAWS Organizationに参加した通常のアカウントで、マスターアカウントが設定したポリシーに従ってAWSリソースを利用することができます。

AWS Organizationでは、メンバーアカウントを組織単位（OU）と呼ばれるグループに分類することができます。
OUは、部門やプロジェクトなどの任意の単位で作成することができます。
また、階層構造を持つことができるので、細かくOUを管理することができます。
例えば、開発部門のOUの下に、開発環境のOUやテスト環境のOUを作成することができます。

OUやアカウントに対しては、サービスコントロールポリシー（SCP）と呼ばれるポリシーを作成して、適用することができます。
SCPは、JSON形式で記述されたドキュメントで、AWSリソースの利用を制限するルールを定義します。
例えば、特定のリージョンやサービスの利用を禁止したり、特定のIAMロールやユーザーのみに権限を付与したりすることができます。

SCPは、階層構造に従って継承されるので、上位のOUやアカウントに適用されたポリシーは、下位のOUやアカウントにも適用されます。
ただし、SCPは許可型ではなく拒否型のポリシーなので、下位のOUやアカウントに適用されたポリシーは、上位のOUやアカウントに適用されたポリシーを上書きすることができます。

# AWS Organizationの活用
AWS Organizationを活用することで、以下のようなメリットが得られます。

# セキュリティやコンプライアンスの向上
SCPを使って、不要なリージョンやサービスの利用を制限したり、必要な権限だけを付与したりすることで、セキュリティやコンプライアンスのレベルを高めることができます。

SCPを用いると各部門のIAMでどのように設定してもSCPで拒否されたリソースは利用不可となるので、各部門が好き勝手に設定をした結果、セキュリティインシデントやコンプライアンス違反が発生する、というリスクを下げられます。
ただし、サービスリンクロールにはSCPの設定が適用されないのでその点は注意してください。

# 請求管理の効率化
マスターアカウントからメンバーアカウントの請求情報を一元的に見ることができます。
また、コスト配分タグやコストエクスプローラーなどのツールを使って、OUやアカウントごとにコストを分析したり、予算を設定したりすることができます。

請求管理の効率化はリザーブドインスタンスやSavings Plansを利用する場合に効果が絶大です。
例えば、各部門で購入したリザーブドインスタンスやSavings Plansが余ってしまった場合、Organization内のほかアカウントがその余剰分を利用可能になります。
また、リソースによってはボリュームディスカウントが適用されることもあります。

# アカウント管理の簡素化
AWS Organizationを使って、メンバーアカウントの作成や招待、削除などの操作をマスターアカウントから一括で行うことができます。
また、AWS Single Sign-OnやAWS Identity Federationなどのサービスと連携して、アカウント間の認証やアクセス管理を簡単にすることができます。

# AWS Organizationのベストプラクティス
AWS Organizationを効果的に利用するためには、以下のようなベストプラクティスを参考にしてください。

| ベストプラクティス | 説明 |
| --- | --- |
| マスターアカウントを最小限にする | マスターアカウントは、AWS Organizationの管理や請求情報の閲覧などの目的に限定して使用し、通常の業務には使用しないようにしましょう。マスターアカウントは、他のメンバーアカウントに影響を与える重要な操作ができるので、誤操作や悪意のある操作を防ぐためにも、アクセス権限を厳しく制限しましょう。 |
| OUを階層的に設計する | OUは、組織の構造やビジネスロジックに合わせて階層的に設計しましょう。OUは、最大5階層まで作成することができます。OUの階層構造は、SCPの継承やコスト配分タグの適用などに影響するので、事前に計画的に作成しましょう。 |
| SCPを効果的に利用する | SCPは、AWSリソースの利用を制限する強力なツールですが、使い方によっては業務に支障をきたす可能性もあります。SCPを適用する前には、必ずテスト環境で動作確認を行いましょう。また、SCPは拒否型のポリシーなので、必要最小限のルールだけを記述しましょう。SCPは階層構造に従って継承されるので、上位のOUやアカウントに適用されたポリシーは下位のOUやアカウントにも影響します。そのため、SCPを適用する際には、影響範囲を把握しておきましょう。 |


# まとめ
この記事ではAWS Organizationに関連する内容を超詳細にまとめました。

- AWS Organizationとは
- AWS Organizationの仕組み
- AWS Organizationの活用
- AWS Organizationのベストプラクティス

次回はAWS Control Towerを超詳細解説します。