AWS Organizations 環境で SCP を使ってインターネットアクセス可能な VPC の作成を許可しない OU を作成してみた

AWS Organizations 環境で SCP を使ってインターネットアクセス可能な VPC の作成を許可しない OU を作成してみた

Clock Icon2024.07.03

いわさです。

AWS Organizations や Control Tower を使って組織の複数の AWS アカウントを管理したり統制したいことがよくあります。
その時、払い出した AWS アカウントを使ってワークロードから無許可でインターネットアクセスへ直接アクセスを許可したくないケースがあります。

AWS Organizaitons 公式ドキュメントの SCP (Service Control Policy) 例としてインターネットアクセスを出来ないようにする SCP の実装例が紹介されています。

https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples_vpc.html

マルチアカウント管理のガイダンスとして OU (Organization Unit) に役割を持たせる方法が紹介されています。
今回はセキュリティ制御としてインターネットアクセスを許可しない AWS アカウントを OU と SCP を使って制御してみたいと思います。

https://aws.amazon.com/jp/blogs/news/best-practices-for-organizational-units-with-aws-organizations/

OU と SCP作成

まずはポリシーを適用するために適当な OU を作成しましょう。
検証用なのでなんでも良いのですが、7月からチバユキチームの一員となったのでchibayukiという OU を作成しました。

A48C9F9E-D0E5-48A8-85F8-BCBBE10B7F59

次に SCP を用意します。
ポリシー内容は次のようなもので、冒頭の公式ドキュメントのポリシー内容のままです。
内容としては、インターネットゲートウェイの作成とアタッチを禁止していますね。
また、VPC ピアリングの作成・承認とグローバルアクセラレータの作成・更新も拒否しています。なるほど、そのあ通信経路もあったか。

39D42ACD-E857-4692-AC5D-062F0B91F95E

そして作成した SCP を OU にアタッチします。

5665305B-307D-42D8-B458-A3B22007CFE8

最後に、適当な検証アカウントを作成した OU に移動させましょう。

D9DBE4F2-2C03-4E40-86E9-1CC264DB1AC4

これでこのアカウントは、要はインターネットアクセスのために必要なコンポーネントを作成できなくなったので、このアカウントからインターネットアクセスされることはないだろう。ということですね。

インターネットゲートウェイを作成してみる

さて、該当アカウント上で早速インターネットアクセス可能な VPC を作成してみます。
まずは VPC 作成時に関連コンポーネントも自動作成してくれる便利機能を使って VPC などを作成してみましょう。

この機能では構成時にパブリックサブネットが 1 件以上ある場合はインターネットゲートウェイも作成される仕様のようです。

13905A26-D0B1-48DA-BCF7-4149F344FC17

おお、作成に失敗しました。
インターネットゲートウェイの作成にだけ失敗していますね。よって、パブリックサブネットのない VPC であれば新規作成は可能です。

5B1F737F-4D93-4403-A97C-03472535BC03

また、インターネットゲートウェイ単独での作成も失敗しました。良さそう。

C5ABB25B-9446-4DC0-9B5C-EC8EE2BC451B

グローバルアクセラレータと VPC ピアリングも作成出来ない

同様にポリシーに記載のあった他のコンポーネントも確認してみましょう。
次はグローバルアクセラレータの作成失敗の様子です。

29017C7F-690A-4ED2-A31F-F2927E71BF08

こちらは VPC ピアリング作成失敗の様子です。

AB3912C1-E530-4004-B9EF-99A283A64172

なお、今回のポリシーはインターネットアクセスするためのコンポーネントの作成などを制限するものになっているので既にインターネットゲートウェイなどがアタッチされた VPC が存在する場合は影響を受けずに引き続きインターネットアクセスが可能です。

そういえばデフォルト VPC あったな

今回気がついたのですが、そういえばデフォルト VPC というものがありましたね。
そして、このデフォルト VPC はインターネットゲートウェイがアタッチされています。

68648197-3155-431A-A5C1-D961561533D0

セキュリティ向上のためのデフォルト VPC は削除しましょうという運用もよくあります。
既に存在する環境であればスクリプトで全リージョン削除するとか、あるいは新規アカウントに関しては Account Factory を使ってデフォルト VPC を削除する方法も考えられます。

https://dev.classmethod.jp/articles/remove-default-vpc-from-all-regions-lambda/

https://dev.classmethod.jp/articles/tsnote-control-tower-please-tell-me-about-whether-the-default-vpc-will-be-automatically-deleted-when-registering-an-existing-account-to-control-tower/

デフォルト VPC 作成出来るのか?

デフォルト VPC は不要であれば削除し、必要になったタイミングで再作成が可能です。
作成するには通常の VPC を作成してデフォルト VPC として選択するのではなく、「デフォルト VPC 作成」という機能を使う必要があります。

先ほどの制限されたアカウントで削除と再作成を試してみましょうか。

まずデフォルト VPC を削除します。削除確認キーワードを入力したのですが削除ボタンが押せません。よく見ると VPC の前後に半角スペースが必要なようです。なんてこったい。

2B02294E-EE66-4C31-BF14-3F6EFFC64D98

デフォルト VPC が削除されている場合、VPC コンソールのアクションメニューから「デフォルト VPC を作成」のボタンが押せるようになりますのでこちらを押しましょう。

38F023E5-0544-4566-AB4D-F10E8F0F1A59

なんと、デフォルト VPC が作成出来てしまいました。
そしてインターネットゲートウェイも一緒に作成されアタッチされています。
インターネットアクセス可能な VPC を作成させないためのポリシーなのですがデフォルト VPC で作成出来てしまう状態となっていました。

7211DFA4-B3FD-4877-8728-025F0EEF8B30

この挙動について次の公式ドキュメントに記述があります。

Amazonは、ユーザーに代わって上記のリソースを作成します。ユーザーがこれらのアクションを実行するわけではないため、IAM ポリシーはこれらのアクションに適用されません。たとえば、CreateInternetGateway を呼び出す機能を拒否する IAM ポリシーがあり、CreateDefaultVpc を呼び出した場合でも、デフォルト VPC 内のインターネットゲートウェイが作成されます。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/default-vpc.html

SPC でデフォルト VPC 作成も拒否するように修正

というわけで、より厳格にやるのであればデフォルト VPC の作成も拒否するのが良さそうです。
IAM コンソールを確認してみるとデフォルト VPC 作成には次のアクションが必要なようです。

9359CD7B-DD4A-401D-9EE7-5D072F94CE97_4_5005_c

こちらを SCP に追記します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:AttachInternetGateway",
        "ec2:CreateInternetGateway",
        "ec2:CreateEgressOnlyInternetGateway",
        "ec2:CreateVpcPeeringConnection",
        "ec2:AcceptVpcPeeringConnection",
        "globalaccelerator:Create*",
        "globalaccelerator:Update*",
        "ec2:CreateDefaultVpc"
      ],
      "Resource": "*"
    }
  ]
}

ポリシーの更新後に再度デフォルト VPC 作成を試してみましょう。

6C665701-99B0-4EAF-B5D4-E11CFEE0C3FB

今度はこちらも拒否されましたね。良さそうです。

さいごに

本日は AWS Organizations 環境で SCP を使ってインターネットアクセスを許可しない OU を作成してみました。

インターネットゲートウェイを制限しインバウンドだけなくアウトバウンドも拒否するので、完全に閉域にするのではなくインバウンドだけ拒否したいみたいな時はこの方法は取れなさそうですが。

インターネットゲートウェイ以外にもインターネットアクセスするための経路があったりとか、あるいはデフォルト VPC の特殊な仕様があったりといくつか気づく点もありました。
ただ、まだいくつか抜け道がありそうな気もしますね。
VPC ピアリング以外にも VGW を経由するような別のネットワーク経路でインターネットアクセスするなども出来そうなのでそのあたりも追加で考慮しても良さそうです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.