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

1. Introdução

Com as políticas de segurança de borda do Google Cloud Armor, é possível restringir o acesso a objetos armazenados em cache no Google Cloud CDN e no Google Cloud Storage. Isso é feito para garantir que os usuários não acessem objetos de buckets de armazenamento em geografias restritas ou que a distribuição de mídia seja filtrada nas regiões em que você tem licença para fazer isso.

Neste laboratório, vamos criar um bucket do GCS, fazer upload de uma imagem nele, vinculá-lo a um balanceador de carga e ativar as políticas de segurança de borda e do Cloud CDN.

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 conforme o esperado

O que é necessário

  • Conhecimento básico de redes e 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 precisam conter apenas letras minúsculas, números, pontos (.), traços (-) e sublinhados (_). Os que têm pontos exigem verificação.
  • Nomes de bucket precisam começar e terminar com um número ou uma letra.
  • Nomes de buckets 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 buckets não podem ser representados como um endereço IP na notação decimal com ponto (por exemplo, 192.168.5.4).
  • Nomes de buckets não podem começar com o prefixo "goog".
  • Nomes de buckets 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 (_) nem deixar 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.

Classe de armazenamento padrão: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 seu bucket, clique em CRIAR:

Pronto. Você criou um bucket do Cloud Storage!

4. Fazer upload de um objeto no bucket

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

Primeiro, faça o download desta 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 ela foi salva 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 o objeto, clique nos três pontos à direita e edite as permissões para público.

821aad82d8633922.png

30a975d3ad22d33d.png

5. criar um balanceador de carga

Em seguida, vamos criar um balanceador de carga HTTP.

Acesse Rede >> Serviços de rede >> Balanceamento de carga >> Criar balanceador de carga >> Balanceador de carga HTTP >> Internet para minhas VMs >> Balanceador de carga HTTP(S) clássico.

Primeiro, crie um nome para o balanceador de carga.

Criar bucket de back-end

Crie um bucket de back-end, que é o bucket que você acabou de criar, e selecione "CDN ativada" e "Armazenar conteúdo estático em cache". Clique em "Criar".

ed392a56538d499e.png

Criar regras de host e caminho

Acesse "Regras de host e caminho" no lado esquerdo. Vamos usar uma regra simples de host/caminho e enviar qualquer solicitação para o bucket.

7c1a664e0d1f15b0.png

Criar configuração de front-end

Selecione a configuração de front-end. Para a configuração de front-end, vamos usar HTTP (embora HTTPS também funcione se você tiver um certificado) e um endereço IP temporário. Além disso, vamos garantir que a rede do nível Premium esteja selecionada.

2597a5e63d618622.png

Clique em Criar

Encontrar o IP do balanceador de carga

Para encontrar o IP do balanceador de carga no console, clique no nome dele na lista de balanceadores de carga do projeto.

9b757362d806e835.png

Consultar o balanceador de carga

Após alguns minutos, tente consultar o balanceador de carga quanto ao objeto carregado. Você precisará do endereço IP do balanceador de carga e do nome da imagem. A estrutura do comando é a seguinte:

No 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 disponibilizado do CDN via CDN ou monitoramento de balanceamento de carga. Sua taxa de acerto deve ser próxima a 100%. Se você precisar executar algumas consultas, faça o seguinte:

No terminal

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

Confirmar conteúdo disponibilizado pelo Cloud CDN

Valide se você está veiculando tráfego do CDN. Para isso, 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 estamos aplicando a política ao cache e não ao back-end.

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

Selecione e exclua a imagem.

a1cc1bb9a0ff41df.png

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

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

Selecione o seguinte:

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 no bucket de back-end, vamos validar se ela está funcionando como esperado.

Verificar a política de segurança

Depois de alguns minutos, verifique se a política do Cloud Armor está funcionando. Na linha de comando, execute o seguinte comando, que resulta em um código 403:

No 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. Acesse Operações >> Geração de registros >> Análise de registros.

Insira o trecho 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 a remoção da política

Após alguns minutos, envie outro curl para o recurso no bucket de armazenamento. Desta vez, você vai receber uma resposta 200.

No 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 de borda do Cloud Armor.

©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 >> %NOME DA POLÍTICA% e selecione "Excluir".

21eefb5f375e8fee.png

Acesse Cloud Storage, selecione o bucket criado e clique em "Excluir".

ef2fa8d45c1d3452.png

Acesse 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 na 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 configurar uma política de segurança de borda com uma ocorrência em cache de um recurso do Compute Engine.