Implemente uma app no GKE e veja estatísticas de segurança

Saiba como implementar um contentor intencionalmente vulnerável num cluster do GKE e obter estatísticas de segurança sobre a vulnerabilidade no painel de controlo da postura de segurança. O painel de controlo de postura de segurança do GKE apresenta informações sobre vulnerabilidades conhecidas do sistema operativo. Se também quiser a análise de idiomas para vulnerabilidades em pacotes Go ou Java, consulte o artigo Crie uma aplicação e veja estatísticas de segurança.

Objetivos

  • Crie e envie uma aplicação contentorizada para o Artifact Registry através do Cloud Build.
  • Crie um pipeline de fornecimento no Cloud Deploy.
  • Implementar a aplicação num cluster do GKE de preparação e promovê-la para um cluster de produção.
  • Veja estatísticas sobre vulnerabilidades na aplicação implementada através do painel de controlo de postura de segurança na Google Cloud consola.

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. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

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

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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
  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

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

  12. Verify that billing is enabled for your Google Cloud project.

  13. 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
  14. Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

    Prepare o seu ambiente

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

      export PROJECT_ID=$(gcloud config get project)
      
    2. Defina a Google Cloud região predefinida 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. Crie uma conta de serviço do IAM para o seu GKE

      clusters a usar:

      gcloud iam service-accounts create sds-runtime \
          --display-name="Security insights with GKE service account"
      
    5. Conceda autorizaçõ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 predefinida do Compute Engine acesso aos clusters do GKE. O Cloud Deploy usa este acesso para implementar apps nos clusters no 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
      

    Crie o repositório do Artifact Registry para a 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"
      

      O resultado apresenta o repositório containers que criou.

    Crie os clusters do GKE

    Crie dois clusters do GKE, um cluster de preparação denominado dev-cluster e um cluster de produção denominado prod-cluster. No Autopilot, a análise de vulnerabilidades da carga de trabalho é ativada automaticamente para novos clusters que executam a versão 1.27 e posteriores. Se 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 de clusters pode demorar até cinco minutos. Também pode ativar a análise de vulnerabilidades da carga de trabalho atualizando os clusters do GKE existentes.

    Crie a imagem

    Crie e envie a imagem através do Cloud Build:

    gcloud builds submit --region us-central1 --config cloudbuild.yaml
    

    Quando a compilação estiver concluída, o resultado é semelhante ao seguinte:

    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
    

    Implemente a imagem no GKE através do Cloud Deploy

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

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

      gcloud deploy apply --file=clouddeploy.yaml
      
    3. Para verificar se o pipeline existe, aceda à página Pipelines de entrega na consola Google Cloud :

      Aceder a Pipelines de entrega

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

    4. Clique no nome do pipeline para monitorizar o progresso. É apresentada a página Detalhes do pipeline de fornecimento.

    5. Crie um novo lançamento 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
      

      O novo lançamento aparece na secção Lançamentos da página Detalhes do pipeline de envio.

    6. Na página Detalhes do pipeline de fornecimento, monitorize a vista Visualização do pipeline até o botão Promover ser apresentado para dev-cluster. Pode ter de atualizar a página.

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

    8. No painel Promover lançamento, clique em Promover para confirmar a promoção ao cluster de produção.

    9. Para verificar se o lançamento foi bem-sucedido, consulte a secção Lançamentos. A coluna Estado da implementação mais recente apresenta Successfully deployed to prod-cluster.

    Veja vulnerabilidades

    Nesta secção, veja estatísticas de vulnerabilidades do SO através do painel de controlo de postura de segurança. O painel de controlo apresenta informações sobre vulnerabilidades nas cargas de trabalho em execução depois de as implementar nos clusters.

    1. Aceda à página GKE security posture na Google Cloud consola.

      Aceda à postura de segurança do GKE

    2. Para ver os resultados da análise, atualize a página. A análise inicial pode demorar até 15 minutos.

    3. Na página GKE security posture, reveja a secção Workload OS vulnerability. Esta secção apresenta as principais CVEs que afetam a sua carga de trabalho implementada.

    4. Para ver detalhes, clique em Ver todas as preocupações com vulnerabilidades. O separador Preocupações é aberto e aplica um filtro para o tipo de preocupação Vulnerabilidade. A tabela mostra uma vista geral de cada vulnerabilidade e do respetivo impacto.

    5. Para ver detalhes sobre uma vulnerabilidade específica, clique no nome da preocupação na tabela. É aberto o painel Vulnerabilidade. Neste painel, pode fazer o seguinte:

      • Leia uma descrição detalhada do CVE, incluindo as versões e os pacotes afetados, bem como a classificação CVSS.
      • Veja as ações recomendadas para mitigar a preocupação, como documentação e informações da versão da correção.
      • Veja as cargas de trabalho específicas que são afetadas pela vulnerabilidade no separador Cargas de trabalho afetadas.

    Limpar

    Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.

    Elimine recursos individuais

    1. Elimine o pipeline do Cloud Deploy:

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

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

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

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

    Elimine o projeto

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    O que se segue?