コントロール 「CT.MULTISERVICE.PV.1」 を使って OU 単位でリージョン制限をやってみた

コントロール 「CT.MULTISERVICE.PV.1」 を使って OU 単位でリージョン制限をやってみた

リージョン拒否設定だと例外を適用できませんが、このコントロールであれば IAM プリンシパルやアクションの例外設定が可能です。
Clock Icon2025.06.19

カスタマーサクセス部 運用支援チームのいたくらです。

はじめに

AWS Control Tower(以降 CT と表記)には [CT.MULTISERVICE.PV.1] 組織単位のリクエストされた AWS リージョンに基づいて AWS へのアクセスを拒否する というコントロールが存在します。
「組織単位の」という記載があるので、OU 毎にリージョン制限ができるということだろうな、と思いつつやったことが無かったので、実際に試してみました。

先に結論

OU 毎に許可するリージョンを指定することで、OU 単位で個別のリージョン制限が可能です。

前提

前提として、自分が検証した環境について補足します。

  • CT を有効化済み
  • 以下の OU 構成で、CT.MULTISERVICE.PV.1 コントロールを有効にする SandboxOU と WorkloadsOU は CT に登録済み
    1-2.png

やってみた

SandboxOU に適用してみる

CT.MULTISERVICE.PV.1 コントロールのページを開き、「コントロールアクション」から「有効にする」をクリックします。
3.png

「SandboxOU」にチェックを入れて、「次へ」をクリックします。
4.png

例として「米国東部 (バージニア北部)」と「アジアパシフィック (大阪)」にチェックを入れて、「次へ」をクリックします。
5.png

オプションとなっている「地域拒否ポリシー」、「NotActions の追加」、「除外されるプリンシパル」は追加設定をせずに「次へ」をクリックします。
6.png
7.png

確認画面で設定をチェックして、「コントロールを有効にする」をクリックします。
8.png

少し待つと「コントロールが正常に有効」と表示されます。これでコントロールの有効化は完了です。
9.png

WorkloadsOU に適用してみる

別 OU に対して、許可するリージョンを変えてコントロールを有効にしてみます。
今回は「WorkloadsOU」にチェックを入れて、「次へ」をクリックします。
10-1.png

この OU は「米国東部 (バージニア北部)」のみ追加でアクセス可能とします。
11.png

SandboxOU のときと同様にオプションは設定せずにコントロールの有効を進めて(同じ画面なので省略しています)、コントロールの有効化を完了させました。
13-1.png

それぞれの OU で差異を確認してみる

それぞれの OU でリージョン制限が効いているか確認します。
各 OU に以下のようにアカウントを配置して CT に登録しました。
21.png

各アカウントにログインしてリージョン制限が効いているか 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 テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.