Implantar um app no GKE e conferir insights de segurança
Saiba como implantar um contêiner intencionalmente vulnerável em um cluster do GKE e acessar insights de segurança sobre a vulnerabilidade no painel de postura de segurança. O GKE o painel de postura de segurança exibe informações sobre sistemas operacionais conhecidos vulnerabilidades. Se você também quiser a verificação de idiomas em busca de vulnerabilidades em Go ou pacotes Java, consulte Crie um aplicativo e acesse insights de segurança.
Objetivos
- Crie e envie um aplicativo conteinerizado para o Artifact Registry usando o Cloud Build.
- Criar um pipeline de entrega no Cloud Deploy.
- Implantar o aplicativo em um cluster de preparo do GKE e promover em um cluster de produção.
- Confira insights sobre vulnerabilidades no aplicativo implantado usando o painel de postura de segurança no console do Google Cloud.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.googleapis.com
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Prepare o ambiente
Defina o ID do projeto como uma variável de ambiente:
export PROJECT_ID=$(gcloud config get project)
Defina a região padrão do Google Cloud para o Cloud Deploy:
gcloud config set deploy/region us-central1
Clone o repositório do GitHub que contém o exemplo de código para esta tarefa:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd ~/software-delivery-shield-demo-java/backend
Crie uma conta de serviço do IAM para o GKE
clusters para usar:
gcloud iam service-accounts create sds-runtime \ --display-name="SDS with GKE service account"
Conceda permissões à conta de serviço do IAM:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.nodeServiceAccount" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.developer" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/artifactregistry.reader"
Conceda à conta de serviço padrão do Compute Engine acesso a clusters do GKE. O Cloud Deploy usa esse acesso para implantar apps nos clusters do seu pipeline de entrega.
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')" gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role=roles/container.developer
Criar o repositório do Artifact Registry para a imagem
Crie o repositório:
gcloud artifacts repositories create containers \ --repository-format=docker \ --location=us-central1 \ --description="SDS with GKE repository"
Verifique se o repositório existe:
gcloud artifacts repositories list \ --location=us-central1 \ --filter="REPOSITORY:containers"
A saída exibe o repositório
containers
que você criou.
Criar os clusters do GKE
Crie dois clusters do GKE, um cluster de preparo chamado dev-cluster
e um cluster de produção chamado prod-cluster
. No Autopilot,
a verificação de vulnerabilidades da carga de trabalho é ativada automaticamente para novos clusters em execução
a partir da versão 1.27. Se você usa uma conta de serviço
cluster, especifique a sinalização --workload-vulnerability-scanning=standard
.
gcloud container clusters create-auto dev-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
gcloud container clusters create-auto prod-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
A criação do cluster pode levar até cinco minutos para ser concluída. Também é possível ativar verificação de vulnerabilidades de cargas de trabalho atualizando os clusters atuais do GKE.
Criar a imagem
Crie e envie a imagem usando o Cloud Build:
gcloud builds submit --region us-central1 --config cloudbuild.yaml
Quando a criação for concluída, a saída será semelhante a esta:
DONE
-----------------------------------------------------------------------------
ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
CREATE_TIME: 2022-09-19T15:41:07+00:00
DURATION: 54S
SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
STATUS: SUCCESS
Implantar a imagem no GKE usando o Cloud Deploy
Atualize o arquivo de configuração do Cloud Deploy com o ID do projeto:
sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
Registre o pipeline e os destinos:
gcloud deploy apply --file=clouddeploy.yaml
Para verificar se o pipeline existe, acesse a página Pipelines de entrega No console do Google Cloud:
Ir até os pipelines de entrega
A lista de pipelines exibe seu novo pipeline,
guestbook-app-delivery
.Clique no nome do pipeline para monitorar o progresso. O Pipeline de entrega de detalhes será aberta.
Crie uma nova versão no Cloud Deploy:
gcloud deploy releases create guestbook-release-001 \ --delivery-pipeline=guestbook-app-delivery \ --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
A nova versão aparece na seção Versões na página Exibição página de detalhes do pipeline.
Na página Detalhes do pipeline de entrega, monitore o Pipeline visualização até que o botão Promover seja exibido para
dev-cluster
Talvez seja necessário atualizar a página.Clique em Promover na visualização
dev-cluster
.No painel Promote release, clique em Promote para confirmar a promoção ao cluster de produção.
Para verificar se a versão foi bem-sucedida, consulte a seção Versões. A coluna Status do último lançamento exibe
Successfully deployed to prod-cluster
.
Ver vulnerabilidades
Nesta seção, acesse os insights sobre vulnerabilidades do SO usando as no painel de postura de segurança. O painel exibe informações sobre vulnerabilidades nas cargas de trabalho em execução após elas serem implantadas no clusters.
Acesse a página Postura de segurança do GKE no console do Google Cloud.
Para acessar os resultados da verificação, atualize a página. A verificação inicial pode levar até 15 minutos.
Na página Postura de segurança do GKE, consulte a Seção Vulnerabilidade do SO da carga de trabalho. Nesta seção, listamos as principais CVEs que afetam a carga de trabalho implantada.
Para mais detalhes, clique em Ver todos os problemas de vulnerabilidade. A guia Concerns é aberta e aplica um filtro para o tipo de preocupação Vulnerability. A tabela mostra uma visão geral de cada vulnerabilidade e seu impacto.
Para acessar detalhes sobre uma vulnerabilidade específica, clique no nome do problema na tabela. O painel Vulnerabilidade será aberto. Nesse painel, é possível fazer o seguinte:
- Leia uma descrição detalhada da CVE, incluindo versões afetadas, pacotes e a pontuação do CVSS.
- Confira as ações recomendadas para minimizar o problema, como documentação e as informações da versão do patch.
- Veja as cargas de trabalho específicas afetadas pela vulnerabilidade em acesse a guia Cargas de trabalho afetadas.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud com esses recursos.
Excluir recursos individuais
Exclua o pipeline do Cloud Deploy:
gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
Exclua os clusters do GKE:
gcloud container clusters delete dev-cluster \ --region=us-central1 gcloud container clusters delete prod-cluster \ --region=us-central1
Exclua o repositório do Artifact Registry:
gcloud artifacts repositories delete containers \ --location=us-central1
Exclua a conta de serviço do IAM:
gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
Exclua o projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.