Como criar o pipeline de imagens seguro

Nesta página, explicamos como configurar o Pipeline de imagens seguro para automatizar a geração de imagens de contêiner de base.

Visão geral

O Pipeline de imagens seguro é uma ferramenta de código aberto que configura um framework de projetos do Google Cloud, recursos e um repositório do GitHub que pode ser usado para criar e manter imagens de base seguras e personalizadas. É possível consumir as imagens de projetos do Google Cloud.

A imagem a seguir ilustra o framework de recursos criados pelo pipeline de imagens seguro:

Pipeline de imagens seguro

Depois de configurar o pipeline, ele cria os seguintes recursos:

  • Um repositório do GitHub que hospeda o código-fonte das imagens do contêiner.

  • Três projetos do Google Cloud: projeto de criação, projeto de preparação e projeto de verificação. Sempre que uma imagem é atualizada no repositório de imagens, Gatilhos do Cloud Build nos builds do projeto de criação, assina e envia a imagem atualizada para o Artifact Registry no projeto de preparação. Quando a imagem no projeto de preparação é verificada manualmente, o pipeline envia a imagem para o projeto verificado.

Custos

O pipeline de imagens seguro usa os seguintes produtos do Google Cloud.

Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Antes de começar

Permissões do IAM obrigatórias

A configuração do pipeline de imagens seguro do usuário exige os papéis de gerenciamento de identidade roles/organization.admin e roles/billing.admin para a organização do Google Cloud. Para instruções sobre como conceder papéis do IAM, consulte Como conceder, alterar e revogar o acesso.

Como configurar o pipeline de imagens seguro

O repositório do GitHub do pipeline de imagens seguro contém o script para automatizar a geração de imagens de base.

Para configurar o pipeline de imagens seguro:

  1. Clone o repositório do GitHub do pipeline de imagens seguro na máquina local:

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. Navegue até o diretório secure-image-pipeline:

    cd secure-image-pipeline/
    
  3. Copie env.sh.tmpl para env.sh:

    cp env.sh.tmpl env.sh
    
  4. Abra env.sh no editor desejado.

  5. Edite os seguintes valores:

    • PARENT_ORGANIZATION: insira o ID da organização do Google Cloud. O script de pipeline de imagens seguro usa essa organização para gerar projetos do Cloud e imagens de base.
    • BASEIMGFCT_PROJECT: insira uma string usando o script para criar os IDs dos projetos que ele cria. A string precisa ter de 6 a 30 letras minúsculas, dígitos ou hifens. Precisa começar com uma letra e não pode ter um hífen à direita. Por exemplo, se você especificar foo, o script criará três projetos com os IDs foo-builder, foo-stage e foo-verified.
    • BASEIMGFCT_BUCKET: insira um nome para um bucket do Cloud Storage criado pelo script para armazenar o código de automação do Terraform. Verifique se o nome atende aos requisitos de nomenclatura de bucket.
    • BASEIMGFCT_REGION: insira o nome da região a ser usada ou para usar o valor padrão.
    • BILLING_ACCOUNT: digite a conta de faturamento associada à organização.
    • GITHUB_TOKEN: insira seu token de acesso pessoal do GitHub. O script usa esse token para criar um repositório do GitHub que contém o código-fonte das imagens de base.
  6. Execute o script de configuração:

    ./setup.sh
    
  7. Digite as seguintes informações da conta do GitHub quando solicitado:

    1. O nome da sua organização do GitHub.

    2. Seu endereço de e-mail do GitHub

    3. Seu nome de usuário do GitHub.

    4. Conceda ao script permissão para criar um novo projeto para armazenar imagens de base.

    5. Digite "y".

    Essa operação leva alguns minutos para ser executada. Quando esse processo terminar, a mensagem Vincule seus repositórios do GitHub e pressione qualquer tecla para continuar será exibida.

  8. Pressione qualquer tecla para continuar.

    O script abre uma nova janela do navegador do Console do Google Cloud para vincular seu repositório do GitHub ao seu projeto do Cloud.

  9. Alterne para a janela do navegador do console.

  10. No pop-up Gerenciar suas instalações de aplicativos do GitHub, selecione sua conta do GitHub.

  11. Clique em Adicionar outro projeto.

  12. No menu suspenso Selecionar um projeto, selecione o projeto no formato YOUR_PROJECT_NAME-builder.

  13. Selecione a caixa de seleção de consentimento e clique em Avançar.

  14. Na lista de repositórios, selecione o repositório chamado baseimgFact-[algum número]-containers e clique em Conectar (1) repositórios.

  15. Na página Criar gatilho push, clique em Pular. O script cria automaticamente o gatilho push para você.

  16. Clique em Concluir.

  17. Volte para o terminal.

  18. Pressione qualquer tecla para continuar.

O script leva alguns minutos para concluir a execução.

Recursos criados pelo pipeline de imagens seguro

Quando a execução do script de configuração é concluída, ele cria os seguintes recursos:

GitHub:

  • Um repositório chamado baseimgfct-[some number]-containers que contém o código-fonte usado para criar imagens de contêiner. O script setup sugere esse repositório com Dockerfiles simples, um para cada uma das distribuições Linux conhecidas.
  • Chaves de implantação: separe as chaves de implantação de acesso para gravação ao repositório.

Projetos do Google Cloud:

  • Um projeto do Cloud chamado YOUR_PROJECT_NAME-builder que contém recursos para criar e enviar uma imagem ao projeto de preparação sempre que o código-fonte for atualizado no repositório do GitHub.

    Esse projeto contém os gatilhos do Cloud Build que invocam versões quando uma solicitação ou mesclagem de envio é realizada na ramificação principal em baseimgfct-[some number]-containers. Uma solicitação de envio cria e envia as imagens ao projeto de preparação. Uma mesclagem cria e envia as imagens para o projeto verificado.

    Permissões do IAM para YOUR_PROJECT_NAME-builder: recomendamos conceder acesso a esse projeto somente aos membros da equipe que precisam fazer alterações no pipeline. Para instruções sobre como conceder acesso a projetos, consulte Como conceder, alterar e revogar acesso.

  • Um projeto do Cloud chamado YOUR_PROJECT_NAME-stage que é usado para organizar imagens para uma revisão manual antes que as imagens sejam lançadas no projeto verificado. Este projeto contém os seguintes recursos:

    • Um repositório do Artifact Registry no Docker que contém as imagens de contêiner criadas.
    • Cloud Functions para cada imagem no projeto, que aciona uma recriação da imagem sempre que uma nova correção para uma vulnerabilidade conhecida é encontrada.
    • Tópicos do Pub/Sub usados para executar o Cloud Functions.
    • Uma instância do Servidor de cupons executada como uma implantação do Cloud Run. O servidor de cupons verifica a imagem com uma lista de requisitos de políticas de segurança. É possível usar os requisitos de política padrão que vêm com o pipeline ou especificar uma política de segurança personalizada. Depois que as verificações de segurança são aprovadas, o servidor do Voucher cria um atestado para a imagem usando a autorização binária. Essa imagem atestada, também chamada de imagem assinada, é enviada para o projeto verificado.

    Permissões de IAM para YOUR_PROJECT_NAME-stage: recomendamos que você conceda acesso apenas a esse projeto para desenvolvedores com permissão para ler as imagens em fase de testes do Artifact Registry. Para instruções sobre como conceder acesso a projetos, consulte Como conceder, alterar e revogar acesso.

  • Um projeto do Cloud chamado YOUR_PROJECT_NAME-verified. Esse projeto contém as imagens assinadas finais que foram revisadas manualmente.

A seguir