在上一篇文章中,我們完成了一個最基礎的 CI/CD Pipeline —— 當程式碼 Push 到 GitHub,就會自動觸發 Workflow 並部署到 AWS。
但細心的你可能會發現,這樣的 Pipeline 雖然方便,卻還缺了一個重要元素:安全性 (Security)。
今天,我們就要來看看,CI/CD Pipeline 怎麼樣升級,邁向 DevSecOps 🚀。
在我們現有的流程中,Deployment 是自動化的,但風險依然存在:
這些問題可能會讓 Pipeline 變成駭客的自動化武器。
因此,我們需要將「安全」也自動化 —— 這就是 DevSecOps。
DevOps 的精神是 「快速交付 + 自動化」,
而 DevSecOps 則是在流程中加上「安全性」:
這代表我們不在服務上線後才做弱點掃描、人工審查,而是讓安全檢查也能 融入 CI/CD Pipeline。
程式碼掃描 (SAST, Static Analysis)
依賴套件檢查 (Dependency Scan)
pip-audit
,Node.js 可以用 npm audit
,幫你檢查是否引入有漏洞的套件。憑證洩漏檢查 (Secret Scanning)
基礎設施掃描 (IaC Security)
0.0.0.0/0
的 Security Group)。部署後的監控 (Runtime Security)
這裡我們示範兩個最簡單的方式,把「安全」帶進我們的 GitHub Actions Workflow:
pip-audit
依賴檢查name: Deploy with Security Checks
on:
push:
branches: [ "main" ]
jobs:
security:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install pip-audit
run: pip install pip-audit
- name: Run Dependency Audit
run: pip-audit
這樣就能在 CI/CD 流程中,自動檢查 Python 套件是否有安全漏洞。
只要在 Repo 加入這個 Workflow,就能自動啟動程式碼漏洞掃描:
name: CodeQL Analysis
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
今天我們學到CI/CD 不是終點,而是基礎。想要邁向雲原生,就必須讓安全性也成為自動化的一部分。
DevSecOps 的精神是「安全左移」,越早發現問題越好,不過在本系列中就稍微點到一下就好,隔壁DevOps區也有許多優秀的DevSecOps文章,而在本系列畢竟重心還是以專案導向的 AWS 實作為主,就簡單介紹一下而已,還請各位自行探索啦