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

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

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

  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:

    Acessar Pipelines de entrega

    A lista de pipelines exibe seu 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 aparece na seção Versões na 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 para o 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 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.

  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 para ser concluída.

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

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

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

  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
    

Excluir 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