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

ELB からバックエンドやヘルスチェックに必要な接続を開始できることを確認してください。

説明

ELB のセキュリティグループで必要なバックエンド接続やヘルスチェックを許可しないと、リクエスト転送が失敗したり、対象が異常と判断されたりする場合があります。接続された全グループと独立したルールを合わせて確認する必要があります。

CloudFormation で新しいグループの egress ルールを省略すると、デフォルトで全アウトバウンド通信が許可されます。設定の省略を通信遮断とみなさず、実際のルールを確認してください。セキュリティグループはステートフルであり、許可された接続の応答用に逆方向のルールを別途追加する必要はありません。

想定される影響

  • 必要なバックエンドポートやヘルスチェック経路が遮断され、サービスに支障が生じる場合があります。
  • 障害対応で全宛先を許可すると、不要なアウトバウンドアクセスが残るおそれがあります。

対処方法

ELB の実際の送信ルールを確認し、バックエンドサービスとヘルスチェックに必要な宛先とポートを許可してください。対象インスタンスの受信ルールは、ELB セキュリティグループからの通信を許可するよう設定してください。ほかの接続済みグループの広い許可も確認し、実際のリクエストとヘルスチェックを試験してください。

例

セキュリティグループの関連付けと egress 設定だけを比較します。リスナーと ELB のサブネット設定は省略しています。VpcId には ELB と同じ VPC の実際の識別子を渡してください。

変更前

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

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

egress を明示しない新しいグループには、全送信を許可するデフォルトルールが追加されます。この抜粋が送信を遮断するわけではありません。

変更後

yaml
Resources:
  LoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB security group
      VpcId: !Ref VpcId
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

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

すべての IPv4 宛先に TCP 80 を許可します。実際のバックエンドの CIDR やセキュリティグループに宛先を限定し、ヘルスチェックのポートも確認してください。このルール自体は HTTP データを暗号化しません。

参考資料