A segurança é uma preocupação crítica em qualquer ambiente de computação. Ao criar Dockerfiles, é importante ter em mente que a segurança é um aspecto fundamental que deve ser levado em consideração desde o início. O Dockerfile é a base para a criação das imagens de contêineres. Portanto, apresento aqui algumas boas práticas importantes que devem ser consideradas ao criar ou atualizar suas imagens.



Defina um usuário em seu Dockerfile:



O Docker executa contêineres como root por padrão, o que pode representar um risco de segurança, permitindo que um invasor explore vulnerabilidades e obtenha acesso ao host.



Para mitigar esse risco, é altamente recomendado executar contêineres como um usuário com menos privilégios sempre que possível, utilizando a instrução “USER” no Dockerfile.



FROM python:3.9-slim

# Cria grupo e usuário de sistema sem senha.

RUN groupadd -r appuser && useradd -r -g appuser appuser

WORKDIR /app

COPY myapp /app

RUN pip install --no-cache-dir -r requirements.txt

# Define as permissões para o diretório /app

RUN chown -R appuser:appuser /app

# Define o usuário padrão para o contêiner

USER appuser

CMD [ "python", "./app.py" ]



Use imagens confiáveis:



Ao criar um Dockerfile, é importante escolher imagens oficiais de fontes confiáveis como base para suas próprias imagens. Optar por imagens mínimas com apenas as ferramentas e bibliotecas necessárias garante uma imagem mais leve, segura e eficiente. 



Dessa forma, você pode manter o controle sobre o ambiente em que sua aplicação será executada, evitar problemas de segurança e conflitos futuros, e garantir que todas as dependências estejam presentes na imagem.



# Imagem Base

FROM alpine:3.14

RUN apk add --no-cache python3 py3-pip

RUN addgroup -S appuser && adduser -S appuser -G appuser

WORKDIR /app

COPY app /app

RUN pip install --no-cache-dir -r requirements.txt

RUN chown -R appuser:appuser /app

USER appuser

CMD [ "python", "./app.py" ]



Evite vazamento de dados confidenciais:



É fundamental proteger dados confidenciais, como senhas, chaves privadas e tokens, evitando sua inclusão direta no Dockerfile. Utilize recursos seguros para armazená-los, como Kubernetes secrets ou cofres como por exemplo hashicorp vault, aws secrets Manager, etc. 



Além disso, para evitar a inclusão acidental de arquivos confidenciais na imagem, utilize o arquivo “.dockerignore” para especificar arquivos e diretórios que devem ser excluídos durante o processo de construção da imagem.



Construa imagens usando Multi-stage:



Uma abordagem de multi-stage bem elaborada inclui somente os binários e as dependências mínimas necessárias na imagem final, diminuindo o tempo de build e podendo reduzir a superfície de ataques e vulnerabilidades, além de diminuir significativamente o tamanho da imagem final.



# Stage 1 - Build da aplicação

FROM node:14-alpine AS build

WORKDIR /app

COPY package*.json ./

RUN npm install –production

COPY app /app

RUN npm run build



# Stage 2 - Cópia dos arquivos de build e execução da aplicação



FROM node:14-alpine

WORKDIR /app

COPY --from=build /app/dist /app

COPY package*.json ./

RUN npm install –only=production

USER node

EXPOSE 3000

CMD ["npm", "start"]



Utilize um Linter para verificar erros:



Utilizar ferramentas como o hadolint, ajudam a identificar possíveis erros e garante que seu Dockerfile está seguindo as boas práticas recomendadas, dessa forma, é possível corrigir problemas antes ou durante o processo de construção de sua imagem.



FROM alpine:3.14

RUN apk add --no-cache python3 py3-pip

RUN addgroup -S appuser && adduser -S appuser -G appuser

WORKDIR /app

COPY app /app

RUN pip install --no-cache-dir -r requirements.txt

RUN chown -R appuser:appuser /app

USER appuser

CMD [ "python", "./app.py" ]






Utilizando ferramentas de scan:



Ferramentas de scan, como o trivy, ajudam a identificar vulnerabilidades em imagens e fornecer informações detalhadas sobre os problemas encontrados. Ao utilizá-las, você pode identificar e corrigir vulnerabilidades antes de implantar sua aplicação no ambiente, garantindo uma maior segurança e confiabilidade.



Conclusão:



Criar um Dockerfile utilizando as boas práticas permite mitigar riscos de segurança, reduzir vulnerabilidades e garantir a confiabilidade da aplicação. Portanto, investir em segurança desde o início do processo de construção da imagem é a melhor maneira de evitar futuros problemas de segurança.


Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content

Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content

Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content