PEP 449 – PyPI 미러 자동 탐색 및 명명 체계의 제거
- Author:
- Donald Stufft <donald at stufft.io>
- BDFL-Delegate:
- Richard Jones <richard at python.org>
- Discussions-To:
- Distutils-SIG list
- Status:
- Final
- Type:
- Process
- Topic:
- Packaging
- Created:
- 04-Aug-2013
- Post-History:
- 04-Aug-2013
- Replaces:
- 381
- Resolution:
- Distutils-SIG message
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 PyPI 미러의 자동 탐색과 함께 pypi.python.org 아래의 도메인 이름을 서드파티에 위임해야 하는 하드 코딩된 명명 체계를 폐지하고 최종적으로 제거하는 방안을 제시합니다.
근거
PyPI 미러링 인프라(PEP 381에 정의됨)는 자동 설치 프로그램이 사용하는 PyPI 콘텐츠를 미러링하는 수단을 제공합니다. 또한 미러를 자동으로 탐색하는 방법과 일관된 명명 체계도 제공합니다.
자동 탐색 프로토콜과 명명 체계에는 여러 가지 문제가 있습니다:
- 이들은 *.python.org 도메인 이름에 대한 제어권을 서드파티에 넘겨주며, 그 결과 해당 서드파티가 pypi.python.org 및 python.org 도메인 이름에 쿠키를 설정하거나 읽을 수 있게 됩니다.
- pypi.python.org의 하위 도메인을 사용한다는 것은 미러 연산자가 자신의 SSL 인증서를 결코 얻을 수 없다는 뜻이며, 그들에게 python.org 도메인 이름에 대한 인증서를 발급해 줄 가능성도 낮습니다.
- 자동 탐색은 인증되지 않은 프로토콜(DNS)을 사용합니다.
- 이러한 도메인에는 TLS 인증서가 없으므로, 클라이언트는 자신이 DNS 포이즈닝이나 MITM 공격의 피해자가 되지 않았다고 확신할 수 없습니다.
- 자동 탐색 프로토콜은 클라이언트가 사용할 미러를 자동으로 선택할 수 있도록 설계되었습니다. PyPI가 현재 사용하는 CDN은 전 세계에 분산된 서버 네트워크로서, 클라이언트 측에서 아무런 노력을 들이지 않아도 클라이언트와 가까운 서버를 자동으로 선택합니다. 따라서 이는 더 이상 필요한 요건이 아닙니다.
- 자동 탐색 프로토콜과 일관된 명명 체계의 사용은 지금까지 단 하나의 설치 프로그램(pip)에서만 구현되었으며, 그 구현은 안전하지 않을 뿐만 아니라 성능에도 심각한 문제가 있어 다음 릴리스(1.5)에서 제거될 예정입니다.
- PEP 381에는 전용 클라이언트의 경우 이러한 문제 중 일부를 해결할 수 있는 조항이 있지만, 사용자의 브라우저에 영향을 미치는 문제는 해결하지 못합니다. 또한 이러한 조항은 현재까지 어떤 설치 프로그램에서도 구현되지 않았습니다.
문제가 많고 그중 일부는 매우 심각하며, 자동 탐색과 일관된 명명 체계가 주는 이점의 대부분을 이제 CDN이 제공합니다. 따라서 이 PEP는 미러용 [a..z].pypi.python.org 이름과 자동 탐색 프로토콜용 last.pypi.python.org 이름을 먼저 폐기한 뒤 제거할 것을 제안합니다. 미러링 기능과 미러링 방법은 영향을 받지 않으며, PEP 381에 기술된 대로 계속 유지됩니다. 기존 미러의 연산자가 미러 호스팅을 계속하고자 한다면, 미러에 사용할 자체 도메인과 인증서를 확보할 것을 권장합니다.
폐지 및 제거 계획
이 PEP가 승인되면 즉시 PyPI의 문서가 갱신되어 공식 공개 미러가 폐기되었음을 알립니다. 또한 비공식 공개 미러를 사용하려는 사용자가 이를 찾을 수 있도록 http://www.pypi-mirrors.org/ 와 같은 외부 자료로 안내합니다.
미러 연산자는 미러 운영을 계속하고자 한다면 미러를 나타낼 도메인 이름을 확보하고, 가능하다면 TLS 인증서도 확보해야 합니다. 도메인을 확보한 후에는 할당받은 N.pypi.python.org 도메인 이름을 새 도메인으로 리디렉션해야 합니다. 2014년 2월 15일에 [a..z].pypi.python.org 및 last.pypi.python.org의 DNS 항목이 제거됩니다. 2014년 2월 15일 이전에는 언제든지 미러 연산자가 자신의 도메인 이름을 PyPI가 회수하여 마스터를 다시 가리키도록 요청할 수 있습니다.
왜 2014년 2월 15일인가
이 PEP에서 가장 중요한 결정은 최종 마감일입니다. 날짜가 너무 이르면 사람들이 배포 스크립트를 갱신하기 위해 하던 일을 모두 제쳐 두어야 하므로, 불필요하게 불이익을 주게 됩니다. 날짜가 너무 멀면 늘어난 기간은 마이그레이션 작업에 도움이 되지 않으며, 마이그레이션을 나중으로 미루기만 할 뿐입니다.
2014년 2월 15일이라는 날짜는 이 PEP의 작성일로부터 약 6개월 후이기 때문에 선택되었습니다. 이 날짜는 마감일을 단순히 늦추지 않으면서도, 사람들이 새 도메인 이름을 가리키도록 배포 절차를 갱신할 수 있는 충분한 기간을 보장할 것입니다.
DNS 항목을 제거해야 하는 이유
미러에서 사용하던 도메인 이름을 단순히 회수해 다시 PyPI로 연결하면, 사용자가 해당 도메인을 쓰지 않도록 설정을 변경할 필요는 없어집니다. 하지만 이 방법에는 여러 가지 문제가 있습니다.
- 현재 설정에 이 이름들을 하드 코딩해 둔 사람은 모두 HTTP로 하드 코딩해 두었습니다. 이는 이러한 이름이 계속 해석되도록 허용하면, MITM 연산자가 리디렉션을 클라이언트에 전달하기 전에 HTTPS로 다시 작성하여 사용자를 공격하기 쉬워진다는 뜻입니다.
- PyPI를 가리키는 여러 도메인을 유지하는 부담은 이미 회수된 소수의 N.pypi.python.org 도메인에서도 골칫거리였음이 드러났습니다. 이 도메인들은 서비스에 변경이 생길 때 잘못 설정되는 경우가 많습니다. 그 결과 누군가 알아챌 때까지 몇 달씩 제대로 동작하지 않는 상태로 방치되는 일이 잦습니다. 이 도메인들을 남겨 두면 해당 도메인의 사용자는 발견되거나 인지될 가능성이 낮은 예기치 않은 장애에 노출됩니다.
- 이 도메인을 사용하는 사람들은 저마다의 이유로 이 도메인들을 명시적으로 선택했습니다. 그러한 이유 중 하나는 특정 국가에 위치한 호스트에서 배포하기를 원하지 않는다는 것일 수 있습니다. 이 도메인들이 계속 해석되면서도 기존 위치를 가리키지 않는다면, 우리는 해당 도메인의 기존 사용자에게서 이 선택권을 조용히 빼앗는 셈이 됩니다.
그렇기는 하지만, 항목을 제거하면 설정을 변경한 사용자는 마스터(PyPI)를 다시 가리키도록 하거나 가리킬 새 미러 이름을 선택해야 할 것입니다. 이는 PyPI 자체와 미러 사용자를 위에서 설명한 공격으로부터 보호하기 위해 유감스럽지만 필요한 요구 사항으로 간주됩니다. 적어도 사용자가 이러한 보안 취약성에 대해 충분한 정보를 바탕으로 결정을 내리게 하는 역할은 합니다.
공개 또는 비공개 미러
미러링 프로토콜은 PEP 381에 정의된 대로 계속 존재할 것이며, 원하는 사람은 누구나 공개 및 비공개 미러를 호스팅하기를 권장합니다. 권장되는 미러링 클라이언트는 Bandersnatch입니다.
Copyright
This document has been placed in the public domain.