iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Build on AWS

一步步帶你認識 Cloud Native —— 用AWS免費服務打造雲原生專案系列 第 13

Day 13|CI/CD Pipeline 還能升級嗎?走向 DevSecOps 的第一步

  • 分享至 

  • xImage
  •  

上一篇文章中,我們完成了一個最基礎的 CI/CD Pipeline —— 當程式碼 Push 到 GitHub,就會自動觸發 Workflow 並部署到 AWS。

但細心的你可能會發現,這樣的 Pipeline 雖然方便,卻還缺了一個重要元素:安全性 (Security)
今天,我們就要來看看,CI/CD Pipeline 怎麼樣升級,邁向 DevSecOps 🚀。


為什麼 CI/CD 不是終點?

在我們現有的流程中,Deployment 是自動化的,但風險依然存在:

  • 如果有人不小心 Commit 了 AWS Key 怎麼辦?
  • 如果引入了一個有漏洞的套件呢?
  • 如果我們的 IaC (CDK/CloudFormation) 配置過度開放了呢?

這些問題可能會讓 Pipeline 變成駭客的自動化武器。
因此,我們需要將「安全」也自動化 —— 這就是 DevSecOps


什麼是 DevSecOps?

DevOps 的精神是 「快速交付 + 自動化」
DevSecOps 則是在流程中加上「安全性」:

  • Security 左移 (Shift Left):越早發現問題越好,最好在程式還沒部署之前就被攔截。
  • 安全是全員責任:不只是 Security Team 的工作,開發者在寫程式、送 PR 時就要有安全意識。

這代表我們不在服務上線後才做弱點掃描、人工審查,而是讓安全檢查也能 融入 CI/CD Pipeline


CI/CD Pipeline 的安全升級方向

  1. 程式碼掃描 (SAST, Static Analysis)

    • 例如 GitHub CodeQL,能幫助自動檢查常見的程式漏洞。
  2. 依賴套件檢查 (Dependency Scan)

    • Python 可以用 pip-audit,Node.js 可以用 npm audit,幫你檢查是否引入有漏洞的套件。
  3. 憑證洩漏檢查 (Secret Scanning)

    • GitHub 本身就有 Secret scanning 功能,可以自動攔截 AWS Key、密碼等。
  4. 基礎設施掃描 (IaC Security)

    • 我們用的是 AWS CDK,最後會輸出 CloudFormation Template。
    • 可以用 Checkovcfn-nag 來掃描有沒有過度開放的設定(像是 0.0.0.0/0 的 Security Group)。
  5. 部署後的監控 (Runtime Security)

    • 例如搭配 AWS CloudWatch / GuardDuty 來監控異常行為。

輕量實作:在 CI/CD 中加入安全檢查

這裡我們示範兩個最簡單的方式,把「安全」帶進我們的 GitHub Actions Workflow:

1. 加入 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 套件是否有安全漏洞。

2. 啟用 GitHub CodeQL

只要在 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 實作為主,就簡單介紹一下而已,還請各位自行探索啦


上一篇
Day12 告別 GitHub Secret:IAM Role 與 OIDC 實戰 | AWS CDK + CI/CD 實現自動化部署 (3)
下一篇
Day 14|小結:從 SDK 到 CDK,再到 CI/CD 與 IAM —— 專案藍圖回顧
系列文
一步步帶你認識 Cloud Native —— 用AWS免費服務打造雲原生專案25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言