PyPI, 프로젝트 페이지에 릴리스 출처 경고와 보안 탭 적용
PyPI가 11월 6일 프로젝트 페이지 개편을 마치고 보안 탭과 파일별 attestation 표시를 적용했습니다. 릴리스별 출처 증명의 누락·불일치와 이전 릴리스 대비 변화를 보여주지만, attestation은 코드나 빌드 환경의 안전성을 보증하지 않습니다.

PyPI는 11월 6일 프로젝트 페이지 개편을 마치고 새 보안 탭과 릴리스 정보 화면을 실제 서비스에 적용했다고 밝혔습니다. PyPI Design Contributor인 Nicole Harris가 쓴 공식 공지에 따르면, 이번 개편은 파일의 출처와 게시 경로를 나타내는 디지털 증명(attestation)을 이용자가 읽기 쉽게 보여주는 데 초점을 맞췄습니다. PyPI는 Kabu Creative와 함께 OpenSSF의 Attestations Style Guide 지침을 반영했습니다. 7월에 TestPyPI부터 단계적으로 적용하겠다고 예고한 UI 개편이 PyPI에 반영된 것입니다.
프로젝트 페이지의 보안 탭은 릴리스 전체의 출처 상태와 파일별 attestation을 한곳에 모읍니다. Provenance는 릴리스 파일이 어디서 만들어지고 게시됐는지를 뜻합니다. PyPI Publish attestation은 파일이 프로젝트 관리자가 설정한 Trusted Publisher 신원으로 업로드됐음을 나타냅니다. SLSA Build Provenance attestation은 파일을 소스 커밋, 빌드 플랫폼, 빌드 지침과 연결합니다. 이용자는 화면에서 attestation 정보를 살펴보고 투명성 로그 기록으로 이동할 수 있습니다.
PyPI는 릴리스에 포함된 파일 각각의 attestation 유무를 기준으로 상태를 정합니다. 모든 파일에 지원되는 attestation이 하나 이상 있으면 Full Provenance로 표시합니다. 파일에 attestation이 하나도 없으면 No Provenance입니다. 오래된 릴리스나 Trusted Publishing을 설정하지 않은 프로젝트에서 볼 수 있는 상태로, 파일의 출처를 암호학적으로 확인할 자료가 없음을 나타냅니다. 악성 여부에 관한 판정은 포함하지 않습니다.
일부 파일에만 attestation이 있으면 Incomplete Provenance 경고가 표시됩니다. 예를 들어 휠 파일은 Trusted Publishing으로 올렸지만 소스 배포 파일은 API 토큰으로 올린 경우입니다. 같은 릴리스의 파일이 서로 다른 빌드 시스템이나 소스 저장소에서 나왔다면 Inconsistent Provenance로 표시합니다. 이용자는 각 파일의 attestation 정보를 열어 출처가 프로젝트 관리자의 통제 아래 있는지 살펴볼 수 있습니다.
Change of Provenance는 이번 릴리스의 파일이 이전 릴리스와 다른 저장소나 빌드·게시 워크플로에서 나왔을 때 나타납니다. 조직 이름 변경이나 저장소 이전처럼 정당한 이유가 있을 수 있지만, 계정 탈취나 빌드 파이프라인 침해의 신호일 수도 있습니다. Loss of Provenance는 이전에 attestation을 붙여 배포하던 프로젝트가 이후 파일에는 이를 붙이지 않는 경우입니다. 두 경고는 출처 정보의 변경이나 중단을 알립니다.
개편된 프로젝트 상세 페이지는 출처 경고를 페이지 위쪽에 배치합니다. 보안 탭으로 이동하지 않아도 경고를 볼 수 있으며, 프로젝트나 릴리스가 격리된 경우에는 격리 배너만 표시됩니다. 릴리스 파일 탭에서는 긴 파일 목록을 검색·필터링하고 각 파일의 출처 상태를 볼 수 있습니다. 릴리스 기록에는 파일 수와 출처 상태, 격리·철회·보관·프리릴리스 상태가 함께 표시됩니다. 메타데이터는 용도에 맞춰 재배치하고 PyPI가 보유한 정보와 PyPI가 확인한 정보를 별도 표기로 나눴습니다.
새 화면은 기존 attestation을 읽고 비교하도록 돕습니다. PyPI 사용자 문서에 따르면 attestation은 파일의 출처를 설명하지만 원본 코드나 빌드 환경의 안전성까지 보증하지는 않습니다. 일반적인 패키지 설치 도구에는 attestation 검증 기능이 아직 내장되지 않았으며, 별도 도구로 검증할 수 있습니다. 새 UI 자체는 패키지의 안전성을 판정하거나 설치를 차단하는 기능을 제공하지 않습니다.