送信元 IPでAWSアクセスを制限する際のIAMポリシーの注意点

記事タイトルとURLをコピーする

はじめに

こんにちは!アプリケーションサービス部エデュケーショナルサービス課(以下ES課)の 三角(みすみ)です。
今回は送信元 IPでAWSアクセスを制限する際のIAMポリシーの注意点を実例を交えて紹介します!

送信元 IPでAWSアクセスを制限する際のIAMポリシーを作成する

「AWS IP制限 IAM」のような検索ワードでトップに出てくる下記の記事を元にIAMポリシーを作成します。

docs.aws.amazon.com

IAMポリシーの例

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

実際の挙動を確認する

作成したIAMポリシーを適当なIAMユーザにアタッチします。
また、挙動を確認する為に「AdministratorAccess」もアタッチします。
この状態で「Systems Manager」→「フリートマネージャー」→「適当なEC2インスタンス」→「EBS ボリューム」にアクセスした場合、以下のエラーが発生しました。

原因

AWSサポートにも確認したところ、下記の挙動が原因でした。

  1. SystemsManagerからフリートマネージャでEBSボリュームなどを取得する際にRunCommandが実行される。
  2. RunCommandの実行時、AWS内部のIPアドレスでIAMユーザーの認証情報を使用してEBSボリュームの取得を実行する。
  3. AWS内部のIPアドレスAWSアクセスを制限したIPの範囲外である為、AccessDenied によりEBSボリュームの取得が失敗する。

対策

この対策を実施するにはAWSアクセスを制限したIPの範囲外かつ、aws:ViaAWSServiceがfalse の場合にのみ Deny を行うポリシーに変更する必要があります。
これで問題なくアクセス可能となりました。
aws:ViaAWSServiceの説明は公式に下記の通り記載されています。
docs.aws.amazon.com

IAMポリシーの修正

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

送信元 IPでAWSアクセスを制限する際のIAMポリシーの注意点

最後に送信元IPでAWSアクセスを制限する際のIAMポリシーの注意点を纏めます
この記事が困っている方に届けばとてもうれしいです!

  • IAMポリシーで、送信元 IPでAWSアクセスを制限した際、AWS内部のIPアドレスで処理を実施するAWSサービスはエラーが発生する。
  • aws:SourceIp 条件キーと aws:ViaAWSService 条件キーの組み合わせでIAMポリシーを修正することで対応可能

三角悠生(執筆記事の一覧)

CI2部2課

2022年9月入社。バイクが好き。主に初心者向けの記事を書いていきます。