Provider 키가 전송될 수 있는 호스트¶
kpubdata 는 provider 키를 그 provider 의 허용 호스트에만 보낸다. spec 이
가리키는 호스트가 목록에 없으면 호출 자체를 하지 않는다.
왜 있는가¶
spec 은 두 가지를 함께 선언한다.
endpoint.base_url— 호출할 곳auth.provider_key— 붙일 credential
이 둘이 서로 맞는지 확인하는 곳이 없었다(#519). 그래서 spec 이 아무 호스트를 가리켜도 키가 거기로 갔다. spec 은 YAML 파일이고 PR 로 바뀌므로, 호스트 한 줄을 고치는 것으로 키를 밖으로 내보낼 수 있었다.
기본 허용 호스트¶
| provider | 호스트 |
|---|---|
datago · localdata · semas |
data.go.kr 및 그 하위 도메인, api.odcloud.kr, openapi.its.go.kr |
bok |
ecos.bok.or.kr |
kosis |
kosis.kr 및 하위 도메인 |
krx |
data.krx.co.kr |
kipris |
kipo-api.kipi.or.kr |
law |
law.go.kr, www.law.go.kr |
lofin |
lofin365.go.kr, www.lofin365.go.kr |
neis |
open.neis.go.kr |
seoul |
openapi.seoul.go.kr, swopenapi.seoul.go.kr |
sgis |
sgisapi.kostat.go.kr |
fds |
openapi.foodsafetykorea.go.kr |
korean |
stdict.korean.go.kr |
정본은 src/kpubdata/_hosts.py 의 PROVIDER_ALLOWED_HOSTS 다.
목록에 없으면 어떻게 되는가¶
InvalidRequestError 가 발생하고 요청은 나가지 않는다.
datago.apt_trade: refusing to send the 'datago' credential to a host that is not
on its allowlist. Set KPUBDATA_DATAGO_EXTRA_HOSTS if this host is legitimate.
auth.type: none 인 spec 은 붙일 credential 이 없으므로 이 검사를 받지 않는다.
목록에 없는 provider 는 통과하지 못한다. "등재를 잊었다" 가 "아무 호스트나 괜찮다" 로 읽히면 안 되기 때문이다.
허용 호스트 추가¶
프록시나 스테이징 게이트웨이를 거쳐야 하는 배포는 환경변수로 넓힌다.
# 쉼표 또는 공백 구분. provider 이름은 대문자.
export KPUBDATA_DATAGO_EXTRA_HOSTS="gateway.internal,proxy.corp.example"
export KPUBDATA_SEOUL_EXTRA_HOSTS="seoul-proxy.internal"
이름 규칙은 KPUBDATA_<PROVIDER>_EXTRA_HOSTS 다. KPUBDATA_DATAGO_EXTRA_HOSTS
는 #261 부터 쓰던 이름 그대로다.
환경변수로 추가한 값은 정확히 일치로만 비교한다. .example.com 을 넣어도
하위 도메인이 열리지 않는다 — 그 항목은 .example.com 이라는 호스트 자체와만
일치하고, 그런 호스트는 없다.
하위 도메인까지 여는 . 접두 항목은 src/kpubdata/_hosts.py 의 내장 목록에서만
동작한다. 그 목록에 줄을 추가하는 것은 리뷰를 거치지만 환경변수는 배포가 export
한 값 그대로이고, 오타 하나가 와일드카드가 되면 목록이 무의미해진다. credential
은 목록이 허용하는 곳으로 간다.
업그레이드 시 확인할 것¶
이 검사가 없던 버전에서 올라온다면, 다음 중 하나라도 해당하면 위 환경변수가 필요하다.
- 사내 프록시를 통해 공공 API 를 호출한다
- 스테이징·목(mock) 게이트웨이로 spec 을 돌린다
- 표에 없는 호스트를 쓰는 자체 provider spec 이 있다
해당 사항이 없으면 설정할 것이 없다. 번들된 spec 23종은 전부 apis.data.go.kr
을 쓰므로 그대로 동작한다.