ELB のインバウンド許可ルールの確認

ELB に必要なクライアントのアクセスだけを許可し、受信経路を確認してください。

説明

ELB に接続されたセキュリティグループで、必要なクライアントとリスナーポートへの受信を許可しないと、正常なリクエストが遮断される場合があります。一つのグループにルールがなくても、ほかの接続済みグループや独立したルールがアクセスを許可する場合があるため、実際に適用される全ルールを確認する必要があります。

必要な受信許可と、過度に広い公開アクセスを区別してください。ルールを追加しても、ルーティング、リスナー、アプリケーション認証は構成されません。

想定される影響

  • 必要なリクエストが遮断され、クライアントがサービスを利用できなくなる場合があります。
  • 復旧のために広い一時ルールを追加すると、意図しないクライアントのアクセス範囲が拡大するおそれがあります。

対処方法

ELB に接続された全セキュリティグループを確認し、承認済みクライアントからリスナーポートへのアクセスを許可してください。独立した AWS::EC2::SecurityGroupIngress を使う場合は、GroupId が実際の ELB セキュリティグループを指すことを確認してください。対象インスタンスのルールは別途管理し、ルーティングと実際のリクエスト処理を試験してください。

例

セキュリティグループの関連付けとルールだけを示す抜粋です。リスナーと ELB のサブネット設定は省略しています。VpcId を省略したグループには、そのリージョンのデフォルト VPC が必要です。

変更前

yaml
Resources:
  LoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB security group

  MyLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      SecurityGroups:
        - !GetAtt LoadBalancerSecurityGroup.GroupId

このグループには受信許可を定義していません。ほかのルールでも許可しなければ、新しいリクエストは遮断されます。

変更後

yaml
Resources:
  LoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB security group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0

  MyLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      SecurityGroups:
        - !GetAtt LoadBalancerSecurityGroup.GroupId

すべての IPv4 アドレスから TCP 443 へのアクセスを許可します。公開サービスに必要な場合だけこの範囲を使い、内部サービスは承認済みの送信元に限定してください。ポート番号だけでは HTTPS は構成されません。

参考資料