Implante um app no GKE e confira insights de segurança
Saiba como implantar um contêiner intencionalmente vulnerável em um cluster do GKE e receber insights de segurança sobre a vulnerabilidade no painel de postura de segurança. O painel de postura de segurança do GKE exibe informações sobre vulnerabilidades conhecidas do sistema operacional. Se você também quiser verificar a linguagem para vulnerabilidades em pacotes Go ou Java, consulte Criar um aplicativo e ver insights de segurança.
Objetivos
- Criar e enviar um aplicativo em contêiner 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 promovê-lo para 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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 desta tarefa:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd ~/software-delivery-shield-demo-java/backend
Criar uma conta de serviço do IAM para a conta do GKE
clusters a serem usados:
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 aos clusters do GKE. O Cloud Deploy usa esse acesso para implantar apps nos clusters do 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
Crie 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 de preparo chamado dev-cluster
e um de produção chamado prod-cluster
. No Autopilot,
a verificação de vulnerabilidades da carga de trabalho é ativada automaticamente para novos clusters que executam
a versão 1.27 e mais recente. Se você usar um cluster
padrão, 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. Também é possível ativar a verificação de vulnerabilidades da carga de trabalho atualizando os clusters 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:
A lista de pipelines exibe seu novo pipeline,
guestbook-app-delivery
.Clique no nome do pipeline para monitorar o progresso. A página Detalhes do pipeline de entrega é 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 Detalhes do pipeline de entrega.
Na página Detalhes do pipeline de entrega, monitore a visualização Visualização do pipeline 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 Promover versão, clique em Promover para confirmar a promoção para o cluster de produção.
Para verificar se a versão foi concluída, consulte a seção Versões. A coluna Status do último lançamento mostra
Successfully deployed to prod-cluster
.
Ver vulnerabilidades
Nesta seção, confira os insights sobre vulnerabilidades do SO usando o painel de postura de segurança. O painel exibe informações sobre vulnerabilidades nas cargas de trabalho em execução depois que você as implanta nos 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 para ser concluída.
Na página Posição de segurança do GKE, consulte a seção Vulnerabilidade do SO da carga de trabalho. Nesta seção, listamos os principais CVEs que afetam a carga de trabalho implantada.
Para mais detalhes, clique em Ver todas as preocupações com vulnerabilidades. A guia Preocupações abre e aplica um filtro para o tipo de preocupação Vulnerabilidade. A tabela mostra uma visão geral de cada vulnerabilidade e seu impacto.
Para ver detalhes sobre uma vulnerabilidade específica, clique no nome da preocupação 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 reduzir o problema, por exemplo, informações sobre a versão do patch e a documentação.
- Veja as cargas de trabalho específicas que foram afetadas pela vulnerabilidade na 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
Excluir 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.