Digamos que eu crie um Dockerfile que usa outra imagem como baseImage com o comando FROM, então o Docker build puxará essa baseImage do repositório se ela não for encontrada localmente.
Agora, digamos que eu construa minha própria baseImage e queira usá-la como base para outras imagens. Em seguida, dou à baseImage um nome comum, por exemplo, aCommonImageName. Se eu esquecer de construir a baseImage localmente, a imagem que usa minha própria baseImage como base baixará outra imagem aleatória do repositório que compartilhe o mesmo nome, talvez até mesmo uma imagem comprometida.
Como posso restringir o Dockerfile para abortar o processo de compilação se a baseImage não for encontrada entre as imagens da máquina local?
O Docker Content Trust pode ajudar
O Docker Content Trust (DCT) oferece a capacidade de usar assinaturas digitais para dados enviados e recebidos de registros remotos do Docker. Essas assinaturas permitem a verificação, no lado do cliente ou em tempo de execução, da integridade e do publicador de tags de imagem específicas.
No seu caso, você pode assinar a imagem base da compilação local
aCommonImageName
. O processo de compilação será abortado se a imagem extraídaaCommonImageName
dos registros remotos não tiver uma assinatura válida.Detalhes
Ver
Há algumas coisas que você quer fazer:
Regras de rede de saída. Não permita que seus servidores de produção (e o CI conta como produção) se conectem a servidores arbitrários na internet. Controlar o tráfego de saída previne um número significativo de ataques.
Não abuse de nomes comuns para imagens. A
FROM
imagem deve sempre apontar para um local conhecido, controlado por alguém em quem você confia. Para imagens que você não deseja publicar publicamente, você pode apontar para um servidor de registro privado ou, pelo menos, nomear as imagens com um nome de registro e organização que você controla. Por exemplo, se você é o proprietário da organizaçãocompany-x
no Docker Hub, ninguém de fora da sua organização deve conseguir fazer pushcompany-x/base-image-y
, e você pode usar esse nome com segurança, mesmo que nunca faça pushbase-image-y
.Melhor ainda, você deve fixar essas referências em um resumo sha256 e automatizar a atualização desses pinos. Assim, as únicas imagens usadas como imagem base serão aquelas que você pré-aprovou, mesmo que o repositório tenha sido comprometido.