개념 자료

권한 관리

클라우드에서 일어나는 모든 일은 "누가, 무엇을, 어디에" 하겠다는 요청입니다. 권한 관리는 그 요청을 보낸 게 누구인지 확인하고, 그 사람(또는 프로그램)이 그 일을 해도 되는지 정하는 일입니다. 클라우드 프로바이더마다 이름은 다르지만 뼈대는 같습니다. 뼈대를 먼저 보고, 프로바이더마다 다른 점은 장마다 따로 봅니다.

AWS 기준으로 보고 있습니다. 장마다 AWS의 서비스 이름과 다른 프로바이더와 다른 점을 함께 보여 줍니다.

01

누구냐, 무엇을 해도 되냐: 인증과 인가

회사 건물에 들어갈 때를 생각해 봅시다. 입구에서 사원증으로 본인인지 확인하고, 층마다 그 사원증으로 들어갈 수 있는 곳인지 다시 확인합니다. 앞의 것이 인증(Authentication, 누구인지 확인), 뒤의 것이 인가(Authorization, 그 사람이 이 일을 해도 되는지 결정)입니다. 클라우드도 똑같이 두 단계를 거칩니다.

요청을 보내는 쪽을 보안 주체(principal), 줄여서 주체라고 부릅니다. 주체는 사람만이 아닙니다. 매일 밤 백업을 도는 프로그램, 주문을 처리하는 서버도 클라우드의 저장소나 데이터베이스를 부르니 모두 주체입니다. 사람에게는 비밀번호와 두 번째 확인 수단을, 프로그램에게는 키나 임시 자격 증명을 줘서 누구인지 밝히게 합니다(4장). 아래 그림에서 상황을 바꿔 보세요.

상황
상황
정상

개발자의 요청이 인증 문과 인가 문을 차례로 지난다

요청은 문 두 개를 차례로 지납니다. 첫 문은 "이 요청을 보낸 게 정말 민수인가"(인증), 둘째 문은 "민수가 이 저장소를 읽어도 되는가"(인가)를 봅니다.

인증인가
묻는 것이 요청을 보낸 게 정말 그 주체인가그 주체가 이 일을 해도 되는가
쓰는 것비밀번호, MFA, 키, 토큰정책, 역할, 권한
실패하면누구인지 모름 → 다시 로그인·새 키누구인지는 앎 → 권한을 요청·수정

HTTP 표준에서는 401이 인증 실패(누구인지 다시 밝혀라), 403이 인가 실패(알지만 허락하지 않는다)를 뜻합니다. 그런데 클라우드 API는 이 구분을 그대로 따르지 않기도 합니다. 둘 다 403으로 돌려주는 곳도, 둘 다 401로 돌려주는 곳도 있습니다. 그래서 상태 번호보다 오류 코드와 메시지를 보고 어느 문에서 막혔는지 가립니다.

가장 강한 계정은 쓰지 않는 계정

클라우드 계정을 처음 만들 때 생기는 최상위 계정(루트·메인 계정, 최고 관리자)은 모든 것을 할 수 있습니다. 결제 정보 변경이나 계정 해지까지 됩니다. 그래서 이 계정은 MFA를 걸어 금고에 넣어 두고, 평소 일은 권한을 나눈 별도 계정으로 합니다. 이 계정이 털리면 어떤 권한 설정도 소용이 없기 때문입니다.

"인증"은 누구냐, "인가"는 무엇을 해도 되냐입니다. 문제에서 "로그인은 되는데 작업이 거부된다"면 인증은 통과했고 인가에서 막힌 것입니다. 정책을 볼 차례입니다.

문제에 이런 표현이 나오면 → 이렇게 고른다

  • “사용자가 본인임을 증명하는 과정”인증 (Authentication)
  • “인증된 사용자가 어떤 작업을 할 수 있는지 결정”인가 (Authorization)
  • “로그인은 되는데 리소스 작업이 거부된다”인가 문제 — 권한(정책) 확인
  • “최상위(루트) 계정을 보호하는 첫 조치”MFA를 걸고 일상 업무에 쓰지 않기
  • “서버의 프로그램이 클라우드 API를 부를 때의 신원”사람 계정이 아니라 프로그램용 신원(역할·서비스 계정)

누구인지 확인하는 문을 봤습니다. 그런데 직원이 쓰는 앱이 수십 개라면, 그 문을 앱마다 따로 세워야 할까요?

02

신원 하나로 모으기: SSO·페더레이션·MFA·조건부 접근

앱마다 계정과 비밀번호를 따로 두면 비밀번호가 늘고, 사람들은 같은 비밀번호를 돌려 씁니다. 퇴사자가 생기면 앱마다 찾아가 계정을 지워야 하고, 하나라도 빠뜨리면 그 문은 계속 열려 있습니다. 그래서 신원은 신원 공급자(IdP) 한 곳에 모읍니다. 로그인은 IdP에서 한 번만 하고, 앱들은 IdP가 발급한 확인서(토큰)를 믿고 들여보냅니다. 이것이 SSO(Single Sign-On)입니다.

회사가 이미 사내 디렉터리를 쓰고 있다면 클라우드에 사람을 새로 만들지 않고 그 디렉터리를 믿게 할 수 있습니다. 이렇게 다른 조직의 신원 확인을 믿는 것을 페더레이션이라 하고, 그 확인서를 주고받는 표준이 SAML 2.0과 OIDC(OpenID Connect)입니다.

방식
로그인 위치
방식
IAM Identity Center 한 곳에서 로그인 (SSO)
로그인 위치
평소 위치·회사 기기

직원이 앱 세 개에 들어간다 · 보라 = 신원 공급자

로그인은 신원 공급자 한 곳에서만 하고, 앱들은 신원 공급자가 발급한 확인서(토큰)를 믿고 들여보냅니다. 퇴사 처리도 한 곳에서 계정을 막으면 모든 앱에서 끝납니다.

비밀번호 하나로는 부족하다: MFA

비밀번호는 피싱으로, 유출된 다른 사이트 비밀번호로 쉽게 새어 나갑니다. MFA(다단계 인증)는 비밀번호에 더해 내가 가진 것(휴대폰 앱, 보안 키)이나 나 자신(지문)으로 한 번 더 확인합니다. 같은 MFA라도 강도가 다릅니다. 문자(SMS)나 인증 앱의 6자리 숫자는 가짜 사이트에 그대로 입력해 넘어갈 수 있지만, 보안 키와 패스키(FIDO2)는 진짜 사이트에서만 동작해 피싱에 강합니다.

상황을 보고 정하기: 조건부 접근

로그인할 때마다 같은 강도로 확인할 필요는 없습니다. 회사 노트북으로 사무실에서 들어오면 그냥 통과시키고, 처음 보는 나라와 기기에서 들어오면 MFA를 요구하거나 막을 수 있습니다. 이렇게 사용자·위치·기기·위험도 같은 신호를 보고 "허용 / 추가 확인 후 허용 / 차단"을 정하는 것이 조건부 접근입니다. 신원이 한곳(IdP)에 모여 있어야 이런 조건도 한곳에서 걸 수 있습니다.

용어하는 일
IdP (신원 공급자)사람의 신원을 보관하고 로그인을 처리한다
SSO한 번 로그인으로 여러 앱에 들어간다
페더레이션 (SAML·OIDC)다른 조직(사내 디렉터리)의 신원 확인을 믿는다
MFA비밀번호 외에 두 번째 확인 — 피싱에 강한 것은 보안 키·패스키
조건부 접근위치·기기·위험도에 따라 허용·추가 확인·차단

문제에 이런 표현이 나오면 → 이렇게 고른다

  • “여러 앱에 한 번 로그인으로 접근”SSO
  • “사내 디렉터리 계정으로 클라우드 콘솔에 로그인”페더레이션 (SAML 2.0·OIDC)
  • “피싱에 강한 MFA 수단”보안 키·패스키 (FIDO2)
  • “낯선 나라에서 로그인하면 추가 인증 요구”조건부 접근
  • “퇴사자 계정을 모든 앱에서 한 번에 막기”신원을 IdP 한 곳에 모은다

누구인지는 확실해졌습니다. 이제 둘째 문, "이 일을 해도 되냐"를 정하는 정책을 읽어 봅시다.

광고

03

정책 읽는 법: 누가·무엇을·어디에·어떤 조건에서

권한은 정책으로 줍니다. 프로바이더마다 모양은 달라도 정책이 담는 칸은 거의 같습니다. 누가(주체), 무엇을(행동), 어디에(리소스), 어떤 조건에서(조건), 그리고 허용인지 거부인지입니다.

허용 | 누가: 개발자 그룹
     | 무엇을: 객체 읽기, 객체 쓰기
     | 어디에: 개발용 버킷의 모든 객체
     | 조건: MFA로 로그인했을 때만

요청이 들어오면 시스템은 그 요청에 해당하는 정책을 모두 모아 대조합니다. 판정 규칙은 세 줄입니다.

순서규칙
1아무 정책도 허용하지 않으면 거부한다 (기본 거부)
2허용하는 정책이 있으면 허용한다
3하지만 거부하는 정책이 하나라도 있으면 허용이 있어도 거부한다 (명시적 거부가 이긴다)

아래 그림에서 허용 정책과 거부 정책을 붙였다 뗐다 해 보세요.

결과
허용

요청 하나가 붙어 있는 정책들과 대조된다 · 주황 카드 = 거부, 연두 카드 = 허용

거부하는 정책이 없고, 붙어 있는 허용 정책이 "저장소 전체 삭제"를 허용하니 통과합니다. 거부 정책을 켜 보세요.

정책을 붙이는 두 자리: 신원 쪽과 리소스 쪽

정책은 사람·그룹·역할 같은 신원에 붙이기도 하고("이 사람은 무엇을 할 수 있다"), 저장소 같은 리소스에 붙이기도 합니다("이 버킷에는 누가 들어올 수 있다"). 리소스 쪽 정책에는 "누가" 칸이 꼭 들어갑니다. 리소스 쪽 정책은 다른 계정·조직의 주체를 들일 때 특히 중요해서 5장에서 따로 봅니다.

사람마다 주지 말고 묶어서 주기: 그룹과 역할

정책을 사람 한 명 한 명에게 붙이면 사람이 늘수록 관리할 수 없게 됩니다. 같은 일을 하는 사람을 그룹으로 묶어 그룹에 붙이고, "읽기 전용", "데이터베이스 운영자"처럼 권한 묶음을 역할로 만들어 주는 것을 역할 기반 접근 제어(RBAC)라고 합니다. 여기에 태그 같은 속성을 조건으로 써서 "프로젝트 태그가 같은 리소스만"처럼 주는 것을 속성 기반 접근 제어(ABAC)라고 합니다.

시험 단골: "허용 정책을 줬는데 여전히 거부된다" → 어딘가에 명시적 거부가 있다. "아무 정책도 안 붙였다" → 기본 거부. 허용과 거부가 둘 다 맞으면 언제나 거부가 이깁니다.

문제에 이런 표현이 나오면 → 이렇게 고른다

  • “허용과 거부 정책이 동시에 적용된다”거부가 이긴다 (명시적 거부 우선)
  • “새로 만든 사용자가 아무것도 못 한다”기본 거부 — 허용을 붙여야 한다
  • “MFA로 로그인했을 때만 삭제 허용”정책의 조건(Condition)
  • “같은 직무의 사람들에게 같은 권한”그룹·역할에 정책을 붙인다 (RBAC)
  • “태그가 같은 리소스에만 접근 허용”속성 기반 접근 제어 (ABAC)

정책은 사람에게만 붙는 게 아닙니다. 사람 없이 밤새 도는 프로그램에게는 어떻게 권한을 줄까요?

Pro 전용

여기까지 무료로 읽을 수 있어요

나머지 5개 장은 Pro 구독자에게 열려 있어요. 장마다 3D 그림과 "문제에 이런 표현이 나오면" 정리가 이어지고, 마지막 장에서는 직접 풀어 보며 확인합니다.

  1. 04역할과 임시 자격 증명
  2. 05리소스 정책과 공유
  3. 06계층과 가드레일
  4. 07최소 권한 운영
  5. 08접근이 거부될 때