Implemente no Cloud Run e veja estatísticas de segurança

Este início rápido explica como implementar uma imagem de contentor no Cloud Run e ver estatísticas de segurança para a implementação no separador Segurança naGoogle Cloud consola. Vai:

  • Implemente uma imagem no Cloud Run através do Cloud Deploy. O Cloud Deploy é um Google Cloud serviço que automatiza o fornecimento das suas aplicações a uma série de ambientes de destino numa sequência de promoção definida.
  • Veja as seguintes estatísticas de segurança para a implementação:

    • Informações de identidade e encriptação para a implementação.
    • Nível dos níveis da cadeia de fornecimento para artefactos de software (SLSA), que identifica o nível de garantia para a implementação.
    • Vulnerabilidades nos artefactos de compilação.
    • Lista de materiais de software (SBOM) para os artefactos de compilação.
    • Crie a proveniência, que é uma coleção de metadados validáveis sobre uma compilação. Inclui detalhes como os resumos das imagens criadas, as localizações das fontes de entrada, a cadeia de ferramentas de compilação, os passos de compilação e a duração da compilação.

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 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
  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 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
  14. Defina as predefinições

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

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

      gcloud config set deploy/region us-central1
      

    Conceder acesso

    Conceda funções IAM à conta de serviço predefinida do Compute Engine. Isto é necessário para o Cloud Deploy implementar 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 tiver problemas em adicionar qualquer uma destas funções, contacte o administrador do projeto.

    Crie um repositório Docker no Artifact Registry

    1. Crie um novo repositório Docker denominado containers na localização us-central1 com a descrição "Repositório 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
      

      Deverá ver containers na lista de repositórios apresentados.

    Prepare uma aplicação de exemplo

    Precisa de algum código fonte de exemplo para criar e implementar. Nesta secção, vai clonar um repositório de origem existente 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
      

    Crie a aplicação

    1. Crie e coloque a aplicação Java num contentor com o Cloud Build. O comando seguinte cria e coloca a aplicação Java num contentor, e armazena o contentor criado no repositório Docker do Artifact Registry:

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

      Após a conclusão da compilação, é apresentada uma mensagem de estado de êxito 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
      

    Gere a SBOM para a imagem criada

    Uma SBOM é um inventário completo de uma aplicação que identifica os pacotes dos quais o seu software depende. Os conteúdos podem incluir software de terceiros de fornecedores, artefactos internos e bibliotecas de código aberto.

    Gere a SBOM para a imagem que criou na secção anterior:

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

    Implemente o contentor no Cloud Run através do Cloud Deploy

    1. Registe o pipeline e os destinos no serviço Cloud Deploy:

      gcloud deploy apply --file cloudrun.clouddeploy.yaml
      

      Agora, tem um pipeline com alvos pronto para implementar a sua aplicação no primeiro alvo.

    2. Para verificar se o pipeline existe, aceda à página Pipelines de entrega na consola Google Cloud :

      Abra a página Pipelines de fornecimento

      É apresentada a pipeline de entrega que acabou de criar, cloudrun-guestbook-backend-delivery.

    3. Clique em cloudrun-guestbook-backend-delivery para monitorizar o progresso. É apresentada a página Detalhes do pipeline de entrega.

    4. No Cloud Shell, crie um lançamento 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
      

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

    5. Monitorize a vista Visualização da pipeline na página Detalhes da pipeline de fornecimento até o botão Promover ser apresentado para dev-cluster. Pode ter de atualizar a página.

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

      É apresentada a caixa de diálogo Promover lançamento. Mostra os detalhes do destino que está a promover.

    7. Clique em Promover.

      O lançamento está agora na fila para implementação no cloudrun-prod. Quando a implementação estiver concluída, a visualização do pipeline de publicação mostra que foi implementada:

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

    Veja estatísticas de segurança no Cloud Deploy

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

      Abra a página do Cloud Deploy

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

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

    4. Na página Detalhes do lançamento, clique no separador Artefactos.

    5. Na tabela Criar artefactos, localize a linha com o artefacto java-guestbook-backend e, na coluna Estatísticas de segurança correspondente, clique em Ver.

    É apresentado o separador Segurança para a implementação.

    Separador Segurança

    Este separador apresenta as seguintes informações na secção Estatísticas de segurança:

    • Nível SLSA: esta compilação alcançou o nível 3 da SLSA. Clique no link Saiba mais para saber o que significa este nível de segurança.

    • Vulnerabilidades: quaisquer vulnerabilidades encontradas nos seus artefactos. Clique no nome da imagem (java-guestbook-backend) para ver os artefactos que foram analisados quanto a vulnerabilidades.

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

    • Detalhes da compilação: detalhes da compilação, como o criador e o link para ver os registos.

    Veja estatísticas de segurança no Cloud Run

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

      Abra 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 Revisões, clique em Segurança.

    É apresentado o separador Segurança para a implementação.

    Separador Segurança

    Este separador apresenta as seguintes informações na secção Estatísticas de segurança:

    • Identidade e encriptação: o endereço de email da conta de serviço do Compute Engine predefinida e a chave de encriptação usada para a implementação.

    • Nível SLSA: esta compilação alcançou o nível 3 da SLSA. Clique no link Saiba mais para saber o que significa este nível de segurança.

    • Vulnerabilidades: quaisquer vulnerabilidades encontradas nos seus artefactos. Clique no nome da imagem (java-guestbook-backend) para ver os artefactos que foram analisados quanto a vulnerabilidades.

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

    • Detalhes da compilação: detalhes da compilação, como o criador e o link para ver os registos.

    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.

    1. Desative a API Container Scanning:

      gcloud services disable containerscanning.googleapis.com --force
      
    2. Elimine o serviço do guestbook-backend-devCloud Run:

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

      gcloud run services delete guestbook-backend-prod --region=us-central1 \
          --project=${PROJECT_ID}
      
    4. Elimine o pipeline de envio, incluindo o lançamento e as implementações:

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

      Este comando elimina o próprio pipeline de entrega, além de todos os recursos release e rollout de segurança da cadeia de abastecimento de software criados para esse pipeline.

    5. Elimine o repositório do Artifact Registry:

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

    É tudo. Concluiu este início rápido!

    O que se segue?