흔히 파이썬을 사용해서 개발을 하다보면 `pip install`을 사용해서 다양한 라이브러리들을 설치하게 된다. 그리고 이렇게 설치한 라이브러리들에서 취약점이 발견되고, 이에 대해서 신규 패치가 나왔을 때, 이를 자동으로 탐지하고 취약점이 있는 라이브러리가 현재 프로젝트 내에서 사용 중인지 여부를 자동적으로 알려주는 기능의 필요성을 개발을 진행하면서 여러차례 느끼게 되었다.
물론, 비슷한 기능을 가진 GitHub DependencyBot이 있으나, dependency bot를 사용해서 의존성 업데이트를 진행할 때에는 가끔씩 의존성 충돌 문제로 인해 업데이트가 실패하는 등의 문제가 발생할 수 있다. 또한, 취약점 패키지를 발견했을때 즉시 알림을 주는 기능 역시 활성화를 시켜도 가끔씩 제대로 작동을 안하는 경우가 있었기 때문에, 새로운 자동 취약점 탐색 파이프라인을 구축해야할 필요성을 느끼게 되었다.
이러한 기능을 가진 라이브러리가 있는지에 대해서 탐색하던 중, https://pypi.org/project/pip-audit/의 존재에 대해서 알게 되었다. pip-audit은 npm audit처럼 현재 사용 중인 라이브러리들 중 잘 알려진 취약점을 가진 라이브러리가 있는지에 대해서 오픈 데이터베이스 탐색을 통해 점검을 해주는 기능을 가진 툴이다.
name: pip-audit check for dependency audit analysis
on:
push:
branches: [ "main", "dev" ]
pull_request:
branches: [ "main", "dev" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pip-audit
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install -r server/requirements.txt
- name: Static code analysis with pip-audit
run: |
cd server
pip-audit
매번 코드를 푸시하거나 branch merge 등을 진행할 때, 위의 Action을 통해 취약점 점검을 진행하고, 취약점이 발견되어서 Action이 실패하게 되면 연결된 이메일 계정으로 알림을 보내도록 설정하였다.
위의 파이프라인 구축 후, Flask나 Werkzeug 등 프로젝트에 사용되는 핵심 라이브러리들의 취약 버전에 대한 패치 정보를 여러차례 확인할 수 있었고, poetry를 사용해서 의존성 충돌 없이 패키지 버전 업데이트를 안정적으로 진행할 수 있었다.
'Python' 카테고리의 다른 글
python psutil을 사용해서 간단한 모니터링 스크립트 구축하기 (0) | 2024.01.02 |
---|---|
Python gc 튜닝을 통한 성능 개선 (Flask 기반 예시 코드) (0) | 2023.10.14 |
소스코드 레벨에서 비교하는 Python List와 Set의 차이 (2) | 2023.10.09 |
Python Dictionary 구조 CPython 소스 코드 레벨부터 파악하기 (2) | 2023.10.09 |
gunicorn과 nginx를 사용해서 Flask 앱 배포하기 (0) | 2023.10.09 |