説明
Crossplane の SecurityGroup で ipRanges.cidrIp を 0.0.0.0/0 に設定すると、指定したポートとプロトコルについて、すべての IPv4 アドレスからの通信を許可します。実際にインターネットから接続できるかどうかは、接続先リソース、公開アドレス、ルーティングなどにも左右されます。セキュリティグループ自体が公開インターフェースを作成したり、データベース認証を無効にしたりするわけではありません。
データベースへのアクセスは、必要なアプリケーションと承認された管理経路に制限する必要があります。Composition に広い許可範囲が含まれていると、複数のサービスに同じ設定が適用される可能性があります。
想定される影響
- リソースにインターネットから到達できる場合、外部のクライアントが許可されたポートに接続やログインを試みることができます。
- 認証情報の悪用やサービスの脆弱性を通じて、データの漏えいや改ざんにつながる可能性があります。
対処方法
0.0.0.0/0を、アクセスが必要なクライアントの狭い CIDR または適切な送信元セキュリティグループに置き換えてください。プライベートアドレスの範囲全体を信頼しないでください。- 必要なポートとプロトコルだけを許可し、ほかに接続されているセキュリティグループと実際のネットワーク経路も確認してください。
- Composition の既定値も修正し、承認された接続が成功することと、不要な外部接続が遮断されることを確認してください。
例
以下はセキュリティグループの受信ルールを示す部分的な例です。リソース名が異なるため、変更後の定義を追加するだけでは既存のルールは変わりません。
変更前
yaml
apiVersion: ec2.aws.crossplane.io/v1beta1
kind: SecurityGroup
metadata:
name: ec2-rule2
spec:
forProvider:
region: us-east-1
ingress:
- fromPort: 5432
toPort: 5432
ipProtocol: tcp
ipRanges:
- cidrIp: 0.0.0.0/0
description: Everywhere
TCP ポート 5432 に対して、すべての IPv4 アドレスからの通信を許可しています。実際のデータベースの公開範囲は、接続先リソースとネットワーク構成によって決まります。
変更後
yaml
apiVersion: ec2.aws.crossplane.io/v1beta1
kind: SecurityGroup
metadata:
name: ec2-rule1
spec:
forProvider:
region: us-east-1
ingress:
- fromPort: 5432
toPort: 5432
ipProtocol: tcp
ipRanges:
- cidrIp: 10.0.0.0/8
description: Internal network
送信元を 10.0.0.0/8 に制限しています。ただし、このプライベートアドレスの範囲も非常に広いため、アクセスが必要なクライアントに合わせてさらに絞り込んでください。