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:
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.
- Cloud Build
- Artifact Registry
- Artifact Analysis
- Autorização binária
- Pub/Sub
- Cloud Run
- Funções do Cloud Run
Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto.
Antes de começar
Você precisará de uma organização do Google Cloud para usar o pipeline de imagens seguro. Os clientes do Google Workspace e do Cloud Identity podem criar uma organização do Google Cloud:
- Google Workspace: inscreva-se no Google Workspace.
- Cloud Identity: inscreva-se no Cloud Identity.
Para mais informações sobre a organização do Google Cloud, consulte o Guia de início rápido sobre como usar organizações.
Instale o Terraform 0.14.10.
Caso ainda não tenha um, crie uma conta no GitHub.
- Se você tiver a autenticação de dois fatores configurada no GitHub, crie um token de acesso pessoal para usar no lugar de uma senha do GitHub com a linha de comando.
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:
Clone o repositório do GitHub do pipeline de imagens seguro na máquina local:
git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
Navegue até o diretório
secure-image-pipeline
:cd secure-image-pipeline/
Copie
env.sh.tmpl
paraenv.sh
:cp env.sh.tmpl env.sh
Abra
env.sh
no editor desejado.Edite os seguintes valores:
- PARENT_ORGANIZATION: insira o ID da organização do Google Cloud. O script de pipeline de imagem seguro 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 IDsfoo-builder
,foo-stage
efoo-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.
Execute o script de configuração:
./setup.sh
Digite as seguintes informações da conta do GitHub quando solicitado:
O nome da sua organização do GitHub.
Seu endereço de e-mail do GitHub
Seu nome de usuário do GitHub.
Conceda ao script permissão para criar um novo projeto para armazenar imagens de base.
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.
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 seu projeto do Google Cloud.
Mude para a janela do navegador do console do Google Cloud.
No pop-up Gerenciar suas instalações de aplicativos do GitHub, selecione sua conta do GitHub.
Clique em Adicionar outro projeto.
No menu suspenso Selecionar um projeto, selecione o projeto no formato YOUR_PROJECT_NAME-builder.
Selecione a caixa de seleção de consentimento e clique em Avançar.
Na lista de repositórios, selecione o repositório chamado baseimgFact-[algum número]-containers e clique em Conectar (1) repositórios.
Na página Criar gatilho push, clique em Pular. O script cria automaticamente o gatilho push para você.
Clique em Concluído.
Volte para o terminal.
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 scriptsetup
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 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 de IAM para
YOUR_PROJECT_NAME-builder
: recomendamos que você conceda acesso apenas a esse projeto 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 Google 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.
- Funções do Cloud Run 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 as funções do Cloud Run.
- 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. Após a aprovação das verificações de segurança, o servidor de cupons 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
- Saiba como usar o pipeline de imagem base.
- Saiba como especificar uma política de segurança personalizada.