AWSのアカウントやOUに対して一括でサービスコントロールポリシー(以下、SCP)を適用したり、異なる組織に同じSCPを付与したい場合はありませんか。
今回は、CloudFormationを利用してSCPを付与するテンプレートの紹介と実例を紹介します。
CloudFormation テンプレート
AWS公式ドキュメントの記載
AWS公式ドキュメントでは、CloudFormationテンプレートのサンプルがサービスごとに用意されており、「OrganizationsのSCP作成」についてもサンプルが存在します。
CloudFormationのテンプレートはJSONまたはYAML形式である必要があり、JSON形式における基本構成は以下のようになっています。
{
"Type" : "AWS::Organizations::Policy",
"Properties" : {
"Content" : Json,
"Description" : String,
"Name" : String,
"Tags" : [ Tag, ... ],
"TargetIds" : [ String, ... ],
"Type" : String
}
}
プロパティにおける「Content」や「Name」、「TargetIds」といった各要素の詳細は公式ドキュメントに記載があるため、説明は割愛します。
AWS::Organizations::P olicy - AWS CloudFormation
上記基本構成をもとに、SCPの作成と適用を一括で実施するCloudFormationのテンプレートの例を紹介します。
CloudFormationテンプレート例
今回は、アカウント内で操作できるリージョンを制限するSCPのCloudForamtionテンプレートを作成していきます。
例として、東京リージョンと大阪リージョンの日本限定リージョンに制限したSCPを作成してみます。
また、今回様々なAWS環境で利用できるテンプレートを作成するため、CloudFormationのテンプレートにSCPを付与する宛先である「TargetId」をパラメータとして挿入します。
以下が今回使用するCloudFormation テンプレートのサンプルとなります。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "TestSCP",
"Parameters": {
"TargetIdParam": {
"Type": "CommaDelimitedList",
"Description": "TargetID"
}
},
"Resources": {
"PolicyTestTemplate": {
"DeletionPolicy": "Retain",
"Type": "AWS::Organizations::Policy",
"Properties" : {
"Type": "SERVICE_CONTROL_POLICY",
"Name" : "test01",
"Description" : "test01",
"TargetIds": { "Ref": "TargetIdParam" },
"Content":{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyOtherRegions",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"ap-northeast-1",
"ap-northeast-3"
]
}
}
}
]
}
}
}
}
}
実践
CloudFormationのスタック作成
1.Organizationsの管理アカウントにて、CloudFormationのコンソール画面へアクセスし、「スタックの作成」を選択します。

2.テンプレートの指定時に、[テンプレートファイルのアップロード]-[ファイルの選択]から今回使用するCloudFormationテンプレートを指定し、「次へ」を選択します。

3.「スタック名」を入力し、パラメータの「TargetIdsParam」にSCPを付与するOUまたはアカウントのIDを入力し、「次へ」を選択します。
複数のOUまたはアカウントを指定する場合は、「,(カンマ)」区切りで入力する必要があります。
また、以下のようにOUとアカウントを一緒に選択することも可能です。

4.その他設定はオプションのため、必要に応じて設定を行った後に「送信」を選択し、設定に問題が無ければスタックの作成が完了します。

SCP適用確認
- Organizationsのコンソール画面での確認(管理アカウント)


- リージョン制限確認(メンバーアカウント)

おわりに
今回はOUやアカウントに対してSCPを一括適用する方法について、CloudFormationを活用した設定例を紹介しました。
注意点として、SCPの作成と適用をするためには、Organizationsで事前に「サービスコントロールポリシーの有効化」が必要となります。
紹介したテンプレートはサンプルのため、利用しているAWS環境に応じてSCPの内容を変更したり、パラメータを利用して効率的にSCPを付与したりする際に役立てていただけると幸いです。