poetry는 local에서 패키지 관리용으로 많이 쓰입니다. 배포할 때에는, requirements.txt만 가지고 패키지를 깔게 됩니다. 깔린 패키지에 취약점이 없는지 검사하는 방법은 없을까요? pip-audit을 세팅해 보겠습니다.
poetry pip-audit 설치하기
먼저, poetry에 Pillow 9.5.0 버전을 깔도록 하겠습니다.
–group dev 옵션이 붙지 않았기 때문에, root에 설치되게 됩니다. requests도 poetry add로 설치했다면, pyproject.toml 파일은 아래와 같을 겁니다.
requests는 2.31.0이고, pillow는 9.5.0입니다. 이 패키지들에 취약점이 없을까요? poetry에 pip-audit 패키지를 설치합니다.
이 패키지를 group dev에 설치하는데요. 프로덕션 환경에 설치할 필요가 없기 때문입니다. local에서 확인하는 용도로만 쓸 것입니다. 해당 패키지가 깔릴 때, 추가로 필요한 패키지를 확인하는 방법은 lock 파일을 보는 것입니다.
CacheControl, html5lib, packaging 등 꽤 많은 패키지들이 걸려 있습니다. pip-audit을 깔 때 같이 딸려오는 것들입니다. 이들이 production에서 필요하지 않은데, 설치할 필요는 없을 겁니다. 필요하지 않다면 제외합시다.
다시, pyproject.toml을 확인해 봅시다. 그러면 dev에만 해당 패키지가 걸려있음을 볼 수 있습니다. poetry 환경에 해당 패키지가 깔린 것이니, 취약점을 확인해 봅시다.
취약점 확인하고 업데이트 하기
poetry pip-audit 명령어를 입력해 봅시다.
그러면, 6개의 알려진 취약점이 하나의 패키지에 있다고 되어 있습니다. 업데이트를 해야겠군요.
문제가 생긴 패키지가 Pillow이므로, poetry add Pillow@latest를 입력합니다. 해당 패키지의 최신 버전을 설치한다는 의미입니다.
이제 다시 toml 파일을 보면, 9.5.0에서 10.3.0으로 버전이 올라간 것을 볼 수 있습니다. 다시 명령어를 실행시켜 보겠습니다.
이제, 알려진 취약점을 찾을 수 없다는 메세지가 떴습니다.
이제, 배포를 위해서 설치해야 하는 패키지 정보를 requirements 파일들에 쓰겠습니다. 이 때, pip-audit 같이 local에만 설치해야 하는 것은 dev 그룹에 넣어놓았습니다. 따라서 아래와 같이 export 합니다.
- dev 종속성과 함께 requirements_dev.txt에 export
- root 종속성만 requirements_prod.txt에 export
–with 옵션을 이용하면 쉽게 할 수 있습니다. 아래 글에서 설명한 적이 있으니 한 번 정도 보고 오시면 좋겠습니다.
해당 파일들을 보면 10.3.0으로 버전업이 된 것을 볼 수 있습니다. 배포할 때 스크립트로 pip를 설치하고, pip install -r ~ 요렇게 입력하면 됩니다. requirements.txt 파일을 검사하는 방법은 없을까요? 당연하게도, -r 옵션을 주면 해당 파일에 대해서 검사할 수 있습니다.
위 명령어는 requirements_prod.txt 파일에 있는 패키지들의 취약점이 없는지 검사합니다.