Authentication & Authorization

bearMin·2024년 8월 13일

들어가면서

인증과 인가가 무엇인지 물어봤을 때, 그거 두개 뭐 보안 관련해서 비슷한 거 아니야? 라고 생각하는 사람들이 많을 것이다. 나 또한 차이가 있다는 것만 알지 정확하게 설명할 자신은 없었기 때문에 이번 포스팅을 통해 인증과 인가에 대해서 제대로 알아보고자 한다!


뭐가 다른데?

우선 인증과 인가가 뭐가 다른지 살짝 짚고 넘어가는 것이 좋을 것 같다. 인증과 인가가 보안과 관련이 있다는 것은 쉽게 알 수 있을 것이다. 그런데 여기서 중요한 것이 하나있다. 인증과 인가는 서로 다른 행위를 한다는 점이다.


인증이란 시스템이 사용자나 기기의 신원을 확인하는 과정이고, 인가시스템이 인증이 된 사용자에게 특정 자원이나 기능에 대한 접근 권한을 부여하는 과정이다. 또한 이 둘은 IAM의 중요한 부분이다.

💡 IAM?
Identity and Access Management의 약자로, 사용자가 누구인지와 사용자가 어떤 권한을 
가지고 있는지 알려주는 방법

뭔가 둘이 진행하는 과정이 다른 것 같다. 그렇다면 하나하나 어떻게 다른지 한번 알아보자!


인증(Authentication)이란?

정의는?

사용자 또는 디바이스 등의 신원 정보를 확인하는 과정

아마 바로 생각나는 과정이 있을 것이다. 맞다. 바로 그 회원가입과 로그인이 이 인증 과정에 속한다.

이처럼 시스템이 사용자나 기기가 누구인지 확인하는 절차이며, 이 인증의 목적은 접속을 하려는 사용자가 실제 그 사용자가 맞는지 확인을 하는 것이다.


그래도 아직 헷갈릴 수 있으니 간단한 예시를 들어서 설명을 해보자면, 친구의 생일이라 술집에서 모이려고 한다. 이때 술집에 들어갔을 때 사장님이나 직원분들이 꼭 하는 것이 있다. 바로 신분증 검사이다. 요즘에는 잘 안해주는 것 같아서 조금 속상하다.. 이처럼 신분증을 확인하여 나의 정보를 확인하는 과정이 바로 인증이다.


주요 요소는?

신원 정보를 확인하기 위해서 사용하는 방법에는 여러가지가 있고 이 방법을 요소라고 한다! 그렇다면 요소들에는 어떠한 것들이 있을까?


  1. 무엇을 알고 있는가? (What You Know)
    • 사용자가 알고 있는 어떠한 비밀 정보들을 기반으로 인증하는 방법
    • 가장 일반적이고 오래된 방법이다.
      ex) 비밀번호(Password), PIN, 보안 질문 등
  1. 무엇을 가지고 있는가? (What You Have)
    • 사용자가 소유하고 있는 물리적 개체를 기반으로 인증하는 방법
    • 알고 있는 것과 결합하여 사용할 경우 보안을 강화할 수 있다.
      ex) 스마트 카드, 보안 토큰, 디지털 인증서 등
  1. 무엇인가? (What You Are)
    • 사용자의 고유한 속성을 기반으로 인증하는 방법
    • 보통 사용자의 물리적 특징을 인식하여 인증한다.
      ex) 지문 인식, 얼굴 인식, 홍채 인식, 음성 인식 등
  1. 어디에 있는가? (Where You Are)
    • 사용자의 위치를 기반으로 인증하는 방법
    • 주로 사용자가 특정 위치에 있는지를 확인한다.
      ex) GPS 위치, IP 주소, Wi-Fi 네트워크 등
  1. 무엇을 하는가? (What You Do)
    • 사용자의 행동 패턴을 분석하여 인증하는 방법
    • 사용자가 시스템과 상호 작용하는 방식이나 타이핑 습관, 마우스 움직임 등을 기반으로 한다.
      ex) 타이핑 패턴, 마우스 움직임, 사용 패턴 분석 등

이처럼 각각의 요소들을 사용해서 인증하는 방식단일 요소 인증이라고 한다!

다만 이 단일 인증 방식은 약한 인증 방식이 될 수 있다. 비밀번호와 같은 요소들은 해킹의 위험이 충분히 있기 때문이다..


다중 요소 인증은?

따라서 우리는 추가적인 인증 요소들을 사용하여 보안을 강화할 수 있다. 이렇게 강화한 요소 인증 방식을 다중 요소 인증이라고 한다!

간단히 예를 들어서 설명을 해보자면, 알고 있는 것의 예시인 비밀번호과 가지고 있는 것의 예시인 스마트폰으로 전송된 일회용 비밀번호를 동시에 요구하는 것이다!


이 다중 요소 인증에도 방식들이 나뉘게 된다.

  1. MSA(Multi Step Authentication)
    • 동일한 요소로 연이어서 인증을 하는 방식
      ex) 비밀번호(알고 있는 것)를 입력한 뒤에 PIN(알고있는 것)을 입력
  1. MFA(Multi Factor Authentication)
    • 서로 다른 종류의 요소를 조합하여 인증하는 방식
      ex) ATM에 현금 카드(가지고 있는 것)를 넣고 비밀번호(알고 있는 것)를 입력

이처럼 다중 요소 인증은 위에서 얘기했던 단일 요소 인증보다 훨씬 더 강력한 보안 기능을 제공한다.


인가(Authorization)란?

정의는?

사용자 또는 장치가 시스템에 접근할 수 있는 권한과 자원을 관리하는 과정

자세한 설명을 하기 전에 이 인가의 예시를 먼저 살펴보자!

인증이 술집에서 직원 분이나 사장님이 신분증을 요청하고 확인을 하는 작업이라고 했다. 인가란 이 신분증을 확인한 뒤에 우리 술집에서 술을 마실 수 있는지 없는지를 결정해주는 것과 같은 작업이다. 만일 빠른 년생이라 아직 술을 마실 수 없다면 신분증을 확인한 뒤에 돌려보낼 것이고, 그게 아닌 법적으로 술을 마실 수 있는 나이라면 자리로 안내를 해줄 것이다.

내가 이 술집에서 술을 마실 수 있는지 없는지에 대한 권한을 결정하는 것처럼 사용자가 시스템에 접근할 수 있는지에 대한 권한을 결정해주는 것인가라고 한다.


이때 예시처럼 인증에서 인가로 이어질 수 있지만 인가에서 인증으로는 이어질 수 없다. 위에서 얘기한 예시를 생각해보면 왜 그런지 바로 이해할 수 있다.

신분증 검사를 한 뒤에 술집에서 술을 마시는 것은 문제가 되지 않지만, 술을 마신 뒤에 신분증 검사를 하게 된다면 내가 빠른 년생 혹은 미성년자일 경우에 문제가 된다.

⇒ 즉, 인증은 권한 부여 결정의 요소로 사용이 될 수 있지만 권한 부여는 내가 나임을 특정할 수 없어서 인증을 하기에 유용하지 않다.


주요 요소는?

  1. 접근 제어 (Access Control)
    • 사용자나 시스템이 특정 자원에 접근할 수 있는지 여부를 결정하는 프로세스
    • 다양한 접근 제어 모델이 사용된다.
      • 직접적 접근 제어(Direct Access Control)
        : 사용자가 직접 특정 자원에 대한 접근 권한을 가지는 방식
      • 간접적 접근 제어(Indirect Access Control)
        : 접근 권한을 관리하는 중간 시스템이나 관리자가 사용자를 대신하여 접근을 허용하거나 거부하는 방식
  1. 권한 (Permissions)
    • 사용자가 수행할 수 있는 특정 작업이나 접근할 수 있는 자원
    • 사용자의 역할이나 속성에 따라 달라질 수 있다.
      ex) 읽기 권한, 쓰기 권한, 실행 권한 등
  1. 정책 (Policies)
    • 시스템의 접근 제어 규칙
    • 어떤 조건에서 접근이 허용되거나 거부되는지를 명확히 한다.
    • 매우 세부적일 수 있으며, 특정 시간, 장소, 상황 등에 따라 달라질 수 있다.

접근 제어 모델은?

접근 제어어떠한 정보에 접근할 때 사용자가 해당 정보에 접근할 수 있는 권한을 가지고 있는지 판단하는 것이다. 우리는 인가의 작업을 진행할 때 이 접근 제어를 구현해야하는데 이미 잘 정립되어 있는 여러 종류의 접근 제어 모델들이 있다. 각각의 모델들을 살펴보자!


  1. 역할 기반 접근 제어 (Role-Based Access Control, RBAC)
    • 사용자의 역할(Role)에 따라 접근 권한을 부여하는 방식
    • 각 역할은 특정 권한 세트를 가지며, 사용자는 하나 이상의 역할을 가질 수 있다.
      ex) 관리자와 일반 사용자, 게스트로 나눴을 때
      • 관리자(Administrator): 모든 시스템 자원에 대한 접근 권한을 가짐
      • 일반 사용자(User): 개인 데이터에 대한 접근 권한을 가짐
      • 게스트(Guest): 제한된 자원에 대한 접근 권한을 가짐
  1. 강제 접근 제어 (Mandatory Access Control, MAC)
    • 시스템에서 중앙 관리자가 정의한 보안 정책에 따라 자원에 대한 접근 권한을 관리하는 방법
    • 사용자는 자신이 소유한 자원에 대한 접근 권한을 설정할 수 없으며, 모든 접근 제어 결정은 시스템에 의해 강제적으로 적용된다.
    • 주요 특징
      • 중앙화된 제어
        : 중앙 관리자가 설정한 정책에 의해 결정되며, 사용자는 이를 변경할 수 없다.
      • 보안 레이블
        : 모든 자원과 사용자에게 보안 레이블(Security Label)이 부여되며, 이 레이블을 기반으로 접근 권한이 결정된다.
        ex) 문서에는 기밀(Confidential) 레이블이, 사용자는 비밀 접근 권한(Secret Clearance) 레이블이 부여
      • 정책 기반 접근
        : 접근 권한은 사전 정의된 보안 정책에 의해 자동으로 결정된다.
        ex) 군사 시스템(자신의 계급에 따라 정보 제한), 정부 기관(특정 등급의 보안 권한을 가진 사용자만 접근가능)
  1. 네트워크 접근 제어 (Network Access Control, NAC)
    • 네트워크에 접속하는 장치와 사용자에 대한 접근 권한을 관리하는 방법
    • 네트워크 보안을 강화하기 위해 사용자와 장치가 네트워크에 접속하기 전에 적절한 보안 요구사항을 충족하는지 확인
    • 주요 특징
      • 접속 검증
        : 사용자가 네트워크에 접속하려고 할 때, NAC 시스템은 사용자의 신원, 장치 상태, 보안 정책 준수 여부를 검증한다.
      • 정책 적용
        : 네트워크 접속 전, 보안 정책이 강제적으로 적용된다.
        ex) 최신 보안 패치가 적용되지 않은 장치는 네트워크에 접속할 수 없음
      • 동적 접근 제어
        : NAC는 네트워크 상황에 따라 실시간으로 접근 권한을 조정할 수 있다.
        ex) 특정 네트워크 구역에 대해서만 접근을 허용하거나 제한
      ex) 기업 네트워크(회사 네트워크에 접속할 때 보안 검사를 실시), 교육 기관(학생들이 안전한 네트워크에 접속하도록 하고, 불법적인 활동을 제한)
  1. 속성 기반 접근 제어 (Attribute-Based Access Control, ABAC)
    • 사용자의 속성(Attribute)을 기반으로 접근 권한을 부여하는 방식
    • 사용자의 속성은 역할, 부서, 직위, 위치, 나이 등 다양하다.
      ex) 부서(인사부 속성을 가진 사용자는 인사 데이터에 접근 가능), 위치(본사 위치에서 접속하는 사용자는 내부 네트워크에 접근 가능)
  1. 규칙 기반 접근 제어 (Rule-Based Access Control)
    • 규칙 기반 접근 제어는 사전에 정의된 규칙에 따라 접근을 허용하거나 거부하는 방식
    • 규칙은 시간, 날짜, IP 주소, 특정 이벤트 등에 기반
      ex) 업무 시간(오전 9시~오후 6시) 동안만 특정 데이터베이스에 접근 가능, 특정 IP 주소 범위에서만 시스템 접속 허용

더 알아봐야 할 것은?

인증과 인가를 통해 사용자들은 서버에 다양한 요청들을 보낼 수 있다. 이때, HTTP 통신을 하게 된다면 비연결성이라는 특징 때문에 우리는 매번 인증과 인가의 과정을 거쳐야한다. 이는 사용자가 불편함을 느낄 수 있다.

때문에 이를 방지하기 위해서 사용되는 기술들이 있는데, 우리는 이 기술들이 무엇인지 이미 알고 있다. 바로 Cookie와 Session, Token이다!

Cookie를 통해서 인증과 인가의 작업을 진행하려고 했으나 이는 너무 보안상으로 좋지 않기 때문에 Session의 방식을 사용하게 된다. Session 방식은 보안상으로는 좋으나 서버의 부하가 있을 수 있다는 단점이 있기 때문에 Token 방식이 나오게 되었고, Token 방식에서 쓰이는 주된 Token 포맷은 JWT이다!


이처럼 인증과 인가, Cookie, Session, Token, JWT 등은 한번에 연결지어서 이해하면 훨씬 수월하기 때문에 다른 내용들을 잘 모르겠다면 한번씩 정리하면서 공부하는 것을 추천한다!


정리하자면

인증이란 누구인지 확인하는 절차이다!

인가란 권한이 있는지 확인하는 절차이다!

profile
소소한 공부기록

0개의 댓글