全 IPv4 アドレスとの通信を許可するセキュリティグループ

Ansible のセキュリティグループで、全 IPv4 アドレスとの受信・送信通信を許可する設定を確認します。

説明

セキュリティグループのルールで cidr_ip に 0.0.0.0/0 を指定すると、指定したポートとプロトコルについて、すべての IPv4 アドレスからの受信、またはすべての IPv4 アドレスへの送信を許可します。内部アプリケーションやデータベースに必要な範囲を超えてアクセスを許可しないよう、設定を確認してください。

受信ルールは通信元を、送信ルールは通信先を制限します。送信先が制限されていないだけで、外部からデータベースへ接続できるわけではありません。インターネットから到達できるかどうかは、パブリック IP アドレス、ルーティング、ポートなどにも左右されます。

想定される影響

  • 外部から到達可能なサービスで受信元の範囲が広いと、望まない接続を試みられやすくなります。データへアクセスできるかどうかは、サービスの認証や権限にも依存します。
  • 送信先の範囲が必要以上に広いと、侵害されたワークロードが通信できる外部の宛先も増える可能性があります。
  • 公開 Web サービスなど、全アドレスからの通信が必要な場合もあります。ポート、通信方向、業務上の必要性を合わせて判断してください。

対処方法

  • 受信元と送信先を分けて確認し、必要な CIDR、ポート、プロトコルだけを許可してください。
  • 対応している場合は、アプリケーションサーバーのセキュリティグループを参照するか、管理用の固定 IP 範囲を指定してください。プライベートアドレスの全範囲を許可することも、必要以上に広い設定になり得ます。
  • IPv6 の全アドレスを表す ::/0 のルールも確認し、変更後に必要な通信が維持されているかテストしてください。

例

以下は通信範囲の違いを示す不完全な構成例です。vpc_id: 12345 は実際の VPC ID ではなく、最初の例の eu-west-1a はリージョンではなくアベイラビリティーゾーンです。RDS の設定や、セキュリティグループの実際の関連付けも利用環境に合わせて確認してください。そのままデプロイしないでください。

変更前

yaml
- name: create minimal aurora instance in default VPC and default subnet group
  community.aws.rds_instance:
    engine: aurora
    db_instance_identifier: ansible-test-aurora-db-instance
    instance_type: db.t2.small
    password: "{{ password }}"
    username: "{{ username }}"
    cluster_id: ansible-test-cluster
    db_security_groups: ["example"]

- name: example ec2 group
  ec2_group:
    name: example
    description: an example EC2 group
    vpc_id: 12345
    region: eu-west-1a
    rules:
      - proto: tcp
        from_port: 80
        to_port: 80
        cidr_ip: 0.0.0.0/0
      - proto: tcp
        from_port: 22
        to_port: 22
        cidr_ip: 10.0.0.0/8
    rules_egress:
      - proto: tcp
        from_port: 80
        to_port: 80
        cidr_ip: 0.0.0.0/0

変更後

yaml
- name: example ec2 group
  ec2_group:
    name: example-db
    description: database access group
    vpc_id: 12345
    region: eu-west-1
    rules:
      - proto: tcp
        from_port: 3306
        to_port: 3306
        cidr_ip: 10.1.1.1/32
    rules_egress:
      - proto: tcp
        from_port: 443
        to_port: 443
        cidr_ip: 10.1.1.1/32

補足:

  • 変更前: TCP ポート 80 の受信元と送信先に、それぞれ 0.0.0.0/0 を指定しています。実際のデータベースに関連付けられたセキュリティグループ、ポート、ネットワーク経路は別途確認してください。
  • 変更後: 各方向の範囲を 10.1.1.1/32 に絞っています。このアドレスとポートが実際に必要な通信に合っているかは別途確認してください。

参考資料