AWS Organizations の SCP でリージョン制限

記事タイトルとURLをコピーする

2021年6月の時点で、我々が通常使っているAWSアカウントには21リージョンが存在します。 しかし、多くの人が実際に使っているリージョンは数個ではないでしょうか。 AWS Organizations の SCPを利用し、特定リージョンのみ利用可とする方法を試したので紹介します。

なぜリージョン制限したいか

私は以下の3つ理由でリージョン制限をかけたいと思いました。

セキュリティを高める

攻撃される可能性のある箇所を減らせば、セキュリティは高まります。 普段使っていないリージョンで、知らないうちにEC2インスタンスが作成され、マイニングしていたなんてこともあるかもしれません。

AWS利用料を減らす

AWSのセキュリティサービスの多くは、リージョン単位で動作します。 また、全てのリージョンで有効にすることが推奨されているものも少なくありません。 一つ一つは少額でも20近いリージョン で動いていると、気になってきます。

管理工数を減らす

優れた管理ツールを使ったとしても、全てのリージョンを適正に維持するのは骨が折れます。 そのリージョンを使わないことになっていたとしても、技術的に使われてしまう可能性があるなら、やはり監視・監査の対象にする必要がありそうです。

リージョン制限の方法

ポチッとリージョン無効化できればいいのですが、残念ながらほとんどのリージョンは無効化できません。

2019 年 3 月 20 日より前に導入されたリージョンはデフォルトで有効になっています。これらのリージョンで、リソースの作成と管理をすぐに開始できます。デフォルトで有効になっているリージョンは、有効または無効にできません。 AWS リージョンの管理 - AWS 全般のリファレンス

そこで、AWS OrganizationsのSCPで、全てのアクションをDenyすることで制限します。

一般的な場合

例えば、東京(ap-northeast-1)、オレゴン(us-west-2)、バージニア(us-east-1)以外のActionを全てDenyしたいなら、以下のようにします。

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

AWS Chatbot利用時

ただし、AWS Chatbotを使っている場合は、注意が必要です。 公式ドキュメントによれば、「chatbot:*」のアクションは全てのリージョンで許可する必要があります。

Troubleshooting AWS Chatbot - AWS Chatbot

また、AWS Chatbotは、グローバルサービスという名目ですが、実際はus-east-2に依存し、そこでの「iam:PassRole」が必要となります。

したがって、us-east-2を許可するか、

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "denyRegion",
      "Effect": "Deny",
      "NotAction": [
        "chatbot:*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "ap-northeast-1",
            "us-west-2",
            "us-east-1",
            "us-east-2"
          ]
        }
      }
    }
  ]
}

または、iam:PassRoleを許可する必要があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "denyRegion",
      "Effect": "Deny",
      "NotAction": [
        "chatbot:*",
        "iam:PassRole"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "ap-northeast-1",
            "us-west-2",
            "us-east-1"
          ]
        }
      }
    }
  ]
}

"chatbot:*"と"iam:PassRole"を許可しているので、厳密にはリージョン制限ではないかもしれません。 しかし、実質的にはこれで問題ないのではないでしょうか。

渡辺 信秀(記事一覧)

2017年入社 / 地味な内容を丁寧に書きたい