容器安全

Vibe Prompt

「幫我在 CI/CD 中加入 Docker Image 安全掃描(Trivy),並設定 K8s Pod Security Standards。」

Trivy 掃描

- name: Scan Docker Image
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: 'ghcr.io/myorg/myapp:latest'
    format: 'table'
    exit-code: '1'
    severity: 'HIGH,CRITICAL'

Dockerfile 安全最佳實踐

# ❌ 不安全寫法
FROM node:latest  # 不指定版本
RUN npm install   # 包含 dev 套件
USER root         # root 執行

# ✅ 安全寫法
FROM node:20-alpine@sha256:abc123  # 固定 digest
RUN npm ci --only=production        # 只安裝正式依賴
USER node                           # 非 root 執行
COPY --chown=node:node . /app       # 設定擁有者
HEALTHCHECK CMD wget -qO- http://localhost:3000/health || exit 1

K8s Pod Security Standards

apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

三種層級

| 層級 | 說明 | |------|------| | privileged | 無限制(不建議) | | baseline | 最低安全標準(建議) | | restricted | 最嚴格(建議正式環境) |

禁止的設定(restricted)

  • ❌ privileged containers
  • ❌ hostNetwork / hostPort
  • ❌ hostPID / hostIPC
  • ❌ 可寫入的 hostPath Volume
  • ❌ 允許提升權限(allowPrivilegeEscalation=true)
  • ❌ 以 root 執行

Vibe Prompt

「幫我檢查這個 Deployment 是否符合 Pod Security restricted 標準。」

# 需要修正
spec:
  securityContext:
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containers:
    - securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop: ["ALL"]
        readOnlyRootFilesystem: true

關鍵要點

容器安全四大面向

| 面向 | 關注點 | 工具/做法 | |------|--------|---------| | 映像檔安全 | 基礎映像是否有漏洞? | Docker Scout、Trivy、Snyk | | 執行時期安全 | 容器是否異常行為? | Falco、Sysdig Secure | | 配置安全 | 容器是否權限過大? | readOnlyRootFilesystemrunAsNonRoot | | 供應鏈安全 | 相依套件是否有已知漏洞? | SBOM (CycloneDX)、依存性檢查 |

Dockerfile 安全最佳實踐

# ❌ 不安全
FROM node:latest
RUN npm install
USER root

# ✅ 安全
FROM node:20-slim@sha256:abc123...  # 固定摘要
RUN npm ci --only=production
USER node  # 非 root 執行

Kubernetes Pod 安全上下文

securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  capabilities:
    drop: ["ALL"]
  readOnlyRootFilesystem: true
  allowPrivilegeEscalation: false


容器安全:從 Image 到 Runtime

為什麼容器不安全?

Docker Image 可能包含有漏洞的套件(例如有 CVE 的 openssl 版本)、惡意程式碼、或過大的攻擊面(不必要的工具和函式庫)。

容器安全檢查清單

| 階段 | 檢查項目 | 工具 | |:----|:--------|:----| | Build | 使用最小基礎 Image(如 Alpine) | Dockerfile 最佳實踐 | | Build | 掃描 Image 漏洞 | Trivy、Snyk | | Registry | 只允許簽署的 Image 部署 | Notary、Cosign | | Runtime | 限制容器權限 | Kubernetes Pod Security | | Runtime | 監控異常行為 | Falco |

下一章預告

這堂雲端安全課程從 IAM、CloudTrail、Secrets Manager、容器安全到合規管理——你現在可以為 AWS 環境建立完整的安全防護。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!