AppSyncのセキュリティ対策!WAFを使って不正アクセスから守る🚨

AppSyncのセキュリティ対策!WAFを使って不正アクセスから守る🚨

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

昨年2020年の10月に、AppSync でWAFがサポートされましたね!AppSync のセキュリティ対策について悩んでる方、ぜひ WAF を適用しましょう。

今回は WAF の適用方法や AppSync のセキュリティ対策について簡単に解説します。よろしくお願いいたします!

想定する読者

  • AppSync のセキュリティ対策が気になっているヒト
  • AppSync をこれから利用したいヒト

はじめに

AWS のセキュリティ対策に必要不可欠な AWS WAF、以前は CloudFront やALB、API Gateway にしか適用できませんでしたが、アップデートによりAppSync でも使えるようになりました。

既存の AppSync に対してもお手軽に WAF を適用できますので、ぜひ試していただければと思います。

WAFの適用方法

AppSync に WAF を適用する方法は簡単です。この記事では GUI コンソール画面、CloudFormation 、この2つの方法で WAF を有効化するプロセスをご紹介します。

GUIコンソール画面でWAFを有効化

GUI コンソール画面の場合は対象の AppSync を選択し、設定画面に移動してください。すると WAF を有効無効にできるトグルスイッチがありますので、そちらを有効にしましょう。

AWS AppSync > API名 > Settings

有効にすると、Web ACL(WAF のアクセスコントロールリスト)を選択できるので、選択したあとに設定を保存すれば WAF の適用が完了します。

Web ACL 未作成の場合は、「Create Web ACL」というボタンがありますので、そちらで作成してから AppSync の設定を保存してください。

「Create Web ACL」ボタンを押すとこちらの画面に移動します

いかがでしょう?とても簡単に WAF を有効にできますね。

CloudFormation で WAF を有効化

では、次に CloudFormation で WAF を有効にする方法をご紹介いたします。

さっそくコードを見てみましょう。

Resources:
  GraphQLApi:
    Type: AWS::AppSync::GraphQLApi
    Properties:
      AuthenticationType: API_KEY #required
      Name: AppSyncDemo #required

  WebACL:
    Type: AWS::WAFv2::WebACL
    Properties:
      Name: appsyncTestACL
      DefaultAction: 
        Block: {}
      Scope: REGIONAL
      VisibilityConfig:
        CloudWatchMetricsEnabled: true
        MetricName: appsyncTestACL
        SampledRequestsEnabled: true
      Rules:
        -
          Action: 
            Allow: {}
          Name: myIP
          Priority: 0
          Statement:
            IPSetReferenceStatement:
              Arn: !GetAtt IPSet.Arn
          VisibilityConfig:
            CloudWatchMetricsEnabled: true
            MetricName: appsyncTestRule
            SampledRequestsEnabled: true

  IPSet:
    Type: "AWS::WAFv2::IPSet"
    Properties:
      Addresses:
        - xx.xx.xx.xx/32
      IPAddressVersion: IPV4
      Name: appsyncTestIpset
      Scope: REGIONAL

  WebACLAssociation:
    Type: AWS::WAFv2::WebACLAssociation
    Properties: 
      ResourceArn: !GetAtt GraphQLApi.Arn 
      WebACLArn: !GetAtt WebACL.Arn

AppSync の WAF 有効化は、AppSync ではなく WAF の方から有効化します。

リソースタイプ「AWS::WAFv2::WebACLAssociation」を見ると、AppSyncと Web ACL を関連付けていることが分かると思います。必要なものは、AppSync の API の ARN と、WAF の Web ACL の ARN の2つのみです。とてもシンプルな記述で分かりやすいと思います。

AppSync の CloudFormation のテンプレートリファレンスを見て、どこにあるんだと思われた方、WAFv2 のところに記載がありますのでご注意ください(WAF ではなく WAFv2 ですのでこちらも気をつけてください)。

WAFが有効なのか試してみる

サンプルコードでは、1つのグローバルIP を許可しそれ以外は拒否するルールを作成する記述となっています。それをデプロイしてみて、AppSync に対してクエリを実行してみました。

Action列のところで一部のIPを拒否していることが分かります

WAF のコンソール画面にてログを確認すると、一部の IP を拒否していることが分かります。想定通りの挙動です。

関連記事

まとめ

AppSync だからといって WAF の設定に特別なアプローチはありませんので、いつも通りに WAF を設定できます。AppSync のセキュリティ対策に WAF は必要不可欠かと思いますので、ぜひ適用した状態で運用していきましょう。

このブログでは、GraphQL や GraphQL のマネージドサービスである AWS AppSync の記事を随時公開しておりますので、ご興味のある方はほかの記事ものぞいてみてください!

AppSync に関する開発は、お気軽にお問い合わせください。