すべての IPv4 アドレスを許可するセキュリティグループのルール

すべての IPv4 アドレスを許可するセキュリティグループのルールは、到達可能なリソースへの不要な接続試行を許してしまう可能性があります。

説明

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 に制限しています。ただし、このプライベートアドレスの範囲も非常に広いため、アクセスが必要なクライアントに合わせてさらに絞り込んでください。

参考資料