안녕하세요! 오늘은 AWS 계정 보안을 한 단계 업그레이드하는 방법을 공유하려 합니다.
혹시 IAM 사용자를 만들 때 습관적으로 AdministratorAccess를 주고 계시지는 않나요? 이렇게 되면 액세스 키가 유출되었을 때 돌이킬 수 없는 피해를 입게 됩니다.
AWS 보안의 모범 사례(Best Practice)는 **"IAM 사용자는 깡통(권한 0)으로 만들고, 필요한 작업을 할 때만 '역할(Role)'을 빌려 쓰는(Assume) 방식"**입니다. 이렇게 하면 과도한 권한 부여를 막고, 누가 언제 어떤 권한을 썼는지 투명하게 관리할 수 있습니다.
1. 큰 그림: 우리가 만들 구조
우리는 3가지 등급의 역할을 만들고, 사용자는 상황에 맞춰 이 역할들로 '변신(Switch Role)'해서 일하게 할 겁니다.
Role-Viewer: 읽기 전용 (모니터링용)
Role-Operator: 서버 재부팅 등 일상 운영 작업용
Role-Admin-Emergency: 비상시에만 사용하는 최고 관리자용 (MFA 필수)
2. 단계별 구축 가이드
Step 1. 안전장치 만들기: 권한 경계(Permissions Boundary)
가장 먼저, 역할이 가질 수 있는 권한의 상한선을 만듭니다. 이걸 설정해두면 관리자 권한을 가진 역할이라도 특정 리전 밖에서는 아무것도 못 하게 막을 수 있습니다.
[IAM 콘솔] > [정책(Policies)] > [정책 생성] 클릭.
[JSON] 탭을 클릭하고 아래 내용을 붙여넣습니다. (서울 리전 외 차단 및 로그 삭제 금지 예시)
JSON
정책 이름:PB-Guardrail-Base로 저장합니다.
Step 2. 역할(Role) 3종 세트 만들기
이제 실제로 작업할 때 쓸 '모자(역할)'를 3개 만듭니다. 예시로 Viewer 역할 하나만 만드는 법을 설명할게요. 나머지도 방식은 같습니다.
[IAM 콘솔] > [역할(Roles)] > [역할 생성] 클릭.
신뢰할 수 있는 엔터티 유형: 'AWS 계정' 선택 > '이 계정(This account)' 선택.
권한 추가:
검색창에 ReadOnlyAccess 입력 후 체크.
중요! 목록 하단(또는 상단)에 **[권한 경계 설정(Set permissions boundary)]**를 찾아 클릭합니다.
방금 만든 PB-Guardrail-Base를 검색해서 선택합니다. (이게 안전벨트 역할을 합니다)
이름 지정: Role-Viewer라고 입력하고 생성 완료.
나머지 역할 권장 설정: *Role-Operator: 운영에 필요한 커스텀 정책 + Boundary 적용 *Role-Admin-Emergency:AdministratorAccess+ Boundary 적용
Step 3. 역할의 신뢰 정책(Trust Policy) 수정
"이 역할은 아무나 쓸 수 없어!"라고 선언해야 합니다. 특히 MFA(멀티팩터 인증)를 한 사람만 역할을 쓸 수 있게 잠그는 것이 핵심입니다 .
방금 만든 Role-Viewer를 클릭해 들어갑니다.
[신뢰 관계(Trust relationships)] 탭 > [신뢰 정책 편집] 클릭.
아래 JSON으로 교체합니다. (MFA가 true일 때만 Assume 허용)
Step 4. 사용자(User) 만들기 & 연결
이제 사람(User)을 만듭니다. 이 사람은 권한이 0개여야 합니다. 오직 "역할을 쓰는 권한" 하나만 줍니다.
[IAM 콘솔] > [사용자(Users)] > [사용자 생성] 클릭.
이름 입력 후, 어떤 권한 정책도 연결하지 않고 생성을 완료합니다.
[정책(Policies)] 메뉴로 가서 **[정책 생성]**을 누르고, 아래 내용을 Allow-AssumeRole이라는 이름으로 만듭니다.
다시 사용자로 돌아와서, 방금 만든 Allow-AssumeRole 정책만 딱 하나 연결해 줍니다.
(강력 추천) Force-MFA 정책도 만들어서 붙여주세요. "MFA 안 하면 모든 행동 Deny" 정책을 추가하면 보안이 완벽해집니다.
3. 실전 사용 방법 (역할 전환하기)
설정이 끝났으니 이제 역할을 써볼까요?
콘솔에서 사용하기 (Switch Role)
IAM 사용자로 로그인합니다. (권한이 없어서 아무것도 안 보일 겁니다.)
우측 상단 [계정 아이디/이름] 클릭 > [역할 전환(Switch Role)] 클릭.
정보 입력:
계정(Account): 내 AWS 계정 ID (12자리 숫자)
역할(Role): Role-Viewer
표시 이름(Display Name): 보기 편한 이름 (예: Viewer)
[역할 전환] 버튼을 누르면, 상단 바 색상이 바뀌면서 이제부터 Viewer 권한으로 활동하게 됩니다.
CLI에서 사용하기
터미널에서는 다음 명령어로 임시 자격 증명을 받아 사용합니다.
리턴되는 AccessKey, SecretKey, SessionToken을 환경변수에 넣고 사용하면 됩니다.
4. 자주 묻는 질문 (Troubleshooting)
Q. 역할 전환을 했는데 'Access Denied'가 떠요!
MFA 확인: 로그인할 때 MFA를 했나요? 신뢰 정책에 MFA 필수 조건이 있다면 MFA 없이는 전환이 안 됩니다.
권한 경계 확인: 혹시 서울 리전(ap-northeast-2)이 아닌 곳을 조회했나요? 권한 경계(PB)에서 막았을 수 있습니다.
Q. 사용자가 역할을 전환조차 못 해요.
사용자에게 sts:AssumeRole 정책을 연결했는지 확인하세요.
역할의 신뢰 정책(Trust Policy)에 해당 계정(root)이 포함되어 있는지 확인하세요.
마치며
"사용자는 로그인만, 권한은 전부 역할에!" 처음엔 조금 번거로울 수 있지만, 이 AssumeRole 패턴은 계정이 늘어나거나 팀원이 많아질수록 빛을 발하는 가장 단단한 보안 체계입니다.
