AWS Organizations の SCP を使ってリージョン制限をかけてみよう

こんにちは。
今回は AWS Organizations を使ってハンズオン環境を作っていた際に、使用可能なリージョンを絞りたいという要件が出てきたので、その設定方法について共有します。
使用可能なリージョンを絞ることで、クリーンナップ時の抜け漏れの防止や想定外の操作防止といったことが期待できます。

## AWS Organizations とは

>AWS Organizations は、AWS リソースの増加やスケーリングに合わせて、環境を一元的に管理し、統制するのに役立ちます。AWS Organizations を使って、プログラムから新しい AWS アカウントを作成しリソースを割り当てたり、アカウントをグループ化してワークフローを整理したり、ガバナンスのためにアカウントまたはグループにポリシーを適用したり、すべてのアカウントに単一の支払い方法を利用することで請求を簡素化したりできるようになります。
https://aws.amazon.com/jp/organizations/

AWS アカウントを作成したり、既存の　AWS アカウントを連結したりすることで、環境や課金の一元管理ができるサービスで、大本の AWS アカウントを マスターアカウントや Payer アカウント、親アカウント、関連づいているアカウントを メンバーアカウントやLinked アカウント、子アカウントと呼びます。

## Service Control Policy (SCP) とは
>サービスコントロールポリシー (SCP) は、組織のアクセス許可の管理に使用できる組織ポリシーの一種です。
https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_scps.html

IAM ポリシーやリソースポリシーと同じように AWS サービスへのアクセス可否を設定できるポリシーで、 AWS アカウントに設定できるポリシーのことです。



## リージョン制限をかけてみよう
では、早速、リージョン制限をかけてみましょう。

AWS Organizations のコンソールにアクセスし、ポリシーメニューを選択します。そして、「サービスコントロールポリシー」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/2be58aac-5968-61a7-9f69-f26ff9ab70f1.png)

ポリシーの作成ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/32c6751f-0a62-ef75-66ff-9e6779ad2620.png)

ポリシー名や説明を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/a3074577-3eb8-4678-51fa-cffaf48cd342.png)

単にリージョン制限をかけるだけなら、以下の json の内容をポリシーのテキストフィールドにコピペします。
この例だと、東京リージョン(ap-northeast-1)とシンガポールリージョン(ap-southeast-1)以外(StringNotEquals)のリージョンだと、すべてのアクションが拒否(Deny)されるというものです。また、グローバルサービス(IAMなど)へのアクセスも提供しないとならないため、バージニア北部リージョン(us-east-1)も許可します。
バージニア北部リージョンについては、別途、グローバルサービス以外のサービスを制限するといったポリシーを作るとよいでしょう。

```json:denyRegion.json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "denyRegion",
			"Effect": "Deny",
			"Action": [
				"*"
			],
			"Resource": [
				"*"
			],
			"Condition": {
				"StringNotEquals": {
					"aws:RequestedRegion": [
						"ap-northeast-1",
						"ap-southeast-1",
						"us-east-1"
					]
				}
			}
		}
	]
}
```

そして、この SCP を Organizations Unit(OU) やアカウントにアタッチします。

### 動作確認
1. まずは、SCP を割り当てた AWS アカウントへスイッチするなりログインするなりします。<br>※今回の例だと、このリージョン制限以外のサービス制限をかけていません。
2. Amazon S3 のコンソールへアクセスします。
3. 使用可能なリージョンとそうではないリージョンを選択して、S3 バケットを作成してみます。

#### 使用可能なリージョン
東京リージョンを選択し、バケットを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/f28e0b33-50ff-6251-5fc3-a9bcb33198e8.png)

問題なく、作れたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/cff54fbf-c30c-9bf3-baf7-c01bb004e670.png)



#### 使用不可なリージョン
では、東京リージョンやシンガポールリージョン以外のリージョンということで、バージニア北部リージョンを選択し、バケットを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/34eedfd9-7f2e-9749-02b4-65b6343e53c3.png)

「バケットを作成」ボタンをクリック後、以下のようなメッセージが表示され、しっかりと作成が拒否されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/dbeb464f-bcd2-dac2-4c32-8197a2bf76b4.png)


### 注意点
リージョンを判定対象とできる条件キーとして、今回は「aws:RequestedRegion」を指定していますが、似たような名前の「ec2:Region」があります。
こちらを選択してしまうと、適合したリージョンでも、(確認した範囲では)EC2 に関する操作(インスタンスの起動や VPC の作成など)以外は不可となってしまいますので、ご注意ください。

## まとめ
SCP を利用することで、アカウントに対する制限がかけやすくなります。
特にハンズオンやサンドボックスといった環境は、サービスの要件(一部のリージョンでしか使えないなど)がない場合は、運用面でもリージョンを固定するとよいでしょう。
また、利用料が安いリージョンだけを使えるようにするといったコスト管理の強化といった使い方もできるでしょう。

次回は、[コスト高騰を防ぐための SCP についてお伝えします](https://qiita.com/hirosys-biz/items/48d1db5fcce3bf6547ce)。

記載されている会社名、製品名、サービス名、ロゴ等は各社の商標または登録商標です。