Como proteger o armazenamento em cache de borda com o Cloud Armor

1. Introdução

As políticas de segurança de borda do Google Cloud Armor permitem restringir o acesso a objetos armazenados em cache no Google Cloud CDN e no Google Cloud Storage. Exemplos de motivos para fazer isso incluem garantir que seus usuários não acessem objetos em buckets de armazenamento de regiões geográficas restritas ou garantir que sua distribuição de mídia filtre as regiões geográficas em que você tem uma licença para fazer isso.

Neste laboratório, vamos criar um bucket do GCS, fazer upload de uma imagem e vincular o bucket a um balanceador de carga. Depois, vamos ativar as políticas do Cloud CDN e do Edge Security nele.

O que você vai aprender

  • Como configurar um bucket do Cloud Storage com conteúdo armazenável em cache
  • Como criar uma política de segurança de borda para proteger o conteúdo
  • Como validar se a política de segurança de borda está funcionando como esperado

O que é necessário

  • Rede básica e conhecimento de HTTP
  • Conhecimento básico de linha de comando do Unix/Linux

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

bce75f34b2c53987.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

f6ef2b5f13479f3a.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.

Antes de começar

No Cloud Shell, verifique se o ID do projeto está configurado

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Ativar APIs

Ative todos os serviços necessários

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Crie um bucket do Cloud Storage

No Console do Cloud, acesse Menu de navegação > Cloud Storage > Navegador. Clique em CRIAR BUCKET:

baf3d3c74282ecba.png

Regras de nomenclatura para buckets:

  • Não inclua informações sensíveis no nome do bucket porque o namespace dele é global e visível para o público.
  • Nomes de bucket devem conter apenas letras minúsculas, números, pontos (.), traços (-) e sublinhados (_). Os que têm pontos precisam ser verificados.
  • Nomes de bucket devem começar e terminar com um número ou uma letra.
  • Nomes de bucket precisam conter de 3 a 63 caracteres. Nomes que contenham pontos podem ter até 222 caracteres, mas cada componente separado por ponto não pode ter mais do que 63 caracteres.
  • Nomes de bucket não podem ser representados como um endereço IP na notação decimal com ponto (por exemplo, 192.168.5.4).
  • Nomes de bucket não podem começar com o prefixo "goog".
  • Nomes de bucket não podem conter "google" ou erros de ortografia semelhantes a "google".
  • Além disso, para fins de conformidade com DNS e compatibilidade futura, você não deve usar sublinhados (_) ou ter um ponto próximo a outro ponto ou traço. Por exemplo, "..", "-." ou ".-" não são nomes DNS válidos.

Clique em CONTINUAR.

Tipo de local: região

Local:escolha uma região distante de você

Clique em CONTINUAR.

Default Storage class:Standard

Clique em CONTINUAR.

Desmarque a caixa de seleção Aplicar a prevenção do acesso público neste bucket em "Impedir acesso público".

Escolha Refinado em Controle de acesso.

Clique em CONTINUAR.

Depois de configurar o bucket, clique em CRIAR:

Pronto. Você criou um bucket do Cloud Storage!

4. faça upload de um objeto no bucket

Agora faça upload de um objeto em um bucket.

Primeiro, faça o download dessa imagem para uma instância temporária no Cloud Shell. No exemplo abaixo, usamos a imagem da página inicial do Google.

No Cloud Shell

wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

Use o comando gsutil cp para fazer upload da imagem do local em que você a salvou no bucket criado:

No Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

Agora remova a imagem transferida:

No Cloud Shell

rm google.png

Localize seu objeto, clique nos três pontos à direita e edite as permissões para serem públicas.

821aad82d8633922.png

30a975d3ad22d33d.png

5. Crie um balanceador de carga

Em seguida, vamos criar um balanceador de carga HTTP.

Navegue até Rede >> Serviços de rede >> Balanceamento de carga >> Crie o balanceador de carga >> Balanceador de carga HTTP >> Internet para minhas VMs >> Balanceador de carga HTTP(S) clássico

Primeiro, dê um nome ao balanceador de carga que você criará.

Criar bucket de back-end

Crie um novo bucket de back-end que seja o bucket que você acabou de criar e selecione CDN ativado e Conteúdo estático em cache. Clique em "Criar".

ed392a56538d499e.png

Criar regras de host e caminho

Navegue até "Regras de host e caminho" no lado esquerdo. Vamos usar uma regra simples de host/caminho e enviar as solicitações para o bucket.

7c1a664e0d1f15b0.png

Criar configuração de front-end

Selecione a configuração do front-end. Para a configuração de front-end, usaremos HTTP (embora HTTPS também funcione se você tiver um certificado) e um endereço IP temporário e verifique se você selecionou a rede de nível premium.

2597a5e63d618622.png

Clique em Criar

Acessar IP do balanceador de carga

Acesse o IP do balanceador de carga no console clicando no nome dele na lista de balanceadores de carga do seu projeto.

9b757362d806e835.png

Consultar o balanceador de carga

Depois de alguns minutos, tente consultar o balanceador de carga do objeto enviado. Você precisará do endereço IP do balanceador de carga e do nome da imagem. A estrutura do comando é a seguinte:

Do terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Saída

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng
< Expires: Mon, 13 Dec 2021 22:58:26 GMT
< Date: Mon, 13 Dec 2021 21:58:26 GMT
< Cache-Control: public, max-age=3600
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer

Valide se o conteúdo está sendo exibido pelo CDN por meio da CDN ou do monitoramento de balanceamento de carga. A taxa de acerto é de 100%. Se você precisar executar algumas consultas, faça o seguinte:

Do terminal

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Confirmar conteúdo veiculado pelo Cloud CDN

Para verificar se você está veiculando tráfego da CDN, acesse Serviços de rede >> CDN

a52d0ba4c084aa05.png

6. Excluir o objeto do GCS

Agora que o cache está preenchido, vamos excluir o objeto do bucket, reforçando que a política será aplicada ao cache e não ao back-end.

Acesse Cloud Storage >> %nome do bucket% >> objetos

Selecione e exclua a imagem.

a1cc1bb9a0ff41df.png

7. Criar política de segurança de borda para seu cache da CDN

Acesse Segurança de rede >> Cloud Armor e clique em "Criar política"

Selecione as seguintes opções:

Tipo de política: política de segurança de borda

Ação padrão: negar

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Aplique a política ao bucket de back-end.

8. Validar a política de segurança de borda

Agora que criamos uma política de segurança de borda na frente do bucket de back-end, vamos validar se ela está funcionando como esperado.

Verificar a política de segurança

Após alguns minutos, será possível verificar se a política do Cloud Armor está em execução. Na linha de comando, execute o comando a seguir para receber o erro 403

Do terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Saída

curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 111
< Date: Mon, 13 Dec 2021 23:09:35 GMT
< Expires: Mon, 13 Dec 2021 23:09:35 GMT
< Cache-Control: private, max-age=0
< Server: UploadServer
<

Investigar os registros

Em seguida, verifique os registros para conferir a política de segurança de borda aplicada. Navegue até Operações >> Geração de registros >> Análise de registros

Insira o snippet abaixo na consulta e clique em "Executar"

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Observe a resposta 403 e a política de segurança aplicada

cddc48ca93ad79ca.png

Remover a política de segurança

Remova a política de segurança e consulte o objeto do cache.

Acesse Segurança de rede >> Cloud Armor >> %NOME DA POLÍTICA% >> destinos e remova o bucket de destino.

350655729a89eb33.png

Confirmar remoção de política

Após alguns minutos, envie outro curl para o recurso no bucket de armazenamento. Você receberá uma resposta 200 desta vez.

Do terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Saída

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png

*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0

Parabéns! Você concluiu este laboratório sobre políticas de segurança do Cloud Armor Edge.

©2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.

9. Limpeza do laboratório

Acesse Segurança de rede >> Cloud Armor >> %POLICY NAME% e selecione "excluir"

21eefb5f375e8fee.png

Navegue até o Cloud Storage, selecione o bucket que você criou e clique em "Excluir"

ef2fa8d45c1d3452.png

Navegue até Rede >> Serviços de rede >> "Balanceamento de carga". Selecione o balanceador de carga que você criou e clique em "Excluir".

ee2e78c10f4104eb.png

10. Parabéns!

Você concluiu o codelab "Como proteger o armazenamento em cache de borda com o Cloud Armor".

O que vimos

  • Como configurar um bucket do Cloud Storage e um balanceador de carga de nuvem associado
  • Como criar uma política de segurança de borda do Cloud Armor
  • Como validar se a política de segurança de borda está funcionando conforme o esperado.

Próximas etapas

  • Tente definir uma política de segurança de borda com uma ocorrência em cache de um recurso do Compute Engine.