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 na guia Segurança 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 de aplicativos para uma série de ambientes de destino em uma sequência de promoções definida.
  • Confira os seguintes insights de segurança da implantação:

    • Informações sobre identidade e criptografia para a implantação.
    • Nível de 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 de software (SBOM) para os artefatos de 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. Make sure that billing is enabled for your Google Cloud project.

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

  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ê vai encontrar containers na lista de repositórios exibidos.

Preparar o aplicativo de exemplo

Você vai precisar de um código-fonte de exemplo para criar e implantar. Nesta seção, você vai clonar um repositório de origem 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. Crie e conteinerize o aplicativo Java usando o Cloud Build. O comando a seguir cria e conteineriza o aplicativo Java e armazena o contêiner criado no repositório do 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 softwares de terceiros de fornecedores, artefatos internos e bibliotecas de código aberto.

Gere o SBOM para a imagem criada 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 seu 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 Detalhes do pipeline de entrega.

  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:

    Pipeline mostrando a promoção de cloudrun-dev para cloudrun-prod

Conferir insights de segurança no Cloud Deploy

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

    Abrir a página do Cloud Deploy

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

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

  4. Na página Detalhes do lançamento, 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.

A guia Segurança aparece para a implantação.

Guia "Segurança"

Essa guia mostra as seguintes informações na seção Insights de segurança:

  • Nível da SLSA:este build alcançou o nível 3 da 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 build.

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

Conferir 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 Serviços do Cloud Run, clique em guestbook-backend-prod.

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

  4. No painel Revisions, clique em Security.

A guia Segurança aparece para a implantação.

Guia "Segurança"

Esta guia mostra as seguintes informações na seção Insights de segurança:

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

  • Nível da SLSA:este build alcançou o nível 3 da 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 build.

  • Detalhes do build:detalhes do build, como o builder e o link para visualizar 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 recursos release e rollout da segurança da cadeia de suprimentos de software criados 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