AWS IAMで特定のリージョンのみアクセス可能なIAMユーザーを作成してみた

AWS IAMで特定のリージョンのみアクセス可能なIAMユーザーを作成してみた

Clock Icon2024.08.18

もしかして、AWSコンソールページで作業をする時にいつの間にか他のリージョンに変更されていたりする経験ありますか?
昔にリージョンが変更されているのを知らなくて作成したリソースがなくなったと思って、困った時がありました。
それで特定のリージョンのみ使用するのであれば、リージョンが変更されて何かミスが発生しないようにIAMを使用してリージョンに対する権限を許可、制限する方法をまとめました。

IAMユーザーの作成

まずは、AWSコンソールでIAMページに移動して新しいユーザーを作成します。

IAMのユーザーページに入って新しいIAMユーザーを作成します。

01

設定内容は下記のようにします。
コンソールパスワードの設定は自由にしても問題ないですが、ブログではデフォルト値で設定します。

  • ユーザー名: 任意(ex.region-user)
  • AWS マネジメントコンソールへのユーザーアクセスを提供する - オプションにチェック
  • 自動生成されたパスワードを選択(デフォルト値)
  • ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨にチェック(デフォルト値)

02

次のステップで権限の設定はできますが、一旦は何の設定もしないまま次のページに行きます。

最後に確認のページで設定した内容が確認できます。
「許可の概要」には権限の設定を何もしてないので、リソースなしになっているはずです。
設定したことに問題がなければユーザーを作成します。

03

IAMユーザーが作成されると、ログイン情報が表示されます。
右下の.csv ファイルをダウンロードで .csv ファイルでもダウンロードできます。
ここで表示されたログイン情報は二度と確認できないので、 ファイルで保存しておくのを推奨します。
表示されている情報でコンソールにログインする予定なので、必ず記憶しておきましょう。

04

ユーザーリストに作成したIAMユーザーが追加されました。

05

作成したIAMユーザーでログイン

作成したIAMユーザーには何の権限も付与してないので、ログインしてもできることは何もないですが、一旦ログインしてみます。

上で保存したログイン情報の中でサインインURLをブラウザで検索します。
そうすると、ログインページが表示されます。
アカウント ID (12 桁) またはアカウントエイリアスにはすでにアカウントIDが入力されているはずです。(なかったら入力してください)
ユーザー名とパスワードを入力してログインをします。

06

ログインをすると、パスワードを変更する画面が表示されます。(ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨をチェックしたので)
初回ログインの時に表示される画面で、実際に使用するパスワードに設定してログインを進めます。

07

ログインすると、コンソール画面が出ます。
しかし、権限がないので、画面のいろんなところに 「アクセス拒否」 と表示されています。

08

VPC ページに入ってみても権限がないので何も確認できません。

09

権限付与

ログインされることまで確認できたら、今回はIAMユーザーに権限を付与してみます。
IAMユーザーからログアウトしてIAMユーザーの作成に使用したユーザーにログインして作業します。

全ても権限は JSON 形式で作成しました。

東京リージョンのみ操作可能な権限

まずは東京リージョンのみアクセス可能にする権限を作成してみます。
東京リージョンにある全てのサービスは操作できますが、他のリージョンでは操作できないです。

東京リージョンのみ
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        }
    ]
}

IAMユーザーにログインして確認してみると、権限で設定したように東京リージョンにはアクセスできますが、他のリージョンにはエラーが表示されます。

<東京リージョン↓>
10

11

<バージニア北部リージョン↓>
12
13

以下の例からは結果確認は省略します。

東京とバージニア北部リージョンに操作可能な権限

今回は複数リージョン(東京リージョンとバージニア北部リージョン)の操作だけを許可する権限です。

東京とバージニア北部リージョンのみ
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:RequestedRegion": [
                        "ap-northeast-1",
                        "us-east-1"
                    ]
                }
            }
        }
    ]
}

逆にバージニア北部のみ操作できない権限

バージニア北部のみ操作不可
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-1"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

東京リージョンの特定サービスのみ操作可能な権限

東京リージョンの特定サービスのみ
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:Describe*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "autoscaling:Describe*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        }
    ]
}

まとめ

このようにIAMユーザーに権限を付与することで特定のリージョンのみアクセスすることができます。
AWSを使いながら特定のリージョンだけを使いたい場合や、逆に特定のリージョンへのアクセスを制限したい場合には、リージョン権限を設定したIAMユーザーを使ってみるのはいかがでしょうか。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.