AWS WAF を使用して API を保護する
AWS WAF は、ウェブアプリケーションと API を攻撃から保護するウェブアプリケーションファイアウォールです。お客様が定義するカスタマイズ可能なウェブセキュリティルールと条件に基づいて、ウェブリクエストを許可、ブロック、またはカウントする一連のルール (ウェブアクセスコントロールリスト (ウェブ ACL) と呼ばれます) を設定することができます。詳細については、「AWS WAF の仕組み」を参照してください。
AWS WAF を使用して、SQL インジェクションやクロスサイトスクリプティング (XSS) 攻撃などの一般的なウェブの脆弱性から API Gateway API を保護できます。これらは、API の可用性とパフォーマンスに影響を与え、セキュリティを侵害したり、過剰なリソースを消費したりする可能性があります。たとえば、指定した IP アドレス範囲からのリクエスト、CIDR ブロックからのリクエスト、特定の国またはリージョンからのリクエスト、悪意のある SQL コードを含むリクエスト、悪意のあるスクリプトを含むリクエストを許可またはブロックするルールを作成できます。
また、HTTP ヘッダー、メソッド、クエリ文字列、URI、およびリクエストボディの指定された文字列または定型表現パターン (最初の 8 KB に制限されます) に一致するルールを作成することもできます。さらに、特定のユーザーエージェント、悪質なボット、またはコンテンツスクレーパーからの攻撃をブロックするルールを作成できます。たとえば、レートベースのルールを使用して、継続的に更新される後続の 5 分間で、各クライアント IP によって許可されるウェブリクエストの数を指定できます。
AWS WAF は、ウェブの脆弱性に対する防御の最前線です。API で AWS WAF が有効になっている場合は、リソースポリシー、IAM ポリシー、Lambda オーソライザー、および Amazon Cognito オーソライザーなど他のアクセスコントロール機能の前に AWS WAF ルールが評価されます。たとえば、AWS WAF がリソースポリシーで許可されている CIDR ブロックからのアクセスをブロックした場合、AWS WAF が優先され、リソースポリシーは評価されません。
API に対して AWS WAF を有効にするには、次の操作を行う必要があります。
-
AWS WAF コンソール、AWS SDK、または CLI を使用して、AWS WAF マネージドルールと独自のカスタムルールの自由な組み合わせが含まれるリージョンウェブ ACL を作成します。詳細については、「AWS WAF の開始方法」および「ウェブアクセスコントロールリスト (ウェブ ACL) の作成と設定」を参照してください。
重要 API Gateway には、リージョンウェブ ACL が必要になります。
-
AWS WAF リージョンウェブ ACL を API ステージに関連付けます。これは、AWS WAF コンソール、AWS SDK、または CLI を使用するか、API Gateway コンソール、AWS SDK、または CLI を使用して実行できます。
API Gateway コンソールを使用して AWS WAF リージョンウェブ ACL を API Gateway API ステージと関連付けるには
API Gateway コンソールを使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次のステップを実行します。
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
[API] ナビゲーションペインで API を選択し、[ステージ] を選択します。
-
[ステージ] ペインで、ステージの名前を選択します。
-
[ステージエディター] ペインで、[設定] タブを選択します。
-
リージョンウェブ ACL を API ステージに関連付けるには
-
[AWS WAF ウェブ ACL] ドロップダウンリストで、このステージに関連付けるリージョンウェブ ACL を選択します。
注記 必要なウェブ ACL がまだ存在しない場合は、 [WebACL の作成] を選択します。次に、[Go to AWS WAF] (AWS WAF に移動) を選択して、AWS WAF コンソールを新しいブラウザタブで開き、リージョンウェブ ACL を作成します。次に、API Gateway コンソールに戻り、ウェブ ACL をステージに関連付けます。
-
-
[Save Changes] を選択します。
AWS CLI を使用して、AWS WAF リージョンウェブ ACL を API Gateway API ステージに関連付ける
AWS CLI を使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次の例にあるように、associate-web-acl
コマンドを呼び出します。
aws waf-regional associate-web-acl \ --web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \ --resource-arn 'arn:aws:apigateway:
{region}
::/restapis/4wk1k4onj3/stages/prod'
AWS WAF REST API を使用して AWS WAF リージョンウェブ ACL を API ステージと関連付ける
AWS WAF REST API を使用して AWS WAF リージョンウェブ ACL を既存の API Gateway API ステージに関連付けるには、次の例にあるように、AssociateWebACL
コマンドを呼び出します。
import boto3 waf = boto3.client('waf-regional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:
{region}
::/restapis/4wk1k4onj3/stages/prod' )