AWS Organizationsを利用したAWSアカウント管理について

# 目的
この記事では以下について記載する。
- AWS Organizationsを利用し、AWSアカウントを追加する方法
- 追加したAWSアカウント(メンバーアカウント)へのログイン方法
- サービスコントロールポリシー(SCP)によりAWSアカウントの操作を制限する方法
- SCPの継承の仕組みについて

# 想定読者
- AWS Organizationsについて勉強している方
- SCPについてのイメージが掴めない方

# 手順
手順としては以下を想定しております。
1. AWSアカウントの追加
1. メンバーアカウントへのログイン
1. SCPの有効化、アタッチ
1. SCPの継承の仕組み

## 1. AWSアカウントの追加
「AWSアカウントを作成」を選択します。
既存のAWSアカウントがある場合は、「既存のAWSアカウントを招待」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/0309766d-8bd4-84ff-7e89-60ef7f47bcaa.png)

しばらく待つと作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/3ea6c984-8e96-693a-a006-ae71e4e2e548.png)
「AWSアカウントを作成」の「アカウント所有者のEメールアドレス」に入力したメールアドレスに以下の内容が送信されれば登録完了となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/42923931-2de7-c972-bf5e-5e7b4e7af254.png)
Root配下にAWSアカウントが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/503afc9e-b7ea-5442-1ed2-493989733045.png)

## 2. メンバーアカウントへのログイン方法
メンバーアカウントへのログイン方法は2通りあります。
1つ目は、作成したAWSアカウントにIAMロール名「OrganizationsAccountAccessRole」にてスイッチロールする方法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/4c75cf3d-333f-ecd8-21fb-9ee3875f787d.png)


2つ目は、作成したAWSアカウントにルートユーザでログインする方法です。
ルートユーザのパスワードは取得できませんので、一度パスワードを初期化する必要があります。
但し、実運用を考えると、スイッチロールした上でIAMユーザを作成し、利用ユーザに連絡する方が良いと思われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/a4500f2d-752b-ecb5-dffb-a7e9808038d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/9ce86ee5-a240-beb3-f497-3ba33b3c345c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/394ad660-98f4-12d4-ed67-c32888bbcf69.png)

### 参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/organizations-member-account-access/

## 3. SCPの有効化、アタッチ
SCPを有効化します。
SCPにより、追加したAWSアカウントの制限が可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/025c5596-e5cb-2a4a-79fc-3ee2fae937e6.png)

ルートにはデフォルトで「FullAWSAccess」ポリシーが適用されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/e6c1632c-d41e-4889-90ab-cb1030a5c003.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/06f2e3d4-1688-a1ad-a7b2-2eb3cb12652d.png)

追加したAWSアカウントにSCPをアタッチします。
この時、例えば、追加AWSアカウントでは開発者がEC2とCloudWatchしか利用しないと想定します。
「ポリシーを作成」を選択し、EC2とCloudWatchのみ許可するポリシーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/65fd1fcd-8fae-0122-daac-918729cdaa90.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/bb7f14b9-674e-b0f2-8dc3-3f4bce79cc06.png)


追加したAWSアカウントにアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/7c81b8e9-b3df-f975-3ffb-dd9f2486f0ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/23be3d52-5ddd-6c9d-fd58-c788eec5ee8e.png)

ポリシーが適用されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/e6ce5405-94b6-9704-3683-d81d6ee7d5d2.png)

## 4. SCPの継承の仕組み
SCPには継承という仕組みがあります。
これは文字通り、親のポリシーを引き継ぐことを意味します。
但し、「継承」というよりは「フィルタ」というイメージが近いです。
例えば、追加したAWSアカウント「company_busho_user1」の親の「Root」で全てのAWSリソースへのアクセスを拒否にするポリシーを設定します。子の「company_busho_user1」では全てのAWSリソースへのアクセスを許可にするポリシーを設定します。
私の当初のイメージとしては、親のポリシーで拒否しても子のポリシーで許可することが可能かと思っておりましたが、親のポリシーで拒否した場合、子のポリシーで許可することは出来ません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/ee3af342-88f7-9d60-43f1-c5112a4443fe.png)
スイッチロールしても権限がないことでエラーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/0511b87f-167a-4e10-bf1d-594f0f31da6b.png)

また、親のポリシーで許可した場合、親のポリシーのみを子でも使うことが可能かと思っておりましたが、子では継承されているポリシー以外のポリシーをアタッチする必要がございました。
この時、明示的に使用可能なリソースを指定した場合、許可したリソース以外は黙示的に拒否されます。
例えば、以下の場合、「AccountControl」ポリシーにて、EC2、CloudWatchのみを許可していますので、EC2、CloudWatchはアクセス可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/e6ce5405-94b6-9704-3683-d81d6ee7d5d2.png)

- EC2の場合 ※APIエラーが表示されている箇所は黙示的に拒否されていることを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/25fd2215-632c-6183-09ef-b719fba394e6.png)

- CloudWatchの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/74b9a0cf-b9a1-b37c-5e6f-ba57b5c798da.png)

それ以外のサービスは利用できません。
- AWS Organizationsの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/e3fc47a0-179a-e054-5ad2-31f2cd5dce5a.png)

# 参考情報
SCP継承については以下のサイトが凄く分かりやすいです。
https://dev.classmethod.jp/articles/organizations-scp-inheritance/