Implantar no Cloud Run e conferir insights de segurança

Este guia de início rápido explica como implantar uma imagem de contêiner no Cloud Run e acessar insights de segurança para a implantação no painel Segurança do Software Delivery Shield no console do Google Cloud. Você vai:

  • Implante uma imagem no Cloud Run usando o Cloud Deploy. O Cloud Deploy é um serviço do Google Cloud que automatiza a entrega dos aplicativos para uma série de ambientes de destino em uma promoção definida sequência.
  • Confira os seguintes insights de segurança para a implantação:

    • Informações de identidade e criptografia para a implantação.
    • Níveis da cadeia de suprimentos para artefatos de software (SLSA), que identifica o nível de garantia da implantação.
    • Vulnerabilidades em artefatos de build.
    • Lista de materiais do software (SBOM, na sigla em inglês) para os artefatos do build.
    • Procedência do build, que é uma coleção de metadados verificáveis sobre um build. Ele inclui detalhes como os resumos das imagens criadas, os locais da origem de entrada, o conjunto de ferramentas de build, as etapas de build e a duração do build.

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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com

Definir configurações padrão

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

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

    gcloud config set deploy/region us-central1
    

Conceder acesso

Conceda papéis do IAM à conta de serviço padrão do Compute Engine. Isso é necessário para que o Cloud Deploy implante cargas de trabalho no Cloud Run.

 gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"
 gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/iam.serviceAccountUser" \
     --project=$PROJECT_ID
 gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/run.developer"

Se você tiver problemas para adicionar um desses papéis, entre em contato com o administrador do projeto.

Criar um repositório do Docker no Artifact Registry

  1. Crie um novo repositório do Docker chamado containers no local us-central1 com a descrição "repositório do Docker":

    gcloud artifacts repositories create containers --repository-format=docker \
        --location=us-central1 --description="Docker repository"
    
  2. Verifique se o repositório foi criado:

    gcloud artifacts repositories list
    

    Você verá containers na lista de objetos repositórios.

Preparar aplicativo de amostra

Você vai precisar de um código-fonte de exemplo para criar e implantar. Nesta seção, você clonará um repositório de origem atual que contém um exemplo de código Java.

  1. Clone o repositório que contém o exemplo de código Java:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd software-delivery-shield-demo-java/backend
    
  2. Atualize cloudrun.clouddeploy.yaml para substituir PROJECT_ID pelo ID do projeto:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
    

Criar o aplicativo

  1. Criar e conteinerizar o aplicativo Java usando o Cloud Build. O o comando a seguir cria e conteineriza o aplicativo Java e armazena os contêiner criado no repositório Docker do Artifact Registry:

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

    Depois que o build for concluído, uma mensagem de status de sucesso semelhante a esta será exibida:

    DONE
    -----------------------------------------------------------------------------
    ID: 3e08565f-7f57-4449-bc68-51c46cf33d03
    CREATE_TIME: 2022-09-19T15:41:07+00:00
    DURATION: 54S
    SOURCE: gs://sds-docs-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f78055e9.tgz
    IMAGES: us-central1-docker.pkg.dev/sds-docs-project/containers/java-guestbook-backend:quickstart
    STATUS: SUCCESS
    

Gerar uma lista de materiais de software para a imagem criada

Um SBOM é um inventário completo de um aplicativo, que identifica os pacotes em que o software depende. O conteúdo pode incluir software de terceiros de fornecedores, artefatos internos e bibliotecas de código aberto.

Gere a lista de materiais de software para a imagem que você criou na seção anterior:

gcloud artifacts sbom export \
    --uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart

Implantar o contêiner no Cloud Run usando o Cloud Deploy

  1. Registre o pipeline e os destinos com o serviço do Cloud Deploy:

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

    Agora você tem um pipeline com destinos prontos para implantar o aplicativo no primeiro destino.

  2. Para verificar se o pipeline existe, acesse a página Pipelines de entrega no console do Google Cloud:

    Abrir a página "Pipelines de entrega"

    O pipeline de entrega que você acabou de criar, cloudrun-guestbook-backend-delivery é exibido.

  3. Clique em cloudrun-guestbook-backend-delivery para monitorar o progresso. A página Detalhes do pipeline de entrega é aberta.

  4. No Cloud Shell, crie uma versão no Cloud Deploy:

    gcloud deploy releases create test-release-007 \
        --delivery-pipeline=cloudrun-guestbook-backend-delivery \
        --skaffold-file=cloudrun.skaffold.yaml \
        --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.

  5. Monitore a visualização Visualização do pipeline na página Detalhes do pipeline de entrega até que o botão Promover seja exibido para dev-cluster. Talvez seja necessário atualizar a página.

  6. No primeiro destino na visualização do pipeline de exibição, cloudrun-dev, clique em Promover.

    A caixa de diálogo Promover versão é exibida. Ela mostra os detalhes do destino que você está promovendo.

  7. Clique em Promover.

    A versão agora está na fila para implantação em cloudrun-prod. Quando a implantação estiver concluída, a visualização do pipeline de entrega a mostrará como implantada:

    Captura de tela da implantação

Conferir insights de segurança no Cloud Deploy

  1. Abra a página Pipelines de entrega do Cloud Deploy na console do Google Cloud.

    Abrir a página do Cloud Deploy

  2. Na tabela Pipelines de entrega, clique em cloudrun-reader-backend-delivery.

  3. Na página Detalhes dos pipelines de entrega, clique em test-release-008.

  4. Na página Detalhes da versão, clique na guia Artefatos.

  5. Na tabela Build artifacts, localize a linha com o artefato java-guestbook-backend e, na coluna Security insights correspondente, clique em View.

Você verá o painel Segurança do Software Delivery Shield para a implantação.

Captura de tela do painel de segurança

Esse painel exibe as seguintes informações:

  • Nível SLSA: esta versão atingiu o nível 3 de SLSA. Clique no link Saiba mais para saber o que esse nível de segurança significa.

  • Vulnerabilidades: todas as vulnerabilidades encontradas nos seus artefatos. Clique no nome da imagem (java-guestbook-backend) para conferir os artefatos que foram verificados quanto a vulnerabilidades.

  • Dependências dos artefatos de compilação.

  • Detalhes do build: detalhes do build, como o builder e o link para visualizar registros.

Mostrar insights de segurança no Cloud Run

  1. Abra a página Serviços do Cloud Run.

    Abrir a página Serviços do Cloud Run

  2. Na tabela Services do Cloud Run, clique em guestbook-backend-prod.

  3. Na página Detalhes do serviço, clique em Revisões.

  4. No painel Revisões, clique em Segurança.

Você verá o painel Segurança do Software Delivery Shield para a implantação.

Captura de tela do painel de segurança

Esse painel mostra as seguintes informações:

  • Identidade e criptografia: o endereço de e-mail do endereço de e-mail padrão do Compute Engine conta de serviço e a chave de criptografia usada para a implantação.

  • Nível SLSA: esta versão atingiu o nível 3 de SLSA. Clique no link Saiba mais para saber o que esse nível de segurança significa.

  • Vulnerabilidades: todas as vulnerabilidades encontradas nos seus artefatos. Clique no nome da imagem (java-guestbook-backend) para conferir os artefatos que foram verificados quanto a vulnerabilidades.

  • Dependências dos artefatos de compilação.

  • Detalhes da versão:detalhes da versão, como o builder e o link para e conferir os registros.

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.

  1. Desativar a API Container Scanning:

    gcloud services disable containerscanning.googleapis.com --force
    
  2. Exclua o serviço do Cloud Run guestbook-backend-dev:

    gcloud run services delete guestbook-backend-dev --region=us-central1 \
        --project=${PROJECT_ID}
    
  3. Exclua o serviço guestbook-backend-prod:

    gcloud run services delete guestbook-backend-prod --region=us-central1 \
        --project=${PROJECT_ID}
    
  4. Exclua o pipeline de entrega, incluindo a versão e os lançamentos:

    gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \
        --force --region=us-central1 --project=${PROJECT_ID}
    

    Esse comando exclui o próprio pipeline de entrega, além de todos os release e rollout recursos de segurança da cadeia de suprimentos de software criada para esse pipeline.

  5. Exclua o repositório do Artifact Registry:

    gcloud artifacts repositories delete containers \
        --location=us-central1 --async
    

Pronto, você concluiu as etapas deste início rápido.

A seguir