容器安全
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 |
| 配置安全 | 容器是否權限過大? | readOnlyRootFilesystem、runAsNonRoot |
| 供應鏈安全 | 相依套件是否有已知漏洞? | 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 環境建立完整的安全防護。