Tomo's IT Blog

技術的な調査メモ

AWS: 特定のIPアドレスからしかアクセスできないIAMユーザを作成してみる

AWSのセキュリティの基本として、普段の運用管理は適切なロールを付与したIAMユーザにより実施して、ルートアカウントでは実施しないことが推奨されています。
特定のIAMユーザでAWSにログインする際に、例えば会社や自宅のIPアドレスからしかアクセス出来ないように設定しておけば、よりセキュリティの向上が見込めます。

ということで、今回はIAMユーザが特定のIPアドレスからしかアクセス出来ないように制御するための方法を調べてみたいと思います。

まずはIAMユーザを作成する

AWSコンソールで、IAM>ユーザ>ユーザを追加でユーザを追加します。
アクセス権限はあとでIPアドレスで制御が効いていることを確認することができればなんでもいいです。
例えば、SystemAdminなどを追加しておきます。また、AWSコンソールへのアクセスできるようにチェックしておきます。

ここで作成したIAMユーザで、AWSコンソールにログインしてIAMサービスにアクセスできることを確認しておきます。

特定IPのみからしかアクセスできないポリシーを作成

以下に色々なポリシーの例が載っていますので、こちらを参考にして作成してみましょう。

docs.aws.amazon.com

ここに、IPアドレスを制限する例が載っています。

"承認された IP アドレスまたは範囲以外からのブロックリクエスト"

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {"NotIpAddress": {"aws:SourceIp": [
      "192.0.2.0/24",
      "203.0.113.0/24"
    ]}}
  }
}

これを使って、IPアドレスを制限するポリシーを作成します。
まずは、ルートアカウントでAWSコンソールにログインして、IAM>ポリシーから新規にポリシーを作成します。
例えば、RestrectedIPなどのポリシー名で、上記の内容をそのまま設定します。IPアドレス部分はまずはそのままにしておいて、ちゃんと制限がかかりエラーとなることをまずは確認します。

IP制限ポリシーをユーザにアタッチ

IAM>ユーザで先ほど作成したユーザを選択して"アクセス権限の追加"でRestrectedIPポリシーを追加します。
その後に、AWSコンソールでIAMユーザでログインして、IAMサービスにアクセスしてみて下さい。

先ほどと違って、以下のようなエラーが表示されます。

リクエストの処理中に次のエラーが発生しました:
User: arn:aws:iam::027687984837:user/tomo is not authorized to perform: iam:GetAccountSummary
User: arn:aws:iam::027687984837:user/tomo is not authorized to perform: iam:ListAccountAliases

自分のIPアドレスをセットしてアクセスが出来ることを確認する

自分のインターネット向けのIPアドレスを確認するには、以下のURLにアクセスします。

http://checkip.amazonaws.com/

ここで表示されたIPアドレスを先ほど作成したRestrectedIPポリシーにセットします。

    "Condition": {"NotIpAddress": {"aws:SourceIp": [
      "XXX.XXX.XXX.XXX/32"
    ]}}

再度、IAMユーザでAWSコンソールにログインしてIAMサービスにアクセスできるか確認してみましょう。
今度はアクセスできると思います。