広い送信元範囲を許可するセキュリティグループ

セキュリティグループの受信を、実際に接続が必要なクライアントに限定してください。

説明

セキュリティグループで広いCIDR範囲を許可すると、サービスやデータベースに接続する必要がないシステムまで含まれる可能性があります。公開ネットワークだけでなく、内部ネットワークでも業務上必要な送信元に限定してください。

適切なアクセス範囲はプレフィックス長だけでは判断できません。実際のクライアント、プロトコル、ポート、接続経路を併せて確認する必要があります。ネットワーク接続が許可されても、データベースの認証と権限は別途適用されます。

想定される影響

  • 接続可能なシステムが増え、不要な接続試行や脆弱性を悪用する機会が増える可能性があります。
  • 許可範囲内のシステムが侵害されると、そこを経由した内部への接続試行が可能になります。

対処方法

  • EC2のCidrIp・CidrIpv6を必要なアドレスに絞り、ポートとプロトコルも制限してください。対応する接続では、アプリケーションのセキュリティグループの参照を検討してください。
  • 従来のRDS DBセキュリティグループのCIDRIPも、実際のクライアントに基づいて見直してください。現在のVPC内のRDSにはVPCセキュリティグループを使用してください。
  • 変更前に必要な通信を確認し、変更後は承認されたクライアントが接続でき、それ以外の接続が拒否されることをテストしてください。

例

VPCセキュリティグループを使うMySQLの例です。同じVPC内のDBサブネットグループ、対応するDBインスタンスクラス、管理者名を指定してください。パスワードはRDSがSecrets Managerで管理します。例のアドレスは実際に承認されたクライアントのアドレスに置き換えてください。

変更前

yaml
Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
  DBSubnetGroupName:
    Type: String
  DBInstanceClass:
    Type: String
  MasterUsername:
    Type: String
Resources:
  DBinstance1:
    Type: AWS::RDS::DBInstance
    Properties:
      VPCSecurityGroups:
        - Ref: DbSecurity
      AllocatedStorage: "20"
      DBInstanceClass: !Ref DBInstanceClass
      DBSubnetGroupName: !Ref DBSubnetGroupName
      Engine: mysql
      MasterUsername: !Ref MasterUsername
      ManageMasterUserPassword: true
    DeletionPolicy: Snapshot
    UpdateReplacePolicy: Snapshot
  DbSecurity:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: MySQL access
      VpcId: !Ref VpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          CidrIp: 10.0.0.0/23

内部の/23範囲からMySQLポート3306への接続を許可します。その範囲のすべてのアドレスにアクセスが必要か確認してください。

変更後

yaml
Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
  DBSubnetGroupName:
    Type: String
  DBInstanceClass:
    Type: String
  MasterUsername:
    Type: String
Resources:
  DBinstance1:
    Type: AWS::RDS::DBInstance
    Properties:
      VPCSecurityGroups:
        - Ref: DbSecurity
      AllocatedStorage: "20"
      DBInstanceClass: !Ref DBInstanceClass
      DBSubnetGroupName: !Ref DBSubnetGroupName
      Engine: mysql
      MasterUsername: !Ref MasterUsername
      ManageMasterUserPassword: true
    DeletionPolicy: Snapshot
    UpdateReplacePolicy: Snapshot
  DbSecurity:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: MySQL access
      VpcId: !Ref VpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          CidrIp: 10.0.1.10/32

単一のIPv4アドレスに限定します。そのアドレスが承認されたクライアントの実際のアドレスであることを確認し、他の関連付けられたセキュリティグループの追加許可も確認してください。

参考資料