Skip to content
Back to skills

Containers

BSecurity

Especialista em tecnologias e ecossistemas de containers (locais e cloud), dominando padrões OCI, Docker, Podman, CRI-O, Buildah, Kubernetes, registries seguros, hardening e orquestração gerenciada em nuvem.

  • 10 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
devopspythonrustgoc++shellbashsqlnodedockerkubernetes

Works with

  • cli
  • api

Security analysis

B88/100
  • criticalAccesses sensitive system or user directories

Pro shows the line behind each finding and how to fix it

Scanned September 8, 2026

npx -y skills add dandgabr/skills --skill containers --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Containers?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Containers
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/dandgabr-containers/badge)](https://www.skillsdirectory.com/skills/dandgabr-containers)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "program-containers"
description: "Especialista em tecnologias e ecossistemas de containers (locais e cloud), dominando padrões OCI, Docker, Podman, CRI-O, Buildah, Kubernetes, registries seguros, hardening e orquestração gerenciada em nuvem."
---

# 📦 Habilidade de IA: Tecnologias de Containers (Docker, Podman, CRI-O, Buildah & Kubernetes)

Esta skill orienta a inteligência artificial a atuar como **Especialista em Tecnologias de Containers**, cobrindo o ciclo de vida completo de empacotamento, distribuição, segurança, isolamento em runtime e orquestração de containers em ambientes locais, híbridos e multi-cloud.

---

## 📜 1. Padrão OCI (Open Container Initiative) & Arquitetura de Imagens

A **Open Container Initiative (OCI)** estabelece padrões abertos para formatos de imagens, runtimes e distribuição, garantindo interoperabilidade entre diferentes ferramentas (Docker, Podman, Buildah, containerd, CRI-O).

### Especificações Fundamentais
- **OCI Image Specification**: Define a estrutura de um arquivo de imagem em camadas (tarballs), o arquivo de configuração JSON (metadados de execução, variáveis de ambiente, entrypoint), o **Manifest** (descritor de camadas e config) e o **Manifest List / Image Index** (suporte a múltiplas arquiteturas de CPU, como `amd64`, `arm64`, `riscv64`).
- **OCI Runtime Specification**: Define a configuração do ambiente de execução de um container (`config.json`), o ciclo de vida dos processos (create, start, stop, delete) e a interface utilizada por runtimes de baixo nível como `runc`, `crun` e `youki`.
- **OCI Distribution Specification**: Padroniza a API HTTP/REST para push, pull, autenticação, catalogação e gerenciamento de blobs e manifests entre clientes de container e Registries.

### Anatomia das Camadas e Storage Drivers
- **Imutabilidade e Reutilização**: Imagens são compostas por camadas *read-only* empilhadas via SHA256 content addressability.
- **Copy-on-Write (CoW)**: Ao instanciar um container, uma camada fina gravável (*writable container layer*) é alocada no topo. Modificações em arquivos existentes disparam cópia para a camada superior.
- **OverlayFS (overlay2)**: Storage driver padrão no Linux que combina `lowerdir` (camadas read-only da imagem), `upperdir` (camada read-write do container), `workdir` (área intermediária) e `merged` (visão unificada montada no sistema de arquivos do container).

---

## 🐳 2. Docker & Melhores Práticas de Construção

O **Docker** continua sendo a plataforma de desenvolvimento mais disseminada para criação e execução de containers.

### Melhores Práticas para Dockerfile
1. **Ordem de Instruções e Caching de Camadas**: Posicione instruções raramente alteradas (como instalação de pacotes do SO e download de dependências) antes das instruções que mudam com frequência (cópia de código-fonte).
2. **Utilização Estrita do `.dockerignore`**: Exclua arquivos desnecessários (`.git`, `node_modules`, `target/`, `.env`, logs, documentação) para acelerar o envio do contexto de build e impedir vazamento de segredos.
3. **Execução sem Privilégios (Non-Root)**: Crie um usuário dedicado com UID/GID fixo no container e nunca execute a aplicação como `root` em produção.
4. **Combinação de Comandos**: Combine comandos de instalação e limpeza de cache de pacotes na mesma instrução `RUN` para evitar que arquivos temporários permaneçam gravados em camadas intermediárias.

### Exemplo Prático: Multi-Stage Build Otimizado (Go Backend com Scratch/Distroless)

```dockerfile
# ==========================================
# Stage 1: Build & Compilation Environment
# ==========================================
FROM golang:1.24-alpine AS builder

# Install build dependencies and security certificates
RUN apk add --no-cache ca-certificates git tzdata

# Set working directory
WORKDIR /app

# Optimize layer caching by copying dependencies first
COPY go.mod go.sum ./
RUN go mod download && go mod verify

# Copy application source code
COPY . .

# Compile static binary without CGO dependencies
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
    -ldflags="-w -s -X main.version=1.0.0" \
    -trimpath \
    -o /app/server ./cmd/server

# Create a non-privileged user and group for runtime
RUN echo "nonroot:x:65532:65532:nonroot user:/:/sbin/nologin" > /etc/passwd_nonroot

# ==========================================
# Stage 2: Minimal Production Runtime
# ==========================================
FROM scratch AS production

# Copy essential runtime files from builder
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=builder /etc/passwd_nonroot /etc/passwd
COPY --from=builder --chown=65532:65532 /app/server /server

# Use non-privileged user
USER 65532:65532

# Expose service port
EXPOSE 8080

# Configure healthcheck (via executable or API endpoints)
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD ["/server", "--healthcheck"] || exit 1

# Set production entrypoint
ENTRYPOINT ["/server"]
```

### Exemplo de `.dockerignore`
```text
.git
.gitignore
.env
.env.*
node_modules
dist
target
bin
*.md
Dockerfile*
docker-compose*.yml
tests/
coverage/
```

### Redes e Volumes no Docker
- **Redes**:
  - `bridge`: Rede padrão isolada para containers na mesma máquina host.
  - `host`: Elimina o isolamento de rede do container, utilizando a interface de rede do host diretamente.
  - `overlay`: Viabiliza comunicação criptografada multi-host (usado no Docker Swarm e orquestradores).
  - `none`: Desabilita completamente interfaces de rede no container.
- **Volumes**:
  - **Named Volumes**: Gerenciados pelo Docker (`/var/lib/docker/volumes`), isolados do filesystem do host e com alta performance.
  - **Bind Mounts**: Mapeamento direto de um caminho do host para dentro do container (ideal para desenvolvimento local com hot-reloading).
  - **tmpfs Mounts**: Armazenamento volátil em memória RAM, ideal para segredos temporários e dados transitórios de alta performance.

### Exemplo Prático: `docker-compose.yml` Completo com Healthchecks e Isolamento

```yaml
version: "3.8"

networks:
  frontend-net:
    driver: bridge
  backend-net:
    driver: bridge
    internal: true # Isolated network without external internet access

volumes:
  postgres-data:
    driver: local

services:
  database:
    image: postgres:16-alpine
    container_name: app-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: secure_database_password
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - backend-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser -d appdb"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 512M

  api-service:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: app-api
    restart: unless-stopped
    depends_on:
      database:
        condition: service_healthy
    environment:
      PORT: 8080
      DATABASE_URL: postgres://appuser:secure_database_password@database:5432/appdb?sslmode=disable
    ports:
      - "8080:8080"
    networks:
      - frontend-net
      - backend-net
    healthcheck:
      test: ["CMD", "/server", "--healthcheck"]
      interval: 15s
      timeout: 3s
      retries: 3
      start_period: 5s
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 256M
```

---

## 🦭 3. Podman (Pod Manager) & Arquitetura Daemonless

O **Podman** é uma engine de containers sem daemon central (*daemonless*) projetada para executar containers e pods de forma segura e com suporte nativo a *rootless*.

### Características Chave do Podman
- **Arquitetura Daemonless**: Utiliza o modelo tradicional fork-exec do Linux. Cada container é um processo filho direto monitorado pelo `conmon` e executado via OCI runtime (`runc` ou `crun`), eliminando o *single point of failure* de um daemon central com privilégios de root.
- **Rootless por Padrão**: Permite que usuários sem privilégios administrativos executem containers com segurança utilizando *User Namespaces* do Linux (`/etc/subuid` e `/etc/subgid`). O usuário é `root (UID 0)` dentro do container, mas mapeado para um UID regular e sem privilégios (ex: `UID 10001`) no host.
- **Conceito de Pods Locais**: Capacidade de criar e gerenciar grupos de containers que compartilham a mesma rede (`localhost`), IPC, namespace UTS e volumes, espelhando a semântica de Pods do Kubernetes:
  ```bash
  # Create a pod with exposed port
  podman pod create --name web-pod -p 8080:80

  # Run container inside the existing pod
  podman run -d --pod web-pod --name nginx-server nginx:alpine
  ```
- **Compatibilidade Docker**: Compatibilidade CLI total via alias `alias docker=podman` e suporte à API Docker via socket de serviço systemd (`podman.socket`).
- **`podman-compose`**: Execução de especificações Compose sem necessidade do daemon do Docker.

### Integração Nativa com Systemd & Quadlets

O Podman permite a geração de unidades systemd (`podman generate systemd`) e adota a tecnologia **Quadlets** como padrão moderno declarativo para gerenciar containers como serviços systemd nativos.

#### Exemplo de Arquivo Quadlet (`~/.config/containers/systemd/api-service.container`)
```ini
[Unit]
Description=Production API Microservice
After=network-online.target

[Container]
Image=ghcr.io/myorg/api-service:v1.0.0
ContainerName=api-microservice
AutoUpdate=registry
PublishPort=8080:8080
Environment=NODE_ENV=production
Environment=PORT=8080
Volume=/var/log/app:/app/logs:Z
Network=host
RunInit=true
SecurityLabelDisable=false

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=default.target
```

Para aplicar e iniciar:
```bash
systemctl --user daemon-reload
systemctl --user start api-service
systemctl --user status api-service
```

---

## 🔨 4. Buildah & Construção de Imagens sem Daemon

O **Buildah** é uma ferramenta de linha de comando especializada em construir imagens OCI e Docker sem necessidade de um daemon de container em execução e sem depender de privilégios de root.

### Diferenciais do Buildah
- **Isolamento e Scripting Flexível**: Permite construir imagens usando comandos tradicionais de shell (Bash/Zsh) ou via Dockerfiles (`buildah bud`).
- **Construção `FROM scratch` Absoluta**: Criação de imagens partindo de um filesystem completamente vazio, montando o sistema de arquivos da imagem temporariamente no host para injeção cirúrgica de binários e dependências:
  ```bash
  # Initialize empty container
  new_container=$(buildah from scratch)

  # Mount container filesystem on host
  mount_point=$(buildah mount $new_container)

  # Copy compiled binary and configuration into mounted filesystem
  cp ./my-binary $mount_point/
  chmod 755 $mount_point/my-binary

  # Configure image metadata
  buildah config --entrypoint '["/my-binary"]' $new_container
  buildah config --user 65532:65532 $new_container
  buildah config --created-by "Buildah Script" $new_container

  # Commit image into local storage
  buildah commit --squash $new_container my-minimal-app:latest

  # Unmount and clean temporary container
  buildah unmount $new_container
  buildah rm $new_container
  ```
- **Controle Granular de Camadas**: Controle explícito sobre a criação de camadas (`--layers=false`), possibilitando squash de camadas, inclusão de anotações OCI e redução máxima do tamanho final da imagem.

---

## ⚡ 5. CRI-O & Runtimes Nativos para Kubernetes

O **CRI-O** é uma implementação leve e otimizada da **Container Runtime Interface (CRI)** do Kubernetes, projetada exclusivamente para servir como runtime de containers em nós de clusters Kubernetes.

### Comparativo: CRI-O vs containerd

| Critério | CRI-O | containerd |
| :--- | :--- | :--- |
| **Foco Principal** | Kubernetes exclusivamente | Uso geral (Kubernetes, Docker, CLI local) |
| **Escopo de Funcionalidades** | Apenas o necessário para atender ao CRI | Amplo (suporte a plugins, multi-namespaces, containerd CLI) |
| **Consumo de Recursos** | Mínimo footprint de memória e CPU por nó | Muito baixo, porém ligeiramente mais abrangente |
| **Adotantes Principais** | Red Hat OpenShift, clusters Kubernetes hardened | EKS, GKE, AKS, distribuições Kubernetes padrão |
| **OCI Runtimes Suportados** | `runc`, `crun` (C rápido), `kata-containers` | `runc`, `crun`, `gVisor (runsc)`, `kata` |

### Características de Produção
- **Alinhamento com Versões do Kubernetes**: Cada versão do CRI-O (ex: 1.30) segue rigidamente a versão correspondente do Kubernetes (1.30).
- **Sem Superfície Desnecessária**: Elimina abstrações de CLI de desenvolvedor, focando estritamente em segurança, performance de inicialização de pods e conformidade OCI.

---

## ☸️ 6. Kubernetes Containers & Workloads em Produção

No Kubernetes, o container é a unidade fundamental de execução encapsulada dentro de **Pods**.

### Anatomia e Ciclo de Vida do Pod Spec
- **`initContainers`**: Containers executados sequencialmente antes do início dos containers da aplicação (utilizados para migrações de banco, aguardo de dependências ou download de configurações).
- **`sidecarContainers`** (Sidecars Nativos): Suportados nativamente a partir do Kubernetes 1.28+ via `restartPolicy: Always` em `initContainers` para proxies de rede (Envoy/Istio), coleta de logs (Fluentbit) e agentes de métricas.
- **Resource Management (Requests & Limits)**:
  - `requests`: Recursos mínimos garantidos pelo scheduler do Kubernetes para alocação do Pod no nó.
  - `limits`: Limite rígido imposto pelo cgroups do Linux (CPU throttling quando ultrapassado; OOMKilled se a memória ultrapassar o limit).
  - **Quality of Service (QoS)**: `Guaranteed` (requests = limits), `Burstable` (requests < limits), `BestEffort` (sem requests/limits definidos).

### Hardening com Security Context & Pod Security Standards (PSS)
- **Pod Security Standards**:
  - `Privileged`: Sem restrições (usado para componentes de sistema e CNI).
  - `Baseline`: Previne escalonamento de privilégios conhecido com configuração mínima.
  - `Restricted`: Máximo nível de hardening (non-root obrigatório, filesystem read-only, drop de todas as capabilities).

### Exemplo Prático: Manifesto Kubernetes Hardened (Deployment & Service)

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-payment
  namespace: production
  labels:
    app.kubernetes.io/name: microservice-payment
    app.kubernetes.io/part-of: checkout-platform
spec:
  replicas: 3
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: microservice-payment
  template:
    metadata:
      labels:
        app: microservice-payment
    spec:
      # Pod-level security context
      securityContext:
        runAsNonRoot: true
        runAsUser: 10001
        runAsGroup: 10001
        fsGroup: 10001
        seccompProfile:
          type: RuntimeDefault

      initContainers:
        - name: wait-for-database
          image: busybox:1.36
          command: ['sh', '-c', 'until nc -z -w 2 postgres-service.production.svc.cluster.local 5432; do echo waiting for db; sleep 2; done;']
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop: ["ALL"]
          resources:
            requests:
              cpu: 50m
              memory: 32Mi
            limits:
              cpu: 100m
              memory: 64Mi

      containers:
        - name: payment-api
          image: ghcr.io/myorg/payment-api:v2.1.0@sha256:7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
              name: http-api
              protocol: TCP

          # Container-level security context (Restricted Profile)
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop:
                - ALL
                - NET_RAW

          resources:
            requests:
              cpu: 250m
              memory: 256Mi
            limits:
              cpu: 500m
              memory: 512Mi

          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 15
            timeoutSeconds: 3
            failureThreshold: 3

          readinessProbe:
            httpGet:
              path: /ready
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
            timeoutSeconds: 2
            failureThreshold: 2

          volumeMounts:
            - name: tmp-volume
              mountPath: /tmp

      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
            sizeLimit: 64Mi
---
apiVersion: v1
kind: Service
metadata:
  name: payment-service
  namespace: production
spec:
  type: ClusterIP
  selector:
    app: microservice-payment
  ports:
    - name: http
      port: 80
      targetPort: 8080
      protocol: TCP
```

---

## 🏢 7. Container Registries & Estratégias de Versionamento

Os Registries armazenam, distribuem e controlam o acesso a imagens de container OCI.

### Principais Registries de Produção
- **GitHub Container Registry (`ghcr.io`)**: Integração profunda com GitHub Actions e permissões granulares por organização/repositório.
- **AWS Elastic Container Registry (ECR)**: Alta integração com IAM, KMS, replicação multi-região e scanning nativo via Amazon Inspector.
- **Azure Container Registry (ACR)**: Suporte a private endpoints, georreplicação global e tarefas automáticas de build.
- **Google Artifact Registry (GAR)**: Registry universal no GCP com suporte a OCI, repositórios de pacotes (npm, maven, python) e integração com Artifact Analysis.
- **Harbor (Self-Hosted)**: Registry open-source corporativo da CNCF com RBAC avançado, replicação entre registries, assinatura via Notary/Cosign, auditoria e políticas de retenção.

### Estratégias de Tagging e Imutabilidade
1. **Evitar `:latest` em Produção**: O tag `latest` é mutável e não determinístico, impossibilitando rollbacks confiáveis e rastreabilidade.
2. **Versionamento Semântico (SemVer)**: Tags claras como `v1.2.3`, `v1.2` e `v1`.
3. **Imutabilidade por Git SHA / Commit**: Utilização do commit SHA completo ou abreviado (ex: `sha-a1b2c3d`) vinculado ao pipeline de CI/CD.
4. **Digest Pinning (`@sha256:...`)**: O formato mais seguro para ambientes de missão crítica, garantindo que o payload exato assinado seja executado independentemente de mutações de tags.
5. **Multi-Architecture Builds**: Publicação de manifest lists com Docker Buildx para suportar arquiteturas heterogêneas (`linux/amd64`, `linux/arm64`).

```bash
# Multi-platform build and push using Docker Buildx
docker buildx create --name multiarch-builder --use
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t ghcr.io/myorg/api:v1.2.3 \
  -t ghcr.io/myorg/api:latest \
  --push .
```

---

## 🛡️ 8. Segurança de Containers, Hardening & Supply Chain

A segurança em containers requer abordagem em camadas (*defense-in-depth*), desde o código-fonte até a execução em runtime.

### 1. Escaneamento de Vulnerabilidades (Image Scanning)
- **Trivy**: Scanner de vulnerabilidades em SO, dependências de pacotes de linguagens, segredos e misconfigurations em IaC.
  ```bash
  # Scan container image with failure threshold for Critical/High CVEs
  trivy image --severity HIGH,CRITICAL --exit-code 1 ghcr.io/myorg/api:v1.2.3
  ```
- **Grype**: Scanner rápido desenvolvido pela Anchore focado em CVEs mapeadas em SBOMs.

### 2. Geração de SBOM (Software Bill of Materials)
- **Syft**: Criação de inventários estruturados de componentes e dependências em formatos padronizados (SPDX, CycloneDX).
  ```bash
  # Generate SBOM in CycloneDX JSON format
  syft ghcr.io/myorg/api:v1.2.3 -o cyclonedx-json > sbom.json
  ```

### 3. Assinatura e Verificação Criptográfica (Cosign / Sigstore)
- Assinatura digital de imagens no pipeline de CI/CD sem necessidade de gerenciamento manual de chaves privadas (Keyless signing via OIDC):
  ```bash
  # Sign image using Cosign and Sigstore
  cosign sign --yes ghcr.io/myorg/api:v1.2.3

  # Verify image signature before deployment
  cosign verify --certificate-identity-regexp "https://github.com/myorg/.*" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
    ghcr.io/myorg/api:v1.2.3
  ```

### 4. Imagens Base Mínimas e Redução de Superfície de Ataque
- **Distroless (`gcr.io/distroless/*`)**: Contém apenas a aplicação e suas dependências de runtime direto, sem shells (`sh`, `bash`), gerenciadores de pacotes (`apt`, `apk`) ou utilitários GNU.
- **Scratch**: Imagem vazia (0 bytes), perfeita para binários estáticos compilados em Go, Rust ou C++.
- **Alpine**: Base minimalista (~5MB) baseada em musl libc e BusyBox (requer atenção a compatibilidades com glibc).

### 5. Hardening de Runtime
- **Remoção de Linux Capabilities**: Remover todas as capabilities (`drop: ["ALL"]`) e adicionar apenas as estritamente necessárias (ex: `CAP_NET_BIND_SERVICE`).
- **Filesystem Read-Only**: Configurar `readOnlyRootFilesystem: true` montando diretórios voláteis (`/tmp`, `/run`) em `emptyDir` isolado.
- **Seccomp & AppArmor/SELinux**: Restringir chamadas de sistema (syscalls) permitidas usando o perfil `RuntimeDefault` ou perfis customizados.

---

## ☁️ 9. Orquestração Cloud & Containers Gerenciados / Serverless

A computação em nuvem oferece modelos variados de abstração para execução de containers.

### 1. Clusters Kubernetes Gerenciados
- **AWS Elastic Kubernetes Service (EKS)**: Control plane gerenciado, integração com AWS IAM Roles for Service Accounts (IRSA), Pod Identity e autoscaling avançado com **Karpenter**.
- **Azure Kubernetes Service (AKS)**: Integração nativa com Microsoft Entra ID (Azure AD), Azure CNI com Cilium e Azure Linux Nodes.
- **Google Kubernetes Engine (GKE)**: Referência em orquestração com modos **Standard** e **Autopilot** (onde o Google gerencia nós, autoscaling, security hardening e bin-packing automaticamente).

### 2. Serviços de Containers Gerenciados & Serverless
- **AWS ECS (Elastic Container Service)**: Orquestrador proprietário de alta performance e baixa complexidade operacional, com suporte a nós EC2 ou **AWS Fargate** (serverless compute engine).
- **Google Cloud Run**: Plataforma serverless baseada em Knative para execução de containers orientados a eventos e requisições HTTP, com suporte a *scale-to-zero* e cobrança estritamente por milissegundo de CPU/memória consumida.
- **Azure Container Apps (ACA)**: Plataforma serverless para microserviços construída sobre Kubernetes, KEDA (event-driven autoscaling), Dapr e Envoy, ideal para microsserviços e background workers.

---

## 📋 10. Checklist de Engenharia de Containers

Ao planejar, construir ou revisar soluções baseadas em containers, valide:

- [ ] **Base Image Mínima**: A imagem utiliza `scratch`, `distroless` ou `alpine` sem ferramentas desnecessárias?
- [ ] **Usuário Não-Root**: O container executa com usuário e grupo sem privilégios (`runAsNonRoot: true`)?
- [ ] **Multi-Stage Build**: O Dockerfile separa o ambiente de compilação do artefato final de produção?
- [ ] **Contexto Limpo**: O arquivo `.dockerignore` está presente e bloqueia segredos, logs e arquivos de teste?
- [ ] **Imutabilidade e Tags**: A imagem é identificada por versão semântica ou digest imutável (sem `:latest`)?
- [ ] **Verificação de Vulnerabilidades**: A imagem foi escaneada por ferramentas como Trivy ou Grype no pipeline de CI?
- [ ] **Assinatura e Proveniência**: A imagem possui assinatura Cosign e SBOM associado?
- [ ] **Healthchecks Declarados**: Probes de liveness, readiness e startup estão configurados com tolerâncias realistas?
- [ ] **Limites de Recursos**: `requests` e `limits` de CPU e memória foram definidos para evitar contenção e starvation no cluster?
- [ ] **Hardening de Runtime**: O container roda com `readOnlyRootFilesystem: true`, `allowPrivilegeEscalation: false` e `capabilities.drop: ["ALL"]`?

---

## 🔗 Habilidades Relacionadas

- [devops-engineer](../../roles/devops-engineer/SKILL.md)
- [program-github](../github-actions/SKILL.md)
- [github-actions](../github-actions/SKILL.md)
- [devsecops-engineer](../../security/ops-architecture/devsecops-engineer/SKILL.md)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.