AWS IAMで特定のリージョンのみアクセス可能なIAMユーザーを作成してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
もしかして、AWSコンソールページで作業をする時にいつの間にか他のリージョンに変更されていたりする経験ありますか?
昔にリージョンが変更されているのを知らなくて作成したリソースがなくなったと思って、困った時がありました。
それで特定のリージョンのみ使用するのであれば、リージョンが変更されて何かミスが発生しないようにIAMを使用してリージョンに対する権限を許可、制限する方法をまとめました。
IAMユーザーの作成
まずは、AWSコンソールでIAMページに移動して新しいユーザーを作成します。
IAMのユーザーページに入って新しいIAMユーザーを作成します。

設定内容は下記のようにします。
コンソールパスワードの設定は自由にしても問題ないですが、ブログではデフォルト値で設定します。
- ユーザー名: 任意(ex.region-user)
- AWS マネジメントコンソールへのユーザーアクセスを提供する - オプションにチェック
- 自動生成されたパスワードを選択(デフォルト値)
- ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨にチェック(デフォルト値)

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

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

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

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

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

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

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

権限付与
ログインされることまで確認できたら、今回はIAMユーザーに権限を付与してみます。
IAMユーザーからログアウトしてIAMユーザーの作成に使用したユーザーにログインして作業します。
全ても権限は JSON 形式で作成しました。
東京リージョンのみ操作可能な権限
まずは東京リージョンのみアクセス可能にする権限を作成してみます。
東京リージョンにある全てのサービスは操作できますが、他のリージョンでは操作できないです。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "ap-northeast-1"
                }
            }
        }
    ]
}
IAMユーザーにログインして確認してみると、権限で設定したように東京リージョンにはアクセスできますが、他のリージョンにはエラーが表示されます。
<東京リージョン↓>


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


以下の例からは結果確認は省略します。
東京とバージニア北部リージョンに操作可能な権限
今回は複数リージョン(東京リージョンとバージニア北部リージョン)の操作だけを許可する権限です。
{
    "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ユーザーを使ってみるのはいかがでしょうか。











