소프트웨어가 쓰는 문자열 중 일부는 무해한 이름표예요. 그리고 그중 하나는 마스터 키고요. 핵심은 그 마스터 키를 절대 밖으로 꺼내지 않는 거예요.
시크릿(secret)은 무언가 강력한 작업을 할 수 있다는 걸 증명하는 문자열이에요. API 키, 비밀번호, 액세스 토큰, 데이터베이스 로그인 정보가 여기 해당해요. 하나라도 넘기면, 그 키를 가진 사람은 나로서 행동하고, 내 이름으로 결제하고, 내 리소스에 접근할 수 있게 돼요.
안전을 지키는 구분선은 '이름표 vs. 마스터 키'예요.
- 사용자 이름, 계정 ID, 이메일 주소는 이름표예요. 내가 누구인지 알려주는 역할이라 공개해도 괜찮아요. 다른 사람이 나를 찾으려면 오히려 필요한 정보예요.
- API 키, 비밀번호, 액세스 토큰은 마스터 키예요. 누구인지를 알리는 게 아니라 할 수 있다는 걸 증명하며 문을 열어요. 이건 금고에 넣어야 해요.
이 둘을 혼동하는 게 전형적인 실수예요. 사용자 이름은 꼼꼼히 숨기면서 API 키는 스크린샷에 그대로 붙여넣는 경우가 많거든요.
규칙은 간단해요. 그리고 이게 전부예요.
시크릿은 코드에 넣지 않아요. 그래서 잠긴 서랍이 존재하는 거예요. 시크릿이 사는 숨겨진 파일이에요. 코드는 시크릿을 가리킬 뿐, 담지 않아요.
시크릿은 채팅, 스크린샷, 지원 티켓, 공개 저장소에 넣지 않아요. 한 번이라도 노출되면 그 즉시 유출된 것으로 봐야 해요. (공개 코드에서 유출된 키를 스캔하는 봇들이 있어요. 이 봇들이 찾는 게 바로 이거예요.)
시크릿이 유출되면 사과가 아니라 교체(rotate)예요. 교체란 기존 키를 취소하고 새 키를 발급하는 거예요. 교체하는 순간 유출된 문자열은 무용지물이 돼요. 빠르게 처리하는 게 늦게 후회하는 것보다 훨씬 나아요.
시크릿에는 필요한 최소한의 권한만 부여해요. 이 주제는 충분히 중요해서 별도 개념으로 다루고 있어요. 권한 범위(permission scope)를 참고해 보세요.
AI 관점에서 보면, 에이전트는 작업을 수행하기 위해 시크릿을 보관해요. 내 키를 가지고 대신 주문을 넣는 방식이에요. 이건 정상적이고 필요한 일이에요. 중요한 건 에이전트가 시크릿을 금고에 보관하고, 채팅에 다시 출력하지 않으며, 어디에도 공개적으로 붙여넣지 않는 거예요. 도구를 설정할 때 시크릿은 숨겨진 서랍에 넣고, 화면에 절대 출력되지 않는지 꼭 확인하세요.
이름표는 누구인지 알려주며 공개할 수 있어요. 시크릿은 할 수 있다는 걸 증명하며 금고 밖으로 나가지 않아요. 만약 유출됐다면, 즉시 폐기하고 새로 만드세요.