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.

Informações gerais

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 do pipeline de imagem segura usa essa organização para gerar projetos do Google 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 permissão ao script para criar um novo projeto e 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 projeto do Google Cloud.

  9. Mude para a janela do navegador do console do Google Cloud.

  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 Concluído.

  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 Google Cloud chamado YOUR_PROJECT_NAME-builder, que contém recursos para criar e enviar uma imagem para o 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 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 que você conceda acesso a esse projeto apenas aos membros da equipe que devem fazer alterações no pipeline. Para instruções sobre como conceder acesso a projetos, consulte Como conceder, alterar e revogar acesso.

  • Um projeto do Google Cloud chamado YOUR_PROJECT_NAME-stage que é usado para preparar imagens para uma revisão manual antes que elas sejam liberadas para o 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 a verificação de segurança é aprovada, o servidor do cupom 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 Google Cloud chamado YOUR_PROJECT_NAME-verified. Esse projeto contém as imagens assinadas finais que foram revisadas manualmente.

A seguir