Implante no Cloud Run e confira insights de segurança

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

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

    • Informações de identidade e criptografia para a implantação.
    • Nível da cadeia de suprimentos para artefatos de software (SLSA, na sigla em inglês), que identifica o nível de garantia para a implantação.
    • Vulnerabilidades em artefatos de build.
    • Lista de materiais de software (SBOM, na sigla em inglês) para os artefatos de build.
    • Proveniê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 de origem de entrada, o conjunto de ferramentas, as etapas e a duração da versão.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative as APIs Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com
  7. Instale a CLI do Google Cloud.
  8. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  9. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  10. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  11. Ative as APIs Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning:

    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
    

Permitir 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 denominado containers no local us-central1 e 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 repositórios exibidos.

Preparar o aplicativo de exemplo

Você vai precisar de um código-fonte de amostra para criar e implantar. Nesta seção, você vai clonar um repositório de origem existente que contém uma 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 comando a seguir cria e conteineriza o aplicativo Java e armazena o contêiner criado no repositório Docker do Artifact Registry:

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

    Depois que a criação for concluída, você verá uma mensagem de status de sucesso semelhante à seguinte:

    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 SBOM para a imagem criada

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

Gere o SBOM 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 Cloud Deploy:

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

    Agora você tem um pipeline, com destinos, pronto 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, será 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 envio.

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

Ver 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-playbook-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 Artefatos de build, localize a linha com o artefato java-playbook-backend e, na coluna Insights de segurança correspondente, clique em Ver.

O painel Segurança do Software Delivery Shield vai aparecer para a implantação.

Captura de tela do painel de segurança

Esse painel mostra as seguintes informações:

  • Nível SLSA:esse 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:qualquer vulnerabilidade encontrada nos artefatos. Clique no nome da imagem (java-guestbook-backend) para ver os artefatos verificados em busca de vulnerabilidades.

  • Dependências para os artefatos de build.

  • Detalhes do build:detalhes da versão, 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 playbook-backend-prod.

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

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

O painel Segurança do Software Delivery Shield vai aparecer 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 da conta de serviço padrão do Compute Engine e a chave de criptografia usada para a implantação.

  • Nível SLSA:esse 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:qualquer vulnerabilidade encontrada nos artefatos. Clique no nome da imagem (java-guestbook-backend) para ver os artefatos verificados em busca de vulnerabilidades.

  • Dependências para os artefatos de build.

  • Detalhes do build:detalhes da versão, 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 guestbook-backend-dev do Cloud Run:

    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 que a segurança da cadeia de suprimentos de software foi 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