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 receber insights de segurança sobre a vulnerabilidade no painel de postura de segurança. O painel de postura de segurança do GKE mostra informações sobre vulnerabilidades conhecidas do sistema operacional. Se você também quiser verificar vulnerabilidades de linguagem em pacotes Go ou Java, consulte Criar um aplicativo e conferir insights de segurança.

Objetivos

  • Crie e envie um aplicativo conteinerizado para o Artifact Registry usando o Cloud Build.
  • Crie um pipeline de entrega no Cloud Deploy.
  • Implante o aplicativo em um cluster de preparação do GKE e promova-o 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

  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. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  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 código de exemplo para esta tarefa:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd ~/software-delivery-shield-demo-java/backend
    
  4. Criar uma conta de serviço do IAM para o GKE

    clusters para usar:

    gcloud iam service-accounts create sds-runtime \
        --display-name="Security insights 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 sua imagem

  1. Crie o repositório:

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="Security insights with GKE repository"
    
  2. Verifique se o repositório existe:

    gcloud artifacts repositories list \
        --location=us-central1 \
        --filter="REPOSITORY:containers"
    

    A saída mostra 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 que executam a versão 1.27 e mais recentes. Se você usar um cluster padrão, especifique a flag --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 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 build 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:

    Acesse pipelines de entrega

    A lista de pipelines mostra o novo pipeline, guestbook-app-delivery.

  4. Clique no nome do pipeline para monitorar o progresso. A página Detalhes do pipeline de entrega é 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 vai aparecer na seção Versões da página Detalhes do pipeline de entrega.

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

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

  8. No painel Promover versão, clique em Promover para confirmar a promoção no cluster de produção.

  9. 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 insights sobre vulnerabilidades do SO usando o painel de postura de segurança. O painel mostra informações sobre vulnerabilidades nas cargas de trabalho em execução após a implantação nos 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 conferir os resultados da verificação, atualize a página. A verificação inicial pode levar até 15 minutos para ser concluída.

  3. Na página Postura de segurança do GKE, revise a seção Vulnerabilidade do SO da carga de trabalho. Esta seção lista os principais CVEs que afetam a carga de trabalho implantada.

  4. Para mais detalhes, clique em Ver todas as questões 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 saber mais sobre uma vulnerabilidade específica, clique no nome da preocupação na tabela. O painel Vulnerabilidade é aberto. Nesse painel, é possível fazer o seguinte:

    • Leia uma descrição detalhada do CVE, incluindo as versões e os pacotes afetados e a pontuação do CVSS.
    • Confira as ações recomendadas para mitigar o problema, como documentação e informações sobre a versão do patch.
    • Confira as cargas de trabalho específicas afetadas pela vulnerabilidade na guia Carga de trabalho afetada.

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