Anthropic API가 401이면 키 접두부터 본다 — 값은 출력하지 않고 길이·접두·따옴표·공백만 검사한다
sk-ant-로 시작해도 API 키가 아닌 다른 종류의 토큰일 수 있습니다. 키 값을 로그에 찍지 말고, 접두 몇 글자·길이·따옴표·공백만 확인합니다.
새 기능을 배포하고 Anthropic API 호출을 켰는데 요청이 전부 401 authentication_error로 돌아옵니다. 키는 분명 .env에 들어 있고, 앞부분도 sk-ant-로 시작해 맞아 보입니다.
이럴 때 흔한 원인은 셋입니다. 첫째, 키 종류가 다릅니다. sk-ant-로 시작하는 문자열은 여러 종류가 있고, API를 직접 부를 때 쓰는 콘솔 API 키는 sk-ant-api로 시작합니다. 다른 제품에서 발급된 토큰을 그대로 넣으면 모양은 비슷해도 API는 받아 주지 않습니다. 둘째, .env에 따옴표나 줄 끝 공백·\r이 값에 섞여 들어갔습니다. 셋째, 값을 바꿨지만 컨테이너가 옛 환경을 쥐고 있습니다.
확인할 때 키를 통째로 출력하면 그 자체가 유출입니다. 터미널 기록, CI 로그, AI 작업자의 대화에 남습니다. 접두 10자·길이·따옴표·공백 여부만 봅니다.
k="$ANTHROPIC_API_KEY"
echo "len=${#k} prefix=${k:0:10}"
case "$k" in *\"*|*\'*) echo "따옴표 섞임";; esac
case "$k" in *[[:space:]]*) echo "공백·줄바꿈 섞임";; esac
# 기대: prefix=sk-ant-api
키를 바로잡은 뒤에는 그 키를 쓰는 서비스를 모두 다시 만듭니다. 그리고 기능을 짤 때부터 키가 없거나 호출이 실패하면 기능이 조용히 비켜서는 쪽(예: 거르기 기능이면 거르지 않고 통과)으로 두면, 이번처럼 키가 틀린 채 배포돼도 서비스 본래 동작은 멀쩡합니다.