コントロール 「CT.MULTISERVICE.PV.1」 を使って OU 単位でリージョン制限をやってみた
カスタマーサクセス部 運用支援チームのいたくらです。
はじめに
AWS Control Tower(以降 CT と表記)には [CT.MULTISERVICE.PV.1] 組織単位のリクエストされた AWS リージョンに基づいて AWS へのアクセスを拒否する
というコントロールが存在します。
「組織単位の」という記載があるので、OU 毎にリージョン制限ができるということだろうな、と思いつつやったことが無かったので、実際に試してみました。
先に結論
OU 毎に許可するリージョンを指定することで、OU 単位で個別のリージョン制限が可能です。
前提
前提として、自分が検証した環境について補足します。
- CT を有効化済み
- 以下の OU 構成で、
CT.MULTISERVICE.PV.1
コントロールを有効にする SandboxOU と WorkloadsOU は CT に登録済み
やってみた
SandboxOU に適用してみる
CT.MULTISERVICE.PV.1 コントロールのページを開き、「コントロールアクション」から「有効にする」をクリックします。
「SandboxOU」にチェックを入れて、「次へ」をクリックします。
例として「米国東部 (バージニア北部)」と「アジアパシフィック (大阪)」にチェックを入れて、「次へ」をクリックします。
オプションとなっている「地域拒否ポリシー」、「NotActions の追加」、「除外されるプリンシパル」は追加設定をせずに「次へ」をクリックします。
確認画面で設定をチェックして、「コントロールを有効にする」をクリックします。
少し待つと「コントロールが正常に有効」と表示されます。これでコントロールの有効化は完了です。
WorkloadsOU に適用してみる
別 OU に対して、許可するリージョンを変えてコントロールを有効にしてみます。
今回は「WorkloadsOU」にチェックを入れて、「次へ」をクリックします。
この OU は「米国東部 (バージニア北部)」のみ追加でアクセス可能とします。
SandboxOU のときと同様にオプションは設定せずにコントロールの有効を進めて(同じ画面なので省略しています)、コントロールの有効化を完了させました。
それぞれの OU で差異を確認してみる
それぞれの OU でリージョン制限が効いているか確認します。
各 OU に以下のようにアカウントを配置して CT に登録しました。
各アカウントにログインしてリージョン制限が効いているか CloudShell で aws ec2 describe-vpcs
コマンドを実行して確認します。
結果は適当にマスクしています。
SandboxOU 配下のアカウントで確認した結果
~ $ aws ec2 describe-vpcs --region ap-northeast-1 # 東京リージョン
{
"Vpcs": [
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-aaaa",
"CidrBlock": "172.31.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": true,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-aaa",
"State": "available",
"CidrBlock": "172.31.0.0/16",
"DhcpOptionsId": "dopt-aa"
},
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-bbbb",
"CidrBlock": "10.0.0.0/24",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-bbb",
"State": "available",
"CidrBlock": "10.0.0.0/24",
"DhcpOptionsId": "dopt-bb"
}
]
}
~ $
~ $ aws ec2 describe-vpcs --region ap-northeast-3 # 大阪リージョン
{
"Vpcs": [
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-cccc",
"CidrBlock": "172.31.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": true,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-ccc",
"State": "available",
"CidrBlock": "172.31.0.0/16",
"DhcpOptionsId": "dopt-cc"
}
]
}
~ $
~ $ aws ec2 describe-vpcs --region us-east-1 # バージニア北部リージョン
{
"Vpcs": [
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-dddd",
"CidrBlock": "10.0.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-ddd",
"State": "available",
"CidrBlock": "10.0.0.0/16",
"DhcpOptionsId": "dopt-dd"
},
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-eeee",
"CidrBlock": "172.31.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": true,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-eee",
"State": "available",
"CidrBlock": "172.31.0.0/16",
"DhcpOptionsId": "dopt-ee"
}
]
}
~ $
~ $ aws ec2 describe-vpcs --region us-west-2 # オレゴンリージョン
An error occurred (UnauthorizedOperation) when calling the DescribeVpcs operation: You are not authorized to perform this operation. User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/AWSReservedSSO_AdministratorAccess_xxx/test-admin is not authorized to perform: ec2:DescribeVpcs with an explicit deny in a service control policy
~ $
東京、大阪、バージニア北部リージョンの VPC 情報を取得することができ、オレゴンリージョンの VPC 情報の取得は SCP により拒否されました。
意図した挙動になっていることが確認できました。
WorkloadsOU 配下のアカウントで確認した結果
~ $ aws ec2 describe-vpcs --region ap-northeast-1 # 東京リージョン
{
"Vpcs": [
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-aaaa",
"CidrBlock": "172.16.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-aaa",
"State": "available",
"CidrBlock": "172.16.0.0/16",
"DhcpOptionsId": "dopt-aa"
}
]
}
~ $ aws ec2 describe-vpcs --region ap-northeast-3 # 大阪リージョン
An error occurred (UnauthorizedOperation) when calling the DescribeVpcs operation: You are not authorized to perform this operation. User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/AWSReservedSSO_AdministratorAccess_bb/test-admin is not authorized to perform: ec2:DescribeVpcs with an explicit deny in a service control policy
~ $
~ $ aws ec2 describe-vpcs --region us-east-1 # バージニア北部リージョン
{
"Vpcs": [
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-bbbb",
"CidrBlock": "172.31.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": true,
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-bbb",
"State": "available",
"CidrBlock": "172.31.0.0/16",
"DhcpOptionsId": "dopt-bb"
},
{
"OwnerId": "xxxxxxxxxxxx",
"InstanceTenancy": "default",
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-cccc",
"CidrBlock": "10.0.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"Tags": [
{
"Key": "Name",
"Value": "test"
}
],
"BlockPublicAccessStates": {
"InternetGatewayBlockMode": "off"
},
"VpcId": "vpc-ccc",
"State": "available",
"CidrBlock": "10.0.0.0/16",
"DhcpOptionsId": "dopt-cc"
}
]
}
~ $
~ $ aws ec2 describe-vpcs --region us-west-2 # オレゴンリージョン
An error occurred (UnauthorizedOperation) when calling the DescribeVpcs operation: You are not authorized to perform this operation. User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/bb/test-admin is not authorized to perform: ec2:DescribeVpcs with an explicit deny in a service control policy
~ $
東京、バージニア北部リージョンの VPC 情報を取得することができ、大阪、オレゴンリージョンの VPC 情報の取得は SCP により拒否されました。
WorkloadsOU についても意図した挙動になっていることが確認できました。
オプションでは何を設定できるの?
オプションでは NotAction を追加したり、除外される IAM プリンシパルを追加可能です。
ただし、かなり制限が緩和されるので必要最小限の変更に留めることを推奨します。
- NotAction
- アクションを追加すると制限が緩和されることになるため、注意が必要です
- 例:NotActionに
ec2:RunInstances
を追加すると、除外される IAM プリンシパル以外でも許可されたリージョン外で EC2 インスタンスが作成可能になる
- 除外される IAM プリンシパル
- IAM プリンシパル ARN を追加すると、そのプリンシパルが制限から除外されます
- 例:除外される IAM プリンシパルに
arn:aws:iam::xxxxxxxxxxxx:role/AdminRole
を追加すると、AdminRole は許可されたリージョン外でも、すべての AWS アクションを実行可能になる
さいごに
コントロール:[CT.MULTISERVICE.PV.1]
の設定方法と、どのような予防的ガードレールが実装できるかのご紹介でした。
グローバル展開をしている企業等で CT で管理対象リージョンを決めてリージョン拒否設定をした後、さらに各国拠点で利用可能なリージョンを限定したいという要件がある場合には、このコントロールが活躍しそうだと思いました。
この記事がどなたかのお役に立てれば幸いです。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。
サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。