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
- 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.



- 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.
- 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:

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:

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:

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.


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".

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.

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.

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.

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.

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.

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



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"

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
Observe a resposta 403 e a política de segurança aplicada.

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.

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".

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

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

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.