IAMポリシーでサービスの利用を特定リージョンに制限する方法

目次

概要

AWSで利用可能なリージョンを制限する方法はいくつかありますが、今回はIAMポリシーを使って制限する方法をまとめます。

AWS Organizationsでリージョンの制限をする方法もありますが、組織に属していないアカウントでシンプルに不要なリージョンの利用をブロックできます。

本記事では、各ポリシーを適用した際の挙動の確認に焦点を当てており、ポリシーやグループの作成方法などについては割愛します。

リージョン制限が必要な理由

そもそもリージョン制限が必要なりゆを整理していきます。
利用自体は制限しなくても問題ありませんが、セキュリティやコストの観点から不要なリージョンは制限しておくことをお勧めします。

セキュリティ強化

使っていないポートを拒否するのと同じように、利用していないのに利用できる状況はセキュリティホールになる可能性が高いです。

特に、利用していないリージョンは普段見ることはないので、不正にリソースを作成された時に気づくのが困難です。

コスト削減

セキュリティの観点で記載したような、不正に作成されたリソースに限らず検証などで誤って作成し、削除を忘れたリソースもなかなか気づくことができません。

リージョン制限をすれば、それらのリソースが作成されることもなく、不適切なリソースの監視もする必要がありません。

管理コスト削減

仮に全リージョンに対して、セキュリティおよびリソース監視の仕組みを導入できたとしても37リージョン(2026年1月時点)を運用するのは管理コストが高いです。

IAMポリシーの設定

前提

今回は、ap-northeast-1を利用するリージョンと定義し、その他のリージョンを制限します。

IAMユーザグループにポリシーを適用して、動作を確認します。

リージョン制限ポリシーの適用

特定のリージョン(例:ap-northeast-1)のみを許可する場合、StringNotEqualsを使い、ap-northeast-1以外のリージョンをDenyします。

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

こちらを適用して対象のユーザを確認しますが、明示的な拒否のみ適用されているため、今のままでは各サービスへのアクセスはできません。 試しにVPCのコンソール画面を表示すると以下のようになります。

サービスへの許可を適用する

各サービスへの許可を適用するために、AdministratorAccessの許可を持つIAMユーザーグループに対象ユーザを追加します。

この状態でVPCの画面を再度確認すると、リソースの閲覧や作成の操作ができるようになっています。

ポリシーの適用順序について

ここまでの挙動の説明です。
AWSでは、以下の優先度でポリシーが適用されていきます。

  1. 明示的なDeny
  2. 明示的なAllow
  3. 暗黙のDeny(明示的なAllowがなければDenyする)

何かのリソースに対してアクションを実行するときに、1から順番に確認されます。

今回の例で行くと

  • 明示的なDeny :ap-northeast-1以外のリージョンの拒否
  • 明示的なAllow:全てのリソースへの全てのアクション許可
  • 暗黙のDeny:明示的な許可以外の拒否

となっています。

最初にap-northeast-1にアクセスしたときは、明示的なAllowが存在しなかったため、暗黙のDenyでリソースの閲覧ができない状況でした。

グローバルサービスを考慮したポリシー

ここまでのポリシーで、ap-northeast-1のリソースに対するAdministratorAccessを設定できましたが、IAM、CloudFront、Route53などのはリージョナルサービスではないためap-northeast-1の許可ではアクセスできません。
グローバルサービスは例外として許可する必要があります。

iamのDenyをNotAction条件で除外するようにポリシーを変更します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotAction": [
                "iam:*"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:RequestedRegion": [
                        "ap-northeast-1"
                    ]
                }
            }
        }
    ]
}

この状態で、IAMのコンソールを閲覧すると問題なくデータが表示されることが確認できます。

試験での出題ポイント

AWS Organizationsとの使い分けを問われることが多い印象です。

問題文にある要件を確認し、単一アカウント内での制御であればIAMポリシー、組織単位であればSCPで制御というような整理をしましょう。

本題とはそれますが、IAMのポリシーについても適用の優先度について問われることもあるためしっかりと覚えておきましょう。

特定のサービスにアクセスできないと言うときには、明示的なAllowがなかったり、IAMなどのグローバルサービスの許可が抜けている可能性も検討しましょう。

まとめ

IAMポリシーのaws:RequestedRegion条件キーを使用することで、シンプルかつ確実にリージョン制限を実装できます。グローバルサービスの例外処理を忘れずに設定し、適切にテストを行うことが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した会社を引き継ぎ、代表に就任。

コメント

コメントする

目次