Como criar o pipeline seguro de imagens

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

Visão geral

O pipeline de imagem segura é uma ferramenta de código aberto que configura um framework de projetos, recursos e um repositório do GitHub que podem ser usados para criar e manter personalizados. e imagens de base seguras. É possível consumir as imagens de projetos do Google Cloud.

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

Proteger o pipeline de imagens

Depois de configurado, o pipeline cria os seguintes recursos:

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

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

Custos

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

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 seguras do usuário requer os papéis de gerenciamento de identidade e acesso 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 acesso.

Como configurar o pipeline seguro de imagens

O repositório seguro de pipeline de imagem do GitHub (em inglês) contém o script para automatizar a geração de imagens de base.

Para configurar o pipeline de imagem segura:

  1. Clone o repositório seguro do GitHub do pipeline de imagem 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 sua organização do Google Cloud. O script de pipeline de imagem seguro usa essa organização para gerar projetos do Cloud e imagens de base.
    • BASEIMGFCT_PROJECT: digite uma string usando o script em que os IDs dos projetos que ele cria são criados pelo script. A string precisa ter de 6 a 30 letras minúsculas, dígitos ou hifens. Ele 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 do bucket.
    • BASEIMGFCT_REGION: digite o nome da região a ser usada ou use o valor padrão.
    • BILLING_ACCOUNT: insira 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. Quando solicitado, insira as seguintes informações da conta do GitHub:

    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.

  8. O script solicita permissão para criar um novo projeto e armazenar imagens de base.

    1. Digite "y".

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

  9. Pressione qualquer tecla para continuar.

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

  10. Alterne para a janela do navegador do Console do Cloud.

  11. No pop-up Gerenciar as instalações do app GitHub, selecione sua conta do GitHub.

  12. Clique em Adicionar outro projeto.

  13. Na lista suspensa Selecionar um projeto, selecione o projeto do formato YOUR_PROJECT_NAME-builder.

  14. Marque a caixa de seleção de consentimento e clique em Avançar.

  15. Na lista de repositórios, selecione o repositório chamado baseimgfact-[some number]-containers e clique em Conectar (1) repositórios.

  16. Na página Criar gatilho push, clique em Pular. O script cria o gatilho push automaticamente.

  17. Clique em Concluído.

  18. Volte para o terminal.

  19. Pressione qualquer tecla para continuar.

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

Recursos criados pelo pipeline seguro de imagens

Quando o script de configuração conclui a execução, 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 propaga esse repositório com Dockerfiles simples, um para cada uma das distribuições Linux conhecidas.
  • Chaves de implantação: chaves separadas 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 preparo 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 de envio ou mesclagem é realizada na ramificação principal em baseimgfct-[some number]-containers. Uma solicitação de envio cria e envia as imagens para o projeto de preparo. Uma mesclagem é criada e as imagens são enviadas para o projeto verificado.

    Permissões do IAM para YOUR_PROJECT_NAME-builder: recomendamos que você conceda acesso a este projeto apenas para membros da equipe que farão alterações no pipeline. Para instruções de como conceder acesso a projetos, consulte Como conceder, alterar e revogar acesso.

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

    • Um repositório do Docker do Artifact Registry que contém as imagens de contêiner criadas.
    • Cloud Functions para cada imagem no projeto, o que aciona uma recriação da imagem sempre que uma nova correção de uma vulnerabilidade conhecida é encontrada.
    • Tópicos do Pub/Sub usados para executar o Cloud Functions.
    • Uma instância do servidor de cupom executada como uma implantação do Cloud Run. O servidor do Voucher 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. Após a aprovação das verificações de segurança, o servidor do Voucher adiciona um atestado à imagem usando a autorização binária. Essa imagem atestada, também chamada de imagem assinada, é enviada ao projeto verificado.

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

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

A seguir