Use estas instruções para criar políticas de segurança do Google Cloud Armor e filtrar o tráfego de entrada no seu aplicativo. Para informações conceituais sobre políticas de segurança, consulte a visão geral da política de segurança do Cloud Armor.
Antes de começar
Antes de configurar políticas de segurança, faça o seguinte:
Familiarize-se com os conceitos de balanceador de carga de aplicativo externo.
Examine seus serviços de back-end atuais para determinar quais ainda não têm uma política de segurança anexada. Esses serviços e os back-ends associados não são protegidos pelo Cloud Armor. Para adicionar a proteção fornecida pelo Cloud Armor, use as instruções neste documento para anexar uma política de segurança recém-criada ou existente ao serviço de back-end.
Configurar permissões do IAM para políticas de segurança do Cloud Armor
As operações a seguir exigem o papel de administrador de segurança (roles/compute.securityAdmin
) do
Identity and Access (IAM):
- Como configurar, modificar, atualizar e excluir uma política de segurança do Cloud Armor
- Usando os seguintes métodos de API:
SecurityPolicies insert
SecurityPolicies delete
SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Um usuário com o papel de administrador da rede do Compute (roles/compute.networkAdmin
)
pode realizar as seguintes operações:
- Definir uma política de segurança do Cloud Armor para um serviço de back-end
- Usando os seguintes métodos de API:
BackendServices setSecurityPolicy
BackendServices list
(somentegcloud
)
Os usuários com os papéis de administrador de segurança (roles/iam.securityAdmin
)
e de rede do Compute podem ver as políticas de segurança do Cloud Armor
usando os métodos de API SecurityPolicies
, get
, list
e
getRule
.
Configure permissões de IAM para papéis personalizados
A tabela a seguir lista as permissões básicas dos papéis de IAM e os métodos de API associados.
Permissão de IAM | Métodos da API |
---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
compute.securityPolicies.delete |
SecurityPolicies delete |
compute.securityPolicies.get |
SecurityPolicies get SecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patch SecurityPolicies addRule SecurityPolicies patchRule SecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
Criar políticas de segurança
É possível configurar políticas, regras e expressões de segurança do Cloud Armor
usando o console Trusted Cloud , a Google Cloud CLI ou a API REST. Ao usar
a CLI gcloud para criar políticas de segurança, use a flag --type
para especificar se a política de segurança é de back-end ou
de borda.
Se você não estiver familiarizado com a configuração da política de segurança, recomendamos que você consulte exemplos de políticas de segurança.
Exemplos de expressões
Veja a seguir expressões de exemplo. Para mais informações sobre expressões, consulte a referência da linguagem de regras personalizadas do Cloud Armor.
Se você estiver configurando uma regra ou expressão que usa códigos de país ou região ISO 3166-1 alfa 2, o Cloud Armor trata cada código de maneira independente. As regras e expressões do Cloud Armor usam explicitamente esses códigos de região para permitir ou negar solicitações.
A expressão a seguir corresponde a solicitações do endereço IP
1.2.3.4
e contém a stringexample
no cabeçalho do user agent:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
Como alternativa, é possível faz a correspondência com o intervalo de endereços IP de um cabeçalho de endereço IP de cliente personalizado usando o atributo
origin.user_ip
:inIpRange(origin.user_ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
A expressão a seguir corresponde a solicitações que têm um cookie com um valor específico:
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
A expressão a seguir corresponde a solicitações da região
AU
:origin.region_code == 'AU'
A expressão a seguir corresponde a solicitações da região
AU
que não estão no intervalo de IP especificado:origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
A expressão a seguir corresponde a solicitações com um caminho de variável numerada para um arquivo específico caso o URI corresponda a uma expressão regular:
request.path.matches('/path/[0-9]+/target_file.html')
A expressão a seguir faz a correspondência com solicitações se o valor decodificado em Base64 do cabeçalho
user-id
contiver um valor específico:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
A expressão a seguir usa uma correspondência pré-configurada do conjunto de expressões contra ataques SQLi:
evaluatePreconfiguredWaf('sqli-stable')
Gerenciar políticas de segurança
Use as seções a seguir para listar as políticas de segurança no seu projeto, atualizar as políticas de segurança, excluir suas políticas de segurança ou testar suas políticas de segurança.
Listar políticas de segurança
Use estas instruções para listar todas as políticas de segurança do Cloud Armor no projeto atual ou em um projeto especificado.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Para visualizar uma política específica, acesse a lista de políticas e clique no nome dela na lista de Políticas de segurança.
gcloud
gcloud compute security-policies list
Exemplo:
gcloud compute security-policies list
Saída:
NAME: my-policy REGION: us-central1
Para ver mais informações, consulte gcloud compute security-policies list
.
Atualizar políticas de segurança
Use estas instruções para atualizar uma política de segurança do Cloud Armor. Por exemplo, é possível alterar a descrição da política, modificar o comportamento da regra padrão, mudar o serviço de back-end de destino ou adicionar novas regras.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Para atualizar uma política específica, na página Políticas de segurança, na lista de políticas, clique em
Menu da política que você quer atualizar.- Para atualizar a descrição da política da ação da regra padrão, selecione Editar, faça as alterações e clique em Atualizar.
- Para adicionar uma regra, selecione Adicionar regra e siga as instruções em Como adicionar regras a uma política de segurança.
- Para alterar o serviço de back-end de destino da política, selecione Aplicar política ao destino, clique em Adicionar destino, selecione um destino e clique em Adicionar.
gcloud
Para atualizar uma política de segurança, use as seguintes instruções da Google Cloud CLI:
- Para atualizar uma regra em uma política de segurança, consulte Como atualizar uma única regra em uma política de segurança.
- Para adicionar uma regra a uma política de segurança, consulte Como adicionar regras a uma política de segurança.
- Para excluir uma regra de uma política de segurança, consulte Como excluir regras de uma política de segurança.
- Para atualizar várias regras em uma única atualização (atualização atômica), consulte Como atualizar atomicamente várias regras em uma política de segurança.
- Para atualizar campos que não são de regra em uma política de segurança (como o campo de descrição), consulte Como exportar políticas de segurança e Como importar políticas de segurança.
Excluir políticas de segurança
Use estas instruções para excluir uma política de segurança do Cloud Armor. Remova todos os serviços de back-end da política antes de excluí-la.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, ao lado do nome da política que você quer excluir, marque a caixa de seleção.
No canto superior direito da página, clique em
Excluir.
gcloud
Use gcloud compute security-policies delete NAME
.
Substitua NAME
pelo nome da política de segurança:
gcloud compute security-policies delete NAME
Testar políticas de segurança
Recomendamos que você implante todas as novas regras no modo de visualização e examine os registros de solicitação para verificar se as políticas e as regras estão se comportando conforme o esperado.
Gerenciar regras da política de segurança
Use as seções a seguir para listar regras de política de segurança, adicionar regras, atualizar ou excluir regras.
Listar as regras em uma política de segurança
Use estas instruções para listar as regras em uma política de segurança do Cloud Armor.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida, e as regras da política são listadas na guia Regras no meio da página.
gcloud
Use o seguinte comando gcloud
para listar todas as regras em somente uma política de
segurança, junto com uma descrição da política:
gcloud compute security-policies describe NAME \
Use o seguinte comando gcloud
para listar todas as regras em uma única política de
segurança em uma região especificada, junto com uma descrição da política:
gcloud compute security-policies describe NAME \ --region REGION
Use o seguinte comando gcloud
para descrever uma regra com a prioridade
especificada na política de segurança especificada:
gcloud compute security-policies rules describe PRIORITY \ --security-policy POLICY_NAME
Por exemplo, o comando a seguir descreve a regra com prioridade 1.000 na
política de segurança my-policy
:
gcloud compute security-policies rules describe 1000 \ --security-policy my-policy
Saída:
action: deny(403) description: block traffic from 192.0.2.0/24 and 198.51.100.0/24 kind: compute#securityPolicyRule match: srcIpRanges: - '192.0.2.0/24' - '198.51.100.0/24' preview: false priority: 1000
Para ver mais informações, consulte gcloud compute security-policies describe
.
Adicionar regras a uma política de segurança
Use estas instruções para adicionar regras a uma política de segurança do Cloud Armor.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.
No meio da página, clique na guia Regras.
Clique em Adicionar regra.
Opcional: insira uma descrição para a regra.
Selecione o modo:
- Modo básico: permita ou negue o tráfego com base em endereços IP ou intervalos de IP.
- Modo avançado: permite ou nega tráfego com base em expressões de regra.
No campo Correspondência, especifique as condições sob as quais a regra se aplica:
Modo básico: insira de um (1) a 10 intervalos de endereços IP para que correspondam à regra. É possível adicionar até 10 intervalos de endereços IP. Para limites, consulte Cotas e limites do Cloud Armor.
Modo avançado: insira uma expressão ou subexpressões a serem avaliadas em relação às solicitações recebidas. Para saber mais sobre como gravar as expressões e ler os exemplos a seguir, consulte a referência da linguagem de regras personalizadas.
A expressão a seguir corresponde a solicitações do endereço IP
1.2.3.4
e contém a stringexample
no cabeçalho do user agent:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
A expressão a seguir corresponde a solicitações que têm um cookie com um valor específico:
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
A expressão a seguir corresponde a solicitações da região
AU
:origin.region_code == 'AU'
A expressão a seguir corresponde a solicitações da região
AU
que não estão no intervalo de IP especificado:origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
A expressão a seguir corresponde a solicitações se o URI corresponder a uma expressão regular:
request.path.matches('/example_path/')
A expressão a seguir faz a correspondência com solicitações se o valor decodificado em Base64 do cabeçalho
user-id
contiver um valor específico:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
A expressão a seguir usa um conjunto de expressões pré-configuradas para corresponder aos ataques SQLi:
evaluatePreconfiguredWaf('sqli-stable')
Em Ação, selecione Permitir ou Negar.
Se você estiver configurando uma regra de negação, selecione uma mensagem Status negado.
Se você quiser ativar o modo de visualização da regra, marque a caixa de seleção Ativar.
No campo Prioridade, digite um número inteiro positivo.
Clique em Add.
gcloud
Use o comando
gcloud compute security-policies rules create PRIORITY
.
Substitua PRIORITY
pela prioridade da regra na
política:
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --description DESCRIPTION \ --src-ip-ranges IP_RANGES | --expression EXPRESSION \ --action=[ allow | deny-403 | deny-404 | deny-502 ] \ --preview
Por exemplo, o comando a seguir adiciona uma regra para bloquear o tráfego dos
intervalos de endereços IP 192.0.2.0/24 e 198.51.100.0/24. A regra tem prioridade
1.000 e faz parte de uma política chamada my-policy
:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \ --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \ --action "deny-403"
Use a sinalização --expression
para especificar uma condição na
referência da linguagem de regras personalizadas.
O comando a seguir adiciona uma regra para permitir o tráfego do endereço IP
1.2.3.4
e contém a string example
no cabeçalho do user agent:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \ --action allow \ --description "Block User-Agent 'example'"
O comando a seguir adiciona uma regra para bloquear solicitações se o cookie da solicitação contiver um valor específico:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')" \ --action deny-403 \ --description "Cookie Block"
O comando a seguir adiciona uma regra para bloquear solicitações da região AU
:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == 'AU'" \ --action deny-403 \ --description "AU block"
O comando a seguir adiciona uma regra para bloquear solicitações da região AU
que não estão no intervalo de IP especificado:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')" \ --action deny-403 \ --description "country and IP block"
O comando a seguir adiciona uma regra para bloquear solicitações com um URI que corresponda a uma expressão regular:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches('/example_path/')" \ --action deny-502 \ --description "regex block"
O comando a seguir adiciona uma regra para bloquear solicitações se o valor decodificado
em Base64 do cabeçalho user-id
contiver um valor específico:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \ --action deny-403 \ --description "country and IP block"
O comando a seguir adiciona uma regra que usa um conjunto de expressões pré-configuradas para mitigar ataques SQLi:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "evaluatePreconfiguredWaf('sqli-stable')" \ --action deny-403
Atualizar uma única regra em uma política de segurança
Use estas instruções para atualizar apenas uma regra em uma política de segurança do Cloud Armor. Para atualizar atomicamente várias regras, consulte Como atualizar atomicamente várias regras em uma política de segurança.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.
No meio da página, clique na guia Regras.
Ao lado da regra que você quer atualizar, clique em
Editar. A página Editar regra é exibida.Faça as mudanças e clique em Atualizar.
gcloud
Use este comando para atualizar uma regra com a prioridade especificada em uma política de segurança designada. Só é possível atualizar uma política de segurança por vez usando este comando:
gcloud compute security-policies rules update PRIORITY [ \ --security-policy POLICY_NAME \ --description DESCRIPTION \ --src-ip-ranges IP_RANGES | --expression EXPRESSION \ --action=[ allow | deny-403 | deny-404 | deny-502 ] \ --preview ]
Por exemplo, o comando a seguir atualiza uma regra com prioridade 1.111 para permitir o tráfego do intervalo de endereços IP 192.0.2.0/24:
gcloud compute security-policies rules update 1111 \ --security-policy my-policy \ --description "allow traffic from 192.0.2.0/24" \ --src-ip-ranges "192.0.2.0/24" \ --action "allow"
Para mais informações sobre esse comando, consulte gcloud compute security-policies rules update
.
Para atualizar a prioridade de uma regra, use a API REST. Para ver mais informações, consulte securityPolicies.patchRule
.
Atualizar atomicamente várias regras em uma política de segurança
Uma atualização atômica aplica alterações em várias regras em apenas uma atualização. Se você atualizar as regras uma por uma, talvez veja um comportamento não intencional porque as regras novas e antigas podem estar funcionando juntas por um curto período.
Para atualizar atomicamente várias regras, exporte a política de segurança atual para um arquivo JSON ou YAML e modifique-a. Use o arquivo modificado para criar uma nova política de segurança e troque a política de segurança dos serviços de back-end relevantes.
gcloud
Exporte a política para atualização, conforme o exemplo a seguir:
gcloud compute security-policies export my-policy \ --file-name my-file \ --file-format yaml
A política exportada ficará parecida com o exemplo:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 2 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
Use qualquer editor de texto para modificar a política. Por exemplo, você pode alterar as prioridades das regras existentes e adicionar uma nova regra:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-new-rule match: config: srcIpRanges: - '1.2.3.1' versionedExpr: SRC_IPS_V1 preview: false priority: 10 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 11 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
Crie uma política de segurança do Cloud Armor e especifique o nome e o formato modificados do arquivo, conforme o exemplo a seguir:
gcloud compute security-policies create new-policy \ --file-name modified-policy \ --file-format yaml
Remova a política de segurança antiga do serviço de back-end relevante, conforme o exemplo a seguir:
gcloud compute backend-services update my-backend \ --security-policy ""
Adicione a nova política de segurança ao serviço de back-end, conforme o exemplo a seguir:
gcloud compute backend-services update my-backend \ --security-policy new-policy
Se a política antiga não for usada, exclua-a:
gcloud compute security-policies delete my-policy
Excluir regras de uma política de segurança
Use estas instruções para excluir regras de uma política de segurança do Cloud Armor.
Console
No console Trusted Cloud , acesse a página Políticas do Google Cloud Armor.
Clique no nome da política de segurança. A página Detalhes da política é exibida.
No meio da página, na guia Regras, marque a caixa de seleção ao lado da regra a ser excluída.
Clique em
Excluir.
gcloud
Use este comando para remover uma regra com a prioridade especificada de uma política de segurança designada. É possível modificar somente uma política de segurança por vez, mas excluir várias regras de uma só vez:
gcloud compute security-policies rules delete PRIORITY [...] [ --security-policy POLICY_NAME \ ]
Exemplo:
gcloud compute security-policies rules delete 1000 \ --security-policy my-policy
Anexar e remover políticas de segurança
Use as seções a seguir para anexar e remover políticas de segurança de serviços de back-end e buckets de back-end.
Anexar uma política de segurança a um serviço de back-end
Use estas instruções para anexar uma política de segurança do Cloud Armor a um serviço de back-end. Uma política de segurança pode ser anexada a mais de um serviço de back-end, mas um serviço de back-end pode ter apenas um de cada tipo de política de segurança anexado a ele.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.
No meio da página, clique na guia Destinos.
Clique em Aplicar política ao novo destino.
Clique em Adicionar destino.
Na lista Destino, selecione uma opção e clique em Adicionar.
gcloud
Ao anexar uma política de segurança de back-end a um serviço de back-end, use o
comando gcloud compute backend-services
e a sinalização --security-policy
:
gcloud compute backend-services update my-backend \ --security-policy my-policy
Ao anexar uma política de segurança de borda a um serviço de back-end, use o
comando gcloud compute backend-services
e a
sinalização --edge-security-policy
:
gcloud compute backend-services update my-backend \ --edge-security-policy my-policy
Remover uma política de segurança de um serviço de back-end
Use estas instruções para remover uma política de segurança de back-end do Cloud Armor ou uma política de segurança de borda de um serviço de back-end.
Console
No console Trusted Cloud , acesse a página Políticas do Cloud Armor.
Na página Políticas de segurança, clique no nome da política de segurança. A página Detalhes da política é exibida.
No meio da página, clique na guia Destinos.
Selecione o serviço de back-end de destino do qual você quer remover a política.
Clique em Remover.
Na mensagem Remover destino, clique em Remover.
gcloud
Ao remover uma política de segurança de back-end, use o comando gcloud compute
backend-services
e a sinalização --security-policy
:
gcloud compute backend-services update my-backend \ --security-policy ""
Ao remover uma política de segurança de borda, use o comando gcloud compute
backend-services
e a sinalização --edge-security-policy
:
gcloud compute backend-services update my-backend \ --edge-security-policy ""