既知の望ましくないホストの攻撃から Elastic Beanstalk 環境を保護するにはどうすればよいですか。

所要時間2分
0

AWS Elastic Beanstalk インスタンスが、不要なホスト名からのリクエストを受け取ります。

解決策

Application Load Balancer を使用する Elastic Beanstalk 環境では、AWS WAF をカスタムリソースとして使用して、インスタンスを攻撃から守ります。1 つのホスト名をブロックするか、複数のホスト名をブロックするかを選択できます。

1 つのホスト名をブロックする

1.    .ebextensions ディレクトリwaf.config コンフィギュレーションファイルを作成します。

2.    この例に基づいて、waf.config ファイルを更新してください。

option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: application
  aws:elasticbeanstalk:customoption:
    BlockedHost1: 'exampletoblock.com'
Resources:
  BlockedHostnames:
    Type: "AWS::WAFv2::RegexPatternSet"
    Properties:
      Description: 'List of Hostnames to be block by WebACL'
      Name: BlockedHostsSet
      RegularExpressionList:
         - { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost1" }}
      Scope: REGIONAL

WafAcl:
    Type: "AWS::WAFv2::WebACL"
    Properties:
      Description: "Web ACL to Block requests from unknown hosts on AWSEBV2LoadBalancer"
      Name: "BlockHostACL"
      Scope: REGIONAL
      DefaultAction:
        Allow: {}
      VisibilityConfig:
        SampledRequestsEnabled: true
        CloudWatchMetricsEnabled: true
        MetricName: BlockHostACLMetric
      Rules:
        - Name: BlockedHostsRule
          Priority: 1
          Action:
            Block: {}
          VisibilityConfig:
            SampledRequestsEnabled: true
            CloudWatchMetricsEnabled: true
            MetricName: UnknownHostRule1
          Statement:
            RegexPatternSetReferenceStatement:
              Arn: '`{ "Fn::GetAtt" : ["BlockedHostnames", "Arn" ]}`'
              FieldToMatch:
                 SingleHeader:
                  Name: Host
              TextTransformations:
                 - Priority: 0
                  Type: NONE

WebACLAssociation:
    Type: AWS::WAFv2::WebACLAssociation
    Properties:
       ResourceArn: '`{ "Ref" : "AWSEBV2LoadBalancer" }`'
      WebACLArn: '`{ "Fn::GetAtt" : ["WafAcl", "Arn" ]}`'

**注:**BlockedHost1 は、Elastic Beanstalk 環境からブロックしたいホスト名に置き換えてください。

3.    前のステップの waf.config ファイルを使用して、Elastic Beanstalk 環境を作成または更新します。

**重要:**Application Load Balancer のない既存の Elastic Beanstalk 環境で waf.config ファイルを実行すると、エラーが発生します。ロードバランサータイプは環境の作成時にのみ定義できるため、エラーが発生します。ロードバランサータイプをブルー/グリーンデプロイに変更します。詳細については、](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-alb.html)Application Load Balancer の設定[を参照してください。

4.    BlockedHost1 が Elastic Beanstalk 環境へのリクエスト送信がブロックされていることを確認するには、まずターミナルを開きます。次に、exampletoblock.com から送信されるリクエストをシミュレートするには、以下のコマンドを実行します:

$ curl -I -H 'host: exampletoblock.com' http://YOUR-ENV-NAME.YOUR-ENV-ID.AWS-REGION.elasticbeanstalk.com

注:exampletoblock.com を、ブロックしたいwaf.config に設定されているホスト名に置き換えてください。http://YOUR-ENV-NAME.YOUR-ENV-ID.AWS-REGION.elasticbeanstalk.comElastic Beanstalk environment URL に置き換えてください。

ホスト名がブロックされている場合、次の例のような出力が表示されます:

> HTTP/1.1 403 Forbidden
  Server: awselb/2.0
  Date: Mon, 20 Apr 2020 17:31:14 GMT
  Content-Type: text/html
  Content-Length: 134
  Connection: keep-alive

5.    通常のリクエストをシミュレートするには、次のコマンドを実行します:

$ curl -I http://ENV-NAME.ENV-ID.eu-west-1.elasticbeanstalk.com

リクエストが成功すると、成功した 200 ステータスコードが表示されます。次のような出力が表示されます:

> HTTP/1.1 200 OK
  Date: Mon, 20 Apr 2020 17:38:04 GMT
  Content-Type: text/html
  Content-Length: 3352
  Connection: keep-alive
  Server: nginx/1.16.1

複数のホスト名をブロック

複数のホスト名をブロックするには、RegexPatternSet を使用するウェブアクセスコントロールリスト (WEB ACL) にホスト名を追加します。waf.config ファイルに、RegularExpressionList のカスタムオプションとして追加のホスト名を追加します:

option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: application
  aws:elasticbeanstalk:customoption:
    BlockedHost1: 'exampletoblock.com'
    BlockedHost2: 'anothertoblock.com'
Resources:
  BlockedHostnames:
    Type: "AWS::WAFv2::RegexPatternSet"
    Properties:
      Description: 'List of Hostnames to be block by WebACL'
      Name: BlockedHostsSet
      RegularExpressionList:
         - { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost1" }}
         - { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost2" }}
      Scope: REGIONAL

関連情報

Elastic Beanstalk 環境リソースを追加してカスタマイズする

AWS公式
AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ