Python応用

PythonコードのセキュリティをBandit+GitHub Actionsで自動チェックする方法

「セキュリティ対策って、リリース前にやればいいか…」は危険です ⚠️

cybersecurity code
cybersecurity code / Photo by Muhammed Ensar via Pexels

そんなふうに後回しにしていると、気づかないうちに脆弱性がコードに紛れ込んでしまいますよね。

今回は、SAST(Static Application Security Testing=静的アプリケーションセキュリティテスト)という考え方と、Pythonで手軽に導入できるツール Bandit を使って、コードを書いた瞬間に自動でセキュリティチェックを走らせる仕組みをご紹介します。

GitHub Actionsと組み合わせれば、プッシュするたびに自動でチェックが動く環境が作れます。「セキュリティは難しそう」が「これなら続けられそう!」に変わるはずです 😊

SASTってそもそも何?

SASTをひとことで言うと、「実行しなくてもコードの危ない部分を見つけてくれる検査ツール」です。

コードを動かす前、つまり開発段階で問題を発見できるのが最大の強み。早期発見は修正コストを大幅に下げてくれます。

  • ✅ コードを実行せずに解析する
  • ✅ 開発の早い段階で脆弱性を発見できる
  • ✅ CI/CDパイプラインに組み込める

BanditをPythonプロジェクトに導入する

まずはBanditをインストールしましょう。インストールはたった1行です。

# Banditのインストール
pip install bandit

インストールが終わったら、さっそく試してみましょう。以下は意図的に脆弱なコードの例です。

# vulnerable_example.py
import subprocess
import hashlib

# 危険①:ユーザー入力をそのままシェルコマンドに渡している(コマンドインジェクション)
def run_command(user_input):
    subprocess.call(user_input, shell=True)  # Banditが警告を出すポイント

# 危険②:MD5は現在では脆弱なハッシュアルゴリズムとされている
def hash_password(password):
    return hashlib.md5(password.encode()).hexdigest()  # Banditが警告を出すポイント

このファイルに対してBanditを実行してみます。

bandit vulnerable_example.py

ポイントをまとめるとこんな感じです 👇

  • shell=True の使用 → コマンドインジェクションのリスクとして警告
  • hashlib.md5 の使用 → 弱いハッシュアルゴリズムとして警告
  • 重大度(HIGH / MEDIUM / LOW)ごとに結果が分類される

GitHub Actionsに組み込んで自動化する


Banditを手動で実行するだけでも便利ですが、コードをプッシュするたびに自動チェックが走る仕組みを作れると最強です。

リポジトリの .github/workflows/ フォルダに以下のYAMLファイルを作成するだけでOKです。

# .github/workflows/bandit-sast.yml
name: SAST with Bandit

on:
  push:
    branches: [main, develop]  # プッシュ時に自動実行
  pull_request:
    branches: [main]           # PRのタイミングでも実行

jobs:
  bandit-scan:
    runs-on: ubuntu-latest
    steps:
      - name: リポジトリをチェックアウト
        uses: actions/checkout@v3

      - name: Pythonのセットアップ
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Banditのインストール
        run: pip install bandit

      - name: セキュリティスキャンを実行
        run: bandit -r . -ll  # -ll オプションで重大度MEDIUM以上のみ検出

これを設定しておくだけで、チーム全員のコードが自動的にセキュリティチェックされます。「うっかり危ないコードをマージしてしまった…」というミスを事前に防げますよね。

まとめ

今回は Bandit × GitHub Actions を使ったPythonのセキュリティ自動化をご紹介しました。

  • 🔍 SASTはコードを実行せずに脆弱性を検出できる
  • 🐍 BanditはPython専用の軽量SASTツール
  • ⚙️ GitHub Actionsと組み合わせれば自動化まで数分で完成

セキュリティ対策は「後でやろう」ではなく、開発フローに最初から組み込むのが現代のスタンダードになっています。ぜひ今日のプロジェクトから試してみてください! 🚀

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です