AWS Organizationsのサービスコントロールポリシーの設定テストをしてみた

# はじめに
先日、AWS Organizationsの登録、アカウントの招待、組織単位(Organizational Unit)の作成をしてみました。そのときの備忘録は下記の記事を参照ください。

https://qiita.com/duelist2020jp/items/55c382a0b4f419da0774

今回はその続きで、[サービスコントロールポリシー](https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_scps.html)(以降、SCPと表記)の設定テストをしてみました。SCPは、全ての機能が有効になっている組織でのみ使用することが可能です。一括請求機能のみを有効にしている場合には使用できないとのことなので、その点はご注意を。以下にSCPの設定テストしたときのメモをまとめました。

# SCPの有効化
SCPの設定テストをするために、まずはSCPを有効化します。有効化するための手順は下記の通りです。
1. AWS Organizations画面の左側にあるメニューにおいて、ポリシーを選択し、サポートされているポリシー一覧を開きます。
![AWS Organizations ポリシー1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/bb6870cc-23c8-cf1e-478b-7fdf0f8b4104.png)
上記画面に記載されている「サービスコントロールポリシー」をクリックします。

2. 下記の画面が表示されるので、「サービスコントロールポリシーを有効にする」ボタンをクリックします。
![AWS Organizations ポリシー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/478b4781-aab7-8b67-9f21-ddd6a70220bc.png)
すると、下記の「FullAWSAccess」という名前のSCPが表示されます。管理アカウントを含む全ての組織に対して有効なポリシーとなっています。
![AWS Organizations ポリシー3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/f0ceff26-94d6-c65c-e7f8-22ae321fe6e5.png)

# SCPのテスト準備
今回は、特定の組織単位(Organizational Unit)に対してのみ有効となるSCPを作成し、SCPの動作確認テストを行います。テストに向けて下記の準備を実施します。
* 組織に招待したアカウントを組織単位(TestGroup)に移動する。
* テスト用の簡単なSCPを定義する。

**1.組織に招待したアカウントの組織単位(TestGroup)への移動作業**
* AWS OrganizationsのAWSアカウント画面上で、移動する対象のアカウントのチェックボックスにチェックをいれた後、アクションメニューを開き、AWSアカウントの下にある「移動」を押し下げします。
![AWS Organiationsポリシー4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/44dd3aec-ec3b-0512-f5d6-5c67b3a45a53.png)

* 移動する対象アカウントが正しい物であることを確認し、画面下部にある「AWSアカウントを移動」ボタンをクリックします。
![AWS Organizationsポリシー5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/7d819e40-0825-0eb8-6c6b-66b349f3db7c.png)

* 対象のアカウントが組織単位「TestGroup」の下に移動したことを確認します。(赤枠の部分参照)
![AWS Organizationsポリシー6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/82b5d90a-14a2-e2dc-f60a-6da1e9a9f393.png)

**2.テスト用のSCP定義作成**
今回は簡単なSCPとして、「TestGroup配下のアカウントについては、Amazon S3のバケツの新規作成を拒否する」といった内容のものを作成します。

* 下記画面において、「ポリシーを作成する」ボタンをクリックします。
![AWS Organizations ポリシー3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/f0ceff26-94d6-c65c-e7f8-22ae321fe6e5.png)

* ポリシー名を記入します。必要に応じて、ポリシーの説明欄も記述します。
![AWS Organizationポリシー7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/7b97f7c2-f262-c136-9e6e-e58809287307.png)

* ポリシーの記述ですが、簡単なテンプレートが用意されていますので、ActionステートメントやResourceステートメントの中身を埋めていく形になります。今回、Sidステートメントは削除しました。Actionステートメントの中身などについては親切なことに対象サービスやアクセスレベルをメニューから必要項目にチェックを入れれば簡単に中身を埋めることが可能でした。(1回きりの作業であればIaCツール使うより、マネジメントコンソールから作業する方が楽かもしれません。)
![AWS Organizationsポリシー8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/4396ef36-9e5b-545e-fad6-3faece5a0ee0.png)

* 上記画面を下にスクロールすると下記のようなメニューが表示されます。
![AWS Organizationsポリシー9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/0c0bc3e3-c4cb-8417-e27f-7c95492f23a1.png)
「リソースを追加する」や「条件を追加する」で「追加」ボタンを押すことで、様々な設定を追加することが可能です。ちなみに今回は単純に「リソースを追加する」の「追加」ボタンだけ押して、必要項目を選択 or 入力しました。こんなイメージです。
![AWS Organizationsポリシー10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/ddf9b0a5-9c3f-bdbd-19f9-80efab5f2708.png)

* 最終的なSCP定義は下記画面の左側に表示されているものになります。
![AWS Organizationsポリシー11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/939d17cf-ead2-49e9-c431-75d43ca4bb70.png)

　画面を下部にスクロールすると、「ポリシーを作成」ボタンが表示されますので、それをクリックします。
![AWS Organizationsポリシー12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/28be1cfb-574f-5f95-6adc-3db11945024d.png)

* 作成した「Deny_S3CreateBucket」という名前のSCPが一覧に表示されます。ここで、「アクション」メニューから「ポリシーのアタッチ」を押し下げします。
![AWS Organiationsポリシー13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/83f156e1-f654-c93d-1e9e-e07f584a7be2.png)

* 「TestGroup」組織単位のチェックボックスにチェックを入れた後、画面下部にある「ポリシーのアタッチ」ボタンをクリックします。
![AWS Organizationsポリシー14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/0e8cd6d2-8e25-9375-0264-fad8af49c15f.png)

* 作成したSCPた「TestGroup」組織単位にアタッチされていることが確認できます。
![AWS Organizationsポリシー15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/b8cdfcdc-b894-ff22-7cf9-a81744db86a4.png)

# SCPの効果確認テスト実施
「TestGroup」組織単位に移動したAWSアカウントを使用して、AWSコンソールにログオンした後、Amazon S3のバケツを新規作成してみます。
![AWS Organizationsポリシー16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/afd8773f-93bb-a224-8bdc-b33dbe7bee03.png)

→「バケットを作成」ボタンをクリック後、見事想定した通りにAmazon S3のバケツ作成が拒否されることを確認できました！

# おわりに
今回はAWS Organizationsのサービスコントロールポリシー(SCP)の設定を行い、簡単なSCP定義を作成して稼働確認テストを実施し、その効果を確認することができました。やはりドキュメントやBlackbeltの資料を読んでいるだけよりも実際に手を動かして動作確認をしてみる方が個人的には理解しやすいと思います。AWSのサービスはたくさんありますので、可能な限り今後も様々なサービスのハンズオンを実施してみようと思います。