RDPへの接続元を制限していないGCPファイアウォール

すべてのアドレスからRDP接続を許可すると、不要な認証試行やサービスへの攻撃を受けるおそれがあります。管理に必要な接続元と経路に限定してください。

説明

RDPはWindows VMの遠隔管理に使われ、一般的にTCPポート3389で接続します。0.0.0.0/0や::/0からこのポートへのアクセスを許可すると、管理を行う必要がないクライアントも、到達可能なRDPサービスに接続を試みることができます。

Google Cloudファイアウォールでsource_rangesとsource_tagsを併用すると、どちらか一方の条件を満たす接続元が許可されます。ソースタグの追加だけでは、全アドレスを許可する範囲を狭められません。

想定される影響

  • 到達可能なRDPサービスが、総当たり攻撃や流出した認証情報を使ったログイン試行の対象になる可能性があります。
  • サービスの脆弱性やアカウントの侵害を通じて、VMやそのアカウントがアクセスできるリソースに影響が及ぶおそれがあります。

対処方法

  • RDPを必要とするVMと管理者を確認し、許可する接続元を必要な管理用ネットワークに限定してください。全ポートや広いポート範囲を許可する別のルールにも3389が含まれていないか確認してください。
  • IAP TCP転送やVPNを使った管理経路を利用し、RDPを直接公開する許可ルールは削除または制限してください。その経路に必要な権限とファイアウォール設定も構成してください。
  • 実際に適用されるファイアウォールポリシーとOSのアクセス制御を確認し、必要な管理接続は動作し、それ以外の接続元は遮断されることを確かめてください。

例

以下の例は、そのままではデプロイできません。test_objectのアンダースコアはファイアウォール名に使用できず、google.cloud 1.14.0モジュールは例にある接続元と対象のオプションの組み合わせを拒否します。実際の構成では、有効な名前と対応するオプションの組み合わせを使用してください。

最初の設定

yaml
- name: rdp_in_port
  google.cloud.gcp_compute_firewall:
    name: test_object
    source_ranges:
      - "0.0.0.0/0"
    allowed:
      - ip_protocol: tcp
        ports:
          - "22"
          - "80"
          - "3389"
    target_tags:
      - test-ssh-server
      - staging-ssh-server
    source_tags:
      - test-ssh-clients
    project: test_project
    auth_kind: serviceaccount
    service_account_file: "/tmp/auth.pem"
    state: present

0.0.0.0/0からTCPポート3389を許可するように記述した設定です。併記したsource_tagsによって、この全アドレス範囲が制限されるわけではありません。

比較用の設定

yaml
- name: create a firewall
  google.cloud.gcp_compute_firewall:
    name: test_object
    allowed:
    - ip_protocol: tcp
      ports:
      - '80'
    target_tags:
    - test-ssh-server
    - staging-ssh-server
    source_tags:
    - test-ssh-clients
    project: test_project
    auth_kind: serviceaccount
    service_account_file: /tmp/auth.pem
    state: present

比較用の設定はTCPポート80だけを指定しています。RDPによる管理が必要なら、別途制限された管理経路を構成し、ほかのファイアウォールルールが許可する範囲も確認してください。

参考資料