Configure o Google Cloud Firewall para filtrar tags e sub-redes

Configure o Google Cloud Firewall para filtrar tags e sub-redes

Estou executando o PostgreSQL em uma instância do Google Cloud Compute Engine e o PostgreSQL está atualmente configurado para aceitar conexões de qualquer lugar, a ideia é usar o firewall para controlar o acesso em vez de ter que fazer login no servidor todas as vezes.

Atualmente tenho uma regra de firewall chamada development-allow-psql, para garantir que nada mais esteja configurado incorretamente, configurei-a para permitir de qualquer lugar:

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

Correndo

psql "dbname=mydb host=__.___.__.__ user=myuser password=mypassword port=5432"

Conecta-me instantaneamente, mas de qualquer lugar, em vez de apenas nas instâncias às quais desejo permitir o acesso.

Essas instâncias são criadas automaticamente por meio Instance Groupde um Instance Template modelo configurado para criar instâncias com as seguintes configurações:

Network tags: myapp-api, http-server, https-server
Network: development
Subnetwork: development (with address range 10.154.0.0/20)

Quero limitar o acesso a esta instância de banco de dados a instâncias que possuem myapp-apiuma tag ou uma sub-rede 10.154.0.0/20ou ambas. Então altero minhas configurações de firewall para o seguinte:

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

Isso bloqueia o acesso ao psqlcomando que executei anteriormente (o comando psql está sendo executado a partir de uma instância do docker à qual tenho acesso via docker exec -ti -u0 my-instance-api-dev-small bash)

Se eu agora mudar para

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

Ainda bloqueia todo o acesso. Se eu remover agora o segundo filtro de origem e filtrar apenas na sub-rede, ainda não haverá acesso.

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

Se eu trocar o filtro de origem da sub-rede por um filtro de tags:

Targets: All instances on the network
Source Filter: Source tags
Source tags: myapp-api
Second Source Filter: None
Specified protocols and ports: tcp:5432

... ainda sem acesso.

O mesmo ao selecionar Filtro de origem de sub-redes e apenas selecionar todas as sub-redes.

Mudando para:

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

mais uma vez, permite que todos (mesmo fora do Google Cloud) se conectem, mesmo que eu tenha especificado uma tag de origem

Alterar o intervalo de endereços IP para 10.154.0.0/20 mais uma vez bloqueia todos

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

Substituir o intervalo de IP pelos endereços IP externos das instâncias, por exemplo, 35.189.124.141/32funciona, mas como esses endereços IP são temporários, isso não é uma solução, pois exigirá a atualização das regras de firewall sempre que o escalonamento automático adicionar mais instâncias com novos endereços IP.

Como configuro o Firewall para permitir apenas instâncias de uma determinada sub-rede e/ou com determinadas tags? O que estou fazendo não parece estar funcionando.

Responder1

Ao mudar do endereço IP externo da instância do banco de dados para o endereço IP interno, de repente todas as combinações acima funcionam.

psql "dbname=mydb host=internal-ip-address-here user=myuser password=mypassword port=5432"

Acontece que quando você usa tags, o firewall analisa o endereço IP interno em vez do endereço IP externo.

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

informação relacionada