서비스 간 인증 키 관리: 공유 토큰부터 mTLS까지 규모별 4단계
예를 들어 직원 열 명 남짓한 쇼핑몰 운영사를 생각해 봅시다. 주문 관리 화면이 재고 서버에서 수량을 읽고, 고객센터 도구가 주문 서버에서 문의 내역을 가져오고, 사내 챗봇이 외부 AI API를 부릅니다. 연결은 세 가닥이고 키도 세 개입니다. 그런데 이 키들을 비밀 관리 도구에 옮겨 적으려고 표를 그려 보면 칸이 다섯…
로그인·권한·세션부터 데이터 보호까지 서비스 보안의 판단 기준을 다룹니다. 구현 방법과 운영 중 확인할 항목을 함께 살펴봅니다.
우리 서비스에 적용할 계획이 있으신가요?
기술 자문·개발 범위 상담 살펴보기 →예를 들어 직원 열 명 남짓한 쇼핑몰 운영사를 생각해 봅시다. 주문 관리 화면이 재고 서버에서 수량을 읽고, 고객센터 도구가 주문 서버에서 문의 내역을 가져오고, 사내 챗봇이 외부 AI API를 부릅니다. 연결은 세 가닥이고 키도 세 개입니다. 그런데 이 키들을 비밀 관리 도구에 옮겨 적으려고 표를 그려 보면 칸이 다섯…
리눅스 서버에 자동 보안 업데이트를 켜 두면 한시름 놓게 됩니다. 매일 새벽 패치가 내려오고, 로그에는 「설치 완료」가 쌓입니다. 그런데 커널만큼은 이야기가 다릅니다. 설치와 적용 사이에 재부팅이 있고, 그 재부팅은 아무도 대신 해 주지 않습니다.
어떤 사이트의 응답 헤더를 열어 보면 이런 줄이 있습니다.
웹 서비스 하나가 도커 컨테이너로 떠 있다고 해 보겠습니다. 포트는 리버스 프록시 뒤에 있고, 관리 화면은 막혀 있고, 비밀번호는 길고 무작위입니다. 입구는 잘 잠겨 있습니다.
업무용 PC는 VLAN 10, 손님용 Wi-Fi는 VLAN 20으로 나눴다고 해 보겠습니다. 손님 Wi-Fi에 붙은 노트북에서 업무망 프린터 주소로 ping을 보냅니다. 많은 경우 응답이 돌아옵니다.
비밀번호 하나로 지키던 관리자 로그인에 TOTP, 신뢰 브라우저, 복구 코드, 패스키를 붙였습니다. 네 수단은 막는 공격이 다르고, 서로 어떻게 맞물리게 할지 정할 것도 생각보다 많았습니다. 이 글은 구현하면서 정한 기준과 중간에 바로잡은 설계의 기록입니다.
ChainDrop이라는 npm 공급망 공격을 알게 된 것은 공격이 일어나고 거의 두 달이 지난 9월 30일이었습니다. O'Reilly의 9월 트렌드 정리를 읽다가 "자기 복제하는 악성코드가 npm 패키지 1,300개 이상을 감염시켰고, 출처 증명까지 정상이었다"는 한 줄을 봤습니다. 감염 패키지 이름에 flat-cach…
요청 제한을 분당 30회로 걸어 두었습니다. 접근 로그에는 같은 초에 수백 건이 찍혀 있는데 429는 한 건도 없습니다.
첫 고객의 업무 시스템을 만들기 시작하면 보안 항목 목록이 금세 길어집니다. MFA, 세션, 감사 로그, 백업, 접근 통제, SSO, 기기 인증, 로그 중앙화, 전용 네트워크. 목록을 다 채우고 시작하려 하면 업무 기능을 만들기 전에 인프라 설정으로 몇 주가 지나갑니다.
사내 업무 시스템을 만들 때 자주 나오는 질문이 있습니다. 「앞에 Cloudflare Access 같은 걸 두면 보안은 끝나는 것 아닌가요?」
Vercel 로 옮기고 나서 응답 헤더를 다시 봤더니 보안 헤더가 하나도 없었습니다. 예전에는 오리진 앞의 nginx 가 붙여 주고 있었는데, 그 nginx 가 경로에서 빠지면서 전 경로에서 같이 사라진 것입니다. 앱은 그대로였고 오류도 없었습니다. 헤더는 없어져도 화면이 멀쩡해서, 재보기 전에는 모릅니다.
권한 암호가 걸린 PDF 를 qpdf 로 들여다보면 이런 모양이 나옵니다.
전자서명 도입을 검토하면 거의 항상 같은 질문이 먼저 나옵니다. "이거 법적으로 효력 있나요?"
전자서명 서비스를 처음 보면 가장 눈에 띄는 것은 화면에 손가락이나 마우스로 사인을 그리는 부분입니다. 계약이 그 그림으로 성립하는 것처럼 보입니다.
GitHub 에서 토큰을 만들면 화면에 한 번 뜨고 다시는 볼 수 없습니다. Stripe 도 AWS 도 같습니다. 복사를 놓치면 방법이 없고, 새로 만들라는 안내만 나옵니다.
- run: eas build --platform all --non-interactive
Google Analytics를 붙이는 코드를 다 짜고, 배포 직전에 개인정보 처리방침을 열었습니다. 이 문장이 있었습니다.
외부 이미지 URL을 받아 서버가 대신 내려받아 주는 프록시는 편리합니다. 브라우저의 CORS 제약을 피할 수 있고, 이미지 형식을 통일하거나 변환 결과를 캐시하기도 쉽습니다.
YouTube 영상을 코드로 업로드하려면 API 키만으로는 부족합니다. 영상 업로드, 썸네일 지정, 자막 등록처럼 채널 데이터를 바꾸는 작업은 채널 소유자의 동의를 받은 OAuth 2.0 인증이 필요합니다.
모바일 서명 파일이나 환경설정을 백업하다 보면 값 대부분이 Base64처럼 보일 때가 있다. 이때 가장 먼저 구분해야 할 사실이 있다.