LumoMate
LumoMate/용어집/BoundarySecurity

인가

인가(Authorization, AuthZ)는 '이 사용자에게 이 행동·자원을 허용할 것인가'를 결정하는 단계입니다. 인증으로 신원이 확인된 다음 일어나는 권한 판단입니다.
인가의 개념을 표현한 편집형 일러스트.

쉬운 설명

당신이 누구인지 확인하는 게 인증이라면, 그 신원으로 무엇을 할 수 있는지를 정하는 게 인가입니다. 같은 사이트에서도 일반 사용자는 자기 글만 수정할 수 있고, 관리자는 다른 사람 글도 삭제할 수 있고, 결제 시스템은 환불을 만들 수 있습니다. 이 차이는 모두 인가에서 결정됩니다.

대표적인 모델 두 가지가 있습니다. ① RBAC(역할 기반 접근 통제): 'admin·editor·viewer' 같은 역할에 권한을 묶고 사용자에게 역할을 부여. 단순하고 흔함. ② ABAC(속성 기반): '소유자만 자기 글을 수정할 수 있다'처럼 사용자·자원·상황의 속성을 함께 보는 방식. 더 유연하지만 복잡함. 큰 시스템은 보통 두 가지를 섞어 씁니다.

정책을 어디에서 평가하느냐도 큰 결정입니다. ① 앱 코드 안에서 if 문으로(흩어져 관리 어려움), ② 라이브러리·미들웨어로 분리(Casbin·Cerbos·OPA), ③ 별도 인가 서비스로(중앙에서 결정 → 다른 서비스에 답을 줌). 회사가 커질수록 정책을 중앙화하는 방향으로 갑니다.

인가의 가장 위험한 함정은 'IDOR(Insecure Direct Object Reference)'입니다. URL의 ID를 바꿔서 다른 사람의 데이터에 접근하는 사고가 보안 사고 통계에서 항상 상위에 있습니다. 예: /orders/123이 내 주문이라면 /orders/124는 다른 사람의 주문일 수 있고, 인가 검사가 없으면 그대로 보입니다. 모든 자원 접근 시점마다 '이 사용자가 이걸 봐도 되는가'를 명시적으로 검사하는 습관이 필수입니다.

다른 자주 보이는 오류: 클라이언트 코드에서 '관리자 메뉴 숨기기'를 인가로 착각하는 것. 화면에 안 보여도 API 호출은 누구나 시도할 수 있습니다. 인가는 항상 서버 측에서, 모든 요청마다 확인해야 합니다. 또 '최소 권한 원칙(least privilege)' — 사용자·서비스에 필요한 최소한의 권한만 주는 것 — 이 인가 설계의 기본 가치입니다.

인가의 개념을 본문 안에서 다른 각도로 비춰 보는 편집형 일러스트.
FIG. 1인가를 다른 각도에서 다시 봅니다.

비유로 보면

인가는 회사 출입증의 등급과 비슷합니다. 같은 회사 출입증을 가졌어도, 일반 직원증으로는 사무실까지만 갈 수 있고, 임원 카드는 회의실 한 곳까지 더, 보안 카드는 서버실까지 갈 수 있습니다. 누구인지(인증)는 같지만, 어디를 갈 수 있는지(인가)가 다릅니다.

어디에서 만나나

모든 멀티 사용자 시스템 — SaaS, 회사 협업 도구, 클라우드 콘솔(AWS IAM·GCP IAM), 깃허브·노션 같은 공유 도구, 행정 시스템, 의료·금융 시스템. 권한이 정교할수록 인가 정책의 복잡도가 비례해 커집니다.

작은 예시

회사 협업 도구에서 같은 문서 링크를 두 사람에게 보내도, 편집자는 글을 고칠 수 있고 뷰어는 읽기만 됩니다. 두 사람은 모두 로그인(인증 완료)했지만, 인가가 다르게 적용돼서 가능한 행동이 달라진 것입니다.

자주 하는 오해

오해
흔한 오해 셋. ① '로그인하면 다 봐도 된다' — 인증 후에도 자원별 인가 검사가 필요합니다. ② '화면에 안 보이면 안전' — API에 직접 요청을 보내면 보입니다. 서버에서 막아야 합니다. ③ '권한을 한 번 정하면 끝' — 사용자·역할이 늘고 줄면서 정기적으로 검토해야 합니다.

한 줄 정리

인가의 좋은 척도는 '최소 권한이 유지되는가'입니다. 누구나 자기 일에 필요한 최소한만 가지면, 사고의 영향 범위가 자연히 작아집니다.
매주 월요일 오전 8시

한 주에 한 통,
오래 남는 이해를 보냅니다.

흘려보내지 않는 글만 골라 보내드립니다. 광고와 추적, 외부로 빠지는 미끼 링크 없이 메일 안에서 끝나는 한 통입니다.

언제든 한 번의 클릭으로 해지할 수 있습니다. 스팸은 보내지 않습니다.