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
- 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 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.
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".
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.
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.
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.
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
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.
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
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"
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 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"
Navegue até o Cloud Storage, selecione o bucket que você criou e clique em "Excluir"
Navegue até 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 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.