액세스 제어를 통한 신뢰 구축
대부분의 앱은 로그인 페이지가 있다는 이유만으로 자신이 안전하다고 생각합니다.
로그인은 첫 단계일 뿐입니다. 사용자가 접속하면 한 가지 질문에 답해야 합니다: 이 사용자는 무엇을 할 수 있는가?
많은 사람들이 인증(Authentication)과 인가(Authorization)를 혼동합니다.
• 인증(Authentication)은 묻습니다: 당신은 누구입니까? • 인가(Authorization)는 묻습니다: 당신은 무엇을 할 수 있습니까?
사용자가 성공적으로 로그인했을 수도 있습니다. 그렇다고 해서 그 사용자가 모든 기록을 보거나 모든 프로필을 수정할 수 있다는 뜻은 아닙니다.
규칙을 명확히 하기 위해 역할 기반 액세스 제어(RBAC)를 사용하세요.
RBAC는 사용자의 역할을 허용된 역할 목록과 대조하여 작동합니다. 액세스 제어를 사용하지 않으면 다음과 같은 위험에 직면할 수 있습니다:
- 대시보드 과다 노출
- 과도한 내부 권한
- 실수로 인한 데이터 유출
- 부실한 감사 추적(Audit trail)
- 신뢰 훼손
최소 권한 원칙(Principle of least privilege)을 따르세요. 사용자에게 업무에 꼭 필요한 액세스 권한만 부여해야 합니다.
• 지원 팀 직원이 모든 고객 기록을 볼 수 있어서는 안 됩니다. • 엔지니어에게 기본적으로 운영 환경(Production) 액세스 권한을 주어서는 안 됩니다. • 인사(HR) 데이터는 반드시 분리되어야 합니다. • 관리자 역할은 드물게 부여되어야 하며 감사 가능해야 합니다.
때로는 역할만으로는 부족합니다. 작업 기반 권한(Action-based permissions)이 필요합니다. 사용자가 기록을 볼 수는 있지만 삭제할 수는 없게 설정하는 식입니다. 이를 통해 세밀한 제어(Granular control)가 가능해집니다.
또한 데이터의 민감도에 따라 데이터를 분류해야 합니다: • 공개 데이터: 이름 및 사진. • 개인 데이터: 이메일 및 전화번호. • 민감 데이터: 급여 또는 식별 번호.
코드에서 이러한 카테고리를 다르게 처리하세요. 이렇게 하면 보안 관리가 쉬워집니다.
신뢰를 위해서는 책임성(Accountability)도 필요합니다. 누군가 민감한 데이터에 접근할 때마다 시스템은 감사 추적(Audit trail)을 생성해야 합니다. 민감한 작업은 반드시 흔적을 남겨야 합니다.
앱을 출시하기 전에 다음 사항을 점검하세요:
- 로그인 및 세션 흐름이 안전한가?
- 권한이 역할과 작업에 기반하고 있는가?
- 민감 데이터가 분리되어 있는가?
- 기본 설정이 제한적인가?
- 모든 액세스에 대해 로그를 남기는가?
- 사용자에게 권한에 대해 설명할 수 있는가?
인증은 사용자를 접속시키고, 인가는 시스템을 신뢰할 수 있게 유지합니다. 신뢰는 제품의 기능입니다.
