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:
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
- Cloud Functions
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 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 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 permissão ao script para criar um novo projeto e 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 seu repositório do GitHub ao 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 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
- Saiba como usar o pipeline de imagem base.
- Saiba como especificar uma política de segurança personalizada.