AWSマネジメントコンソール操作を特定IPのみに制限する&拒否ポリシーを重ねがけするとどうなる?【AWS】

IAM

AWSマネジメントコンソールへのログインを、特定のIPアドレスからのみに制限する方法を検証してみました。IAMポリシーを利用することで簡単に実現できます。

IP制限用ポリシーの作成

まずはIP制限を行うためのIAMポリシーを作成します。
ポリシー名は deny-access-ip とします。

以下のポリシーでは、指定したIPアドレス以外からのアクセスをすべて拒否(Deny)する設定になっています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            xxx.xxx.xxx.xxx/32"
          ]
        }
      }
    }
  ]
}

※自分のGIPは下記で確認できます

https://www.cman.jp/network/support/go_access.cgi

参考)CMANのIPアドレス確認

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

作成したポリシーをIAMユーザー(例:switch-user)にアタッチします。

その後、AWSマネジメントコンソールへログインしてみます。

ログイン確認

設定したIPアドレスからログインした場合は、問題なくコンソールにアクセスできます。

許可されていないIPからログイン

別のIPアドレスからログインした場合、
AWSマネジメントコンソールにはログインできるものの、リソースを閲覧できない状態になります。

これはポリシーによって すべてのアクションがDenyされているためです。

許可IPを追加する場合

許可するIPを追加する場合は、以下のように aws:SourceIp にIPアドレスを追加します。

"aws:SourceIp": [
  "xxx.xxx.xxx.xxx/32",
  "yyy.yyy.yyy.yyy/32"
]

検証:IP制限ポリシーをもう1つ追加した場合

通常は既存ポリシーを修正すればよいのですが、既存リソースを変更したくないケースもあると思います。
そこで今回は検証として、もう1つIP制限ポリシーを作成してユーザーにアタッチした場合の挙動を確認してみました。(理想は追加したアタッチポリシーと既存のアタッチポリシーのIPで操作できたい)

イメージとしては以下のように、2つのポリシーを同時にアタッチします。

  • deny-access-ip
  • deny-access-add-ip

deny-access-ip ポリシー

deny-access-add-ip

追加ポリシーの作成

新しいポリシーを以下の内容で作成します。
ポリシー名は deny-access-add-ip とします。

作成後、先ほどと同様にアタッチします。

検証結果

結果として、どのIPアドレスからもアクセスできない状態になってしまいました。

これはIAMの評価ロジックにより、

  • 片方のポリシーでは許可されていても
  • もう片方のポリシーでDenyされてしまう

ため、最終的にDenyが優先されてしまうためと考えられます。
IAMでは AllowよりもDenyが優先されるというルールがあるため、このような挙動になります。

まとめ

AWSマネジメントコンソールのIP制限は、IAMポリシーを利用することで簡単に実装できます。
ただし、IP制限ポリシーを複数作成してしまうと、意図せずすべてのアクセスが拒否される可能性があります。

そのため、IP制限を追加する場合は
ポリシーを増やすのではなく、既存ポリシーを修正する方法がおすすめです。