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

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

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

  1. Defina o ID do projeto como uma variável de ambiente:

    export PROJECT_ID=$(gcloud config get project)
    
  2. Defina a região padrão do Google Cloud para o Cloud Deploy:

    gcloud config set deploy/region us-central1
    
  3. 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
    
  4. 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"
    
  5. 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"
    
  6. 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

  1. Crie o repositório:

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="SDS with GKE repository"
    
  2. 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

  1. Atualize o arquivo de configuração do Cloud Deploy com o ID do projeto:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
    
  2. Registre o pipeline e os destinos:

    gcloud deploy apply --file=clouddeploy.yaml
    
  3. 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.

  4. Clique no nome do pipeline para monitorar o progresso. O Pipeline de entrega de detalhes será aberta.

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

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

  7. Clique em Promover na visualização dev-cluster.

  8. No painel Promote release, clique em Promote para confirmar a promoção ao cluster de produção.

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

  1. Acesse a página Postura de segurança do GKE no console do Google Cloud.

    Acessar a postura de segurança do GKE

  2. Para acessar os resultados da verificação, atualize a página. A verificação inicial pode levar até 15 minutos.

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

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

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

  1. Exclua o pipeline do Cloud Deploy:

    gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
    
  2. Exclua os clusters do GKE:

    gcloud container clusters delete dev-cluster \
        --region=us-central1
    gcloud container clusters delete prod-cluster \
        --region=us-central1
    
  3. Exclua o repositório do Artifact Registry:

    gcloud artifacts repositories delete containers \
        --location=us-central1
    
  4. Exclua a conta de serviço do IAM:

    gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    

Exclua o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir