API Gatewayのアクセス制限をweb ACLでした話

こんにちは。hacknoteのr.katoです。

今回はweb ACLを使ってIPアドレスを元にアクセス制限をかける方法を紹介していきます。
その設定対象として、API Gatewayが一番簡単だったので、API Gatewayを使っています。

アクセス制限できているかは、API GatewayにcurlでPOSTした際の返り値とAPI GatewayにリンクしているLambdaのログで確認しました。

用意するもの

  • LambdaのリンクしているAPI Gateway
  • web ACL

web ACLの設定方法

  1. AWSコンソールにログインして、WAF&Shieldにアクセスします。

  1. Create web ACLをクリックします。

  1. Nameは任意のものを、RegionはAPI Gatewayがある所を、選択すると下の選択肢が変化するので任意のAPI Gatewayとそのステージを選択して、Nextをクリックします。

  1. IP match conditionsのCreate conditionをクリックします。

任意のNameとRegionを入力、選択し、アクセス制限をかけたい、IPアドレスを入力します。(参考:IPv6の話)
そして、Add IP address or rangeをクリックします。その後、Create rulesに進みます。

  1. Create ruleをクリックします。

  1. 任意のNameを入力します。赤枠のところはdoesn't , originate from an IP address in 手順4番で作ったものを選択してAdd conditionをクリックし、その後、createをクリックします。

  1. Default actionは任意のものを、今回はBlockを選択し、Review and createをクリックします。そして、作成完了まで待ちます。

結果

次の画像が実際にAPI Gateway にcurlでPOSTした時のterminalの画面です。
赤枠で囲ってある範囲が、アクセス制限前で、その後が制限後です。

制限前はLambdaの返り値のnullが返ってきていますが、制限後はAPI Gatewayで弾かれているため、Forbiddenが返ってきています。