説明
セキュリティグループのルールで 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に絞っています。このアドレスとポートが実際に必要な通信に合っているかは別途確認してください。