説明
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 は構成されません。