
私は Google Cloud Compute Engine インスタンスで PostgreSQL を実行しており、PostgreSQL は現在、どこからでも接続を受け入れるように構成されています。これは、毎回サーバーにログインするのではなく、ファイアウォールを使用してアクセスを制御するという考えに基づいています。
現在、 というファイアウォール ルールがありdevelopment-allow-psql
、他に誤設定がないように、どこからでも許可するように設定しています。
Targets: All instances on network
Source Filter: IP Ranges
Source IP Ranges: 0.0.0.0/0
Second Source Filter: None
Specified protocols and ports: tcp:5432
ランニング
psql "dbname=mydb host=__.___.__.__ user=myuser password=mypassword port=5432"
アクセスを許可したいインスタンスだけでなく、どこからでも即座に接続できます。
Instance Group
これらのインスタンスは、テンプレートから自動的に作成され、Instance Template
次の設定でインスタンスを作成するように構成されています。
Network tags: myapp-api, http-server, https-server
Network: development
Subnetwork: development (with address range 10.154.0.0/20)
myapp-api
この DB インスタンスへのアクセスを、タグを持つインスタンス、またはサブネットワークを持つインスタンス、あるいはその両方に制限したいと思います10.154.0.0/20
。そこで、ファイアウォールの設定を次のように変更します。
Targets: Specified target tags
Target tags: myapp-api
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432
これにより、psql
先ほど実行したコマンドへのアクセスがブロックされます (psql コマンドは、経由でアクセスできる docker インスタンスから実行されていますdocker exec -ti -u0 my-instance-api-dev-small bash
)
もし私が今
Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432
それでもすべてのアクセスがブロックされます。2 番目のソース フィルターを削除し、サブネットのみをフィルターしても、アクセスはできません。
Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432
サブネット ソース フィルターをタグ フィルターに交換した場合:
Targets: All instances on the network
Source Filter: Source tags
Source tags: myapp-api
Second Source Filter: None
Specified protocols and ports: tcp:5432
...まだアクセスできません。
サブネットのソース フィルターを選択し、すべてのサブネットを選択した場合も同様です。
切り替え先:
Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 0.0.0.0/0
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432
ソースタグを指定しても、Google Cloud の外部でも誰でも接続できるようになります。
IPアドレス範囲を10.154.0.0/20に変更すると、再び全員がブロックされる
Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432
IP 範囲をインスタンスの外部 IP アドレスに置き換えると35.189.124.141/32
機能しますが、これらの IP アドレスは一時的なものであるため、自動スケーリングによって新しい IP アドレスを持つインスタンスが追加されるたびにファイアウォール ルールを更新する必要があり、これは解決策ではありません。
特定のサブネットや特定のタグを持つインスタンスのみを許可するようにファイアウォールを構成するにはどうすればよいですか? 私が行っていることはうまくいかないようです。
答え1
データベース インスタンスの外部 IP アドレスから内部 IP アドレスに切り替えると、突然、上記の組み合わせがすべて機能するようになります。
psql "dbname=mydb host=internal-ip-address-here user=myuser password=mypassword port=5432"
タグを使用すると、ファイアウォールは外部 IP アドレスではなく内部 IP アドレスを参照することがわかります。
Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432