블로그 본문

[안전한 권한 관리] 실무 백엔드 개발자를 위한 AWS IAM 사용자와 권한 할당 정책

📌 목차 바로가기

    지난 글에서는 무제한 권한을 가진 절대 마스터키, AWS 루트(Root) 계정을 안전하게 보호하고 이중 잠금장치인 MFA(다중 인증)를 걸어 완전히 금고 속에 봉인하는 기초 아키텍팅 보안을 완료했습니다.

    자, 마스터키를 단단히 잠갔으니 이제 매일매일 코드를 짜고, 데이터베이스(RDS)를 구축하며 웹 서비스를 가동할 차례입니다. 그런데 매번 그 귀중한 금고 문을 열고 루트 계정으로 로그인해서 코딩을 해야 할까요? 절대 아닙니다.

    클라우드 실무 보안의 황금률은 "루트 계정은 가입 시점에 MFA를 걸어 봉인하고, 평소 개발 작업은 세분화된 권한을 가진 별도의 가상 열쇠를 이용해 수행한다"입니다. 오늘은 그 가상 열쇠에 해당하는 AWS IAM(Identity and Access Management) 사용자의 개념과, 본 쇼핑몰 프로젝트 실습을 막힘없이 완수하기 위한 9가지 FullAccess 정책 할당의 정석을 아주 쉽고 정교하게 풀어 드리겠습니다.

    1. 인프라의 출입 통제소: AWS IAM(Identity and Access Management)이란?

    보안 설정을 진행하기 전에, IAM이 무엇인지 개념부터 짚고 넘어가겠습니다.

    AWS IAM은 클라우드 환경 내에서 "누가(Authentication, 인증) 어떤 자원에 접근하여 어떤 행위(Authorization, 권한 부여)를 할 수 있는가"를 중앙에서 제어하는 핵심 출입 통제소입니다.

    이 개념을 비유로 설명해 볼까요? 여러분이 대형 백화점을 운영하는 총괄 사장(Root)이라고 해봅시다. 백화점 지하에는 초고압 전력 제어실이 있고, 1층에는 의류 매장, 5층에는 전산실이 있습니다. 만약 전산실 아르바이트 직원이나 1층 매장 관리자에게 백화점 마스터키를 복사해 준다면 어떤 일이 일어날까요? 실수로 전력 제어 스위치를 내려 백화점 전체를 암흑으로 만들거나 중요 장비를 훼손할 위험이 있겠죠.

    그래서 사장님은 직원마다 사원증(IAM User)을 발급하고, 각 사원증에 딱 필요한 구역만 들어갈 수 있는 보안 등급(권한 정책, Policy)을 입력해 줍니다.

    • 전산실 직원 사원증: 5층 전산실 출입 가능, 지하 전력실 접근 차단.
    • 의류 매장 직원 사원증: 1층 의류 창고 출입 가능, 전산실 접근 차단.

    이처럼 관리 주체와 사용 구역을 세부적으로 나누어 보안 사고를 예방하는 것이 바로 IAM 사용자 기반의 역할 분리(Role Based Access Control, RBAC)이며, 클라우드 세계의 글로벌 표준 보안 설계입니다.

    AWS IAM 백화점 조직도 비유 - 루트 계정 사장님과 IAM 사용자 사원증 권한 부여

    2. 주의 사항: 왜 교재 실습에서는 최소 권한 원칙 대신 FullAccess 9대 권한을 부여할까?

    클라우드 보안의 가장 위대한 대원칙은 바로 '최소 권한 부여 원칙(Principle of Least Privilege)'입니다. 사용자가 업무를 수행하는 데 꼭 필요한 최소한의 조작 권한만 허용하고 나머지는 철저히 차단하는 구조죠.

    하지만 제 교재와 블로그 연재는 단순 이론 학습에 그치지 않고, 직접 코드를 만지며 MySQL 데이터베이스를 구축하고, S3 이미지 스토리지를 연동하며, NoSQL(DynamoDB/DocumentDB)로 데이터를 마이그레이션하고, AWS Lambda 서버리스 핸들러를 배포하는 전방위적 웹 개발 풀스택 실습을 목표로 합니다.

    이 방대한 여정을 헤쳐 나가다 보면, 권한이 1% 부족하여 발생하는 억울한 에러 코드 때문에 학습 흐름이 툭 끊기고 밤새 삽질하는 학생들이 속출하곤 합니다.

    • 학습 환경의 예외적 허용: 따라서 본 교재 실습 단계에서는 권한 마찰로 인한 불필요한 장벽을 무너뜨리고 오직 아키텍처 구조의 이해와 "바이브 코딩"에 온전히 몰입할 수 있도록, 실습에 활용되는 핵심 서비스에 한하여 FullAccess(전체 제어 권한) 정책을 매핑하여 사용합니다.
    • 실무 경고: 단, 여러분이 실습 샌드박스를 졸업하고 기업의 프로덕션(상용) 환경으로 나아갈 때는 반드시 각 권한의 세부 Action(s3:GetObject 등) 단위로 범위를 극도로 좁히는 최소 권한 원칙을 철저하게 준수해야 함을 아키트렉트로서 강력히 경고합니다!

    3. [실습] 쇼핑몰 백엔드 개발용 IAM 사용자 생성 6단계

    그럼 지금부터 스마트폰과 PC를 준비하시고, 우리 쇼핑몰 프로젝트의 개발 엔진이 되어 줄 9대 권한의 가상 사원 계정을 함께 만들어 보겠습니다. (반드시 이전에 만든 루트 계정으로 접속하여 설정하셔야 권한 생성이 오류 없이 완료됩니다.)

    Step 1. IAM 대시보드 진입 및 사용자 생성 시작

    1. AWS 관리 콘솔에 루트 계정으로 로그인합니다.
      루트 계정으로 로그인
    2. 상단 검색창에 'IAM'을 입력하고 Identity and Access Management 서비스로 진입합니다.
    3. 좌측 탐색 창에서 [사용자 (Users)]를 클릭한 후, 우측 상단의 [사용자 생성 (Create user)] 버튼을 클릭합니다.

    Step 2. 사용자 이름 정의 및 콘솔 액세스 허용

    1. 사용자 이름 입력란에 본 쇼핑몰 프로젝트의 주체임을 명시하는 직관적인 이름(예: Iam_user1)을 입력합니다.
    2. "AWS Management Console에 대한 사용자 액세스 권한 제공" 체크박스를 반드시 선택합니다. (이것이 비활성화되면 웹 화면으로 로그인하지 못하는 API 전용 키가 되므로 주의하세요!)
    3. 콘솔 암호 유형은 [사용자 지정 암호]를 선택하여 기억하기 쉬운 강력한 비밀번호를 직접 입력해 줍니다.
      사용자 세부 정보 입력

    Step 3. 권한 정책 직접 연결 (Directly Attach Policies)

    1. [다음]을 누르면 '권한 설정' 화면으로 이동합니다. 세 가지 옵션 중 세 번째인 [직접 정책 연결 (Attach policies directly)]을 정밀하게 선택합니다.
    2. 검색창을 활용해 아래의 9가지 AWS 관리형 정책을 하나씩 검색하여 체크박스를 클릭해 선택합니다.
      IAM 권한 설정(총 9개 권한)

    💡 우리 프로젝트를 구동할 필수 9대 보안/인프라 권한 리스트

    이 9대 권한은 단순 매뉴얼 복사가 아닙니다. 백엔드 개발자로서 이 권한들이 향후 실습에서 구체적으로 어떤 역할을 수행하는지 정확히 이해하고 넘어가야 진짜 아키텍트가 됩니다.

    1. AmazonEC2FullAccess: 우리 쇼핑몰의 메인 백엔드 애플리케이션(Node.js/Express)이 24시간 실행될 가상 서버 컴퓨터(EC2 인스턴스)를 자유롭게 제어하기 위한 권한입니다.
    2. AmazonVPCFullAccess: 가상 네트워크 대역인 VPC, 가상 게이트웨이, 보안 그룹(Security Group) 방화벽 인바운드 규칙을 직접 설정하여 외부 안전 통신망을 구축하기 위한 권한입니다.
    3. AmazonRDSFullAccess: 쇼핑몰의 정형 데이터(고객 정보, 상품, 주문 데이터)를 보관할 MySQL 데이터베이스 서버 인스턴스를 자유롭게 프로비저닝하고 제어하기 위한 권한입니다.
    4. AmazonS3FullAccess: 무겁고 용량이 큰 상품 상세 이미지 자산들을 웹 서버 하드가 아닌, 고가용성의 클라우드 파일 보관소(S3 버킷)에 별도로 업로드하고 관리하기 위한 권한입니다.
    5. AmazonDynamoDBFullAccess: 셋째 마당 NoSQL 전환 단원에서 빠르고 확장성이 뛰어난 키-값(Key-Value) 형태의 완전 관리형 NoSQL 데이터베이스인 DynamoDB 테이블을 구축하고 조작하기 위한 권한입니다.
    6. AmazonDocDBFullAccess: 몽고DB(MongoDB) API와 완벽 호환되는 AWS 도큐먼트 지향 데이터베이스 DocumentDB 클러스터를 구축하고 관리하기 위한 권한입니다.
    7. AWSLambda_FullAccess: 데이터 이관 및 7일 후 자동으로 깨어나는 RDS 좀비 인스턴스를 즉각 재우는 등, 서버를 띄우지 않고 코드만 실행하는 서버리스 아키텍처(Lambda 함수)를 개발하고 실행하기 위한 권한입니다.
    8. IAMReadOnlyAccess: 내 서브 계정이 현재 가지고 있는 정책 목록과 연결 상태를 안전하게 조회(읽기 전용)하기 위한 권한입니다.
    9. CloudWatchLogsFullAccess: 데이터 마이그레이션 도중 에러가 나거나, 웹 서버에 부하가 발생했을 때 로그 파일과 시스템 모니터링 지표를 실시간 수집하고 디버깅하기 위한 권한입니다.

    Step 4. 검토 및 사용자 생성 완료

    1. 정책 필터링이 잘 되어 총 9개의 권한이 정상 선택되었는지 요약 화면에서 꼼꼼히 검토합니다.
    2. 하단의 [사용자 생성 (Create user)] 버튼을 누르면 가상 사원 계정 발급이 최종적으로 마감됩니다.

    Step 5. 마스터 암호 활성화 확인 및 보안 자격 증명 획득

    1. 생성된 사용자 리스트에서 방금 만든 사용자의 이름을 클릭합니다.
    2. [보안 자격 증명 (Security credentials)] 탭으로 이동합니다.
    3. 중요: 만약 '콘솔 로그인' 정보의 콘솔 암호 항목이 '활성화되지 않음'으로 표시되어 있다면 절대 웹에서 로그인할 수 없습니다. 우측의 [콘솔 액세스 관리] 버튼을 눌러 상태를 [활성화]로 수동 변환하고, 생성 단계에서 설정한 비밀번호를 확실하게 지정해 주어야 합니다.

    Step 6. 전용 로그인 URL 주소 보관

    1. [보안 자격 증명] 탭의 '콘솔 로그인' 항목 바로 아래에 있는 '이 계정의 IAM 사용자를 위한 로그인 URL'을 마우스로 드래그하여 복사합니다.
    2. https://[AWS계정ID].signin.aws.amazon.com/console 형식으로 이루어진 이 주소는 오직 내 계정 전용 출입구입니다. 메모장이나 브라우저 북마크에 아주 소중하게 저장해 둡니다.

      콘솔 로그인 URL

    4. 테스트: 안전한 개발용 IAM 사용자 로그인 테스트

    생성이 완료되었다면 제대로 동작하는지 교차 검증을 해야 합니다.

    1. 사용 중이던 브라우저의 우측 상단에서 [로그아웃]을 눌러 루트 사용자 상태를 완전히 종료합니다.
    2. 방금 복사해 둔 'IAM 사용자 전용 로그인 URL 주소'를 브라우저 주소창에 붙여넣고 이동합니다.
    3. 그러면 기존 루트 로그인창과 달리, [AWS 계정 ID]가 미리 기입되어 있는 차별화된 IAM 로그인 인터페이스가 나타납니다.

      AWS 콘솔의 IAM 사용자 로그인 화면

    4. 사용자 이름(Iam_user1)과 수동 지정했던 비밀번호를 차례대로 입력하고 [로그인] 버튼을 누릅니다.

    화면 우측 상단에 Iam_user1@[계정ID/별칭] 형태로 콘솔이 활성화되면 마침내 안전지대 내부로의 진입에 완벽히 성공하신 겁니다!

    마치며: 이제 여러분은 안전한 클라우드 장벽 안으로 들어섰습니다

    오늘 구축한 가상 IAM 사원증은, 앞으로 전개될 여정 중 모든 서버 코딩과 관계형 데이터베이스(RDS) 구축, 이미지 정적 저장소(S3) 관리의 마스터 키패드로 유용하게 활용될 예정입니다.

    루트 계정은 이제 잊으십시오. 스마트폰 Google OTP(MFA)로 이중 바리케이드가 쳐진 채 금고 속에 완전히 잠긴 루트 계정은 일상 개발 환경에서 여러분의 지갑을 침투하려는 해커들의 모든 루트 시도를 차단해 줄 것입니다.

    다음 포스팅에서는 매번 길고 외우기 힘든 숫자 조합의 계정 ID 대신, 내가 직접 도메인 명칭을 가공해 깔끔한 로그인 게이트를 만드는 기법인 '[IAM 로그인 제어] 콘솔 커스텀 로그인 링크 생성 및 IAM 계정 안전 접속 수칙' 편으로 돌아오겠습니다. 오늘도 안전하고 즐거운 클라우딩 라이프 되세요. 감사합니다! 😉

    출처

    • 이현호. 실무 프로젝트로 완성하는 클라우드 환경에서 DB 구축과 웹 개발. 길벗캠퍼스. 2026.04. (1.1장 'AWS 계정과 IAM 사용자 생성', 024-027페이지 참조)
    • 이현호. "01장. 클라우드 사용 환경 구축" 설명 오디오 가이드 스크립트 기반 IAM 및 9대 FullAccess 권한 설계 비하인드 아키텍처 대화록 반영.
    • AWS Identity and Access Management User Guide (https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 및 AWS IAM 보안 최적 실무 지침 가이드.

      자주 묻는 질문 (FAQ)

      Q. 일상적인 개발 실습 시 루트 계정 대신 IAM 사용자를 생성해 사용해야 하는 이유는 무엇인가요?

      A. 루트 계정은 무제한 권한을 가지므로 유출 시 치명적인 보안 사고가 발생할 수 있어, 역할에 맞는 개별 권한만 부여된 IAM 사용자 계정을 사용하여 위험을 분리하고 안전하게 통제하기 위함입니다.

      Q. 백엔드 풀스택 실습 환경에서 IAM 사용자에게 9가지 FullAccess 정책을 직접 연결하는 이유는 무엇인가요?

      A. EC2, RDS, S3, Lambda, DynamoDB 등 다양한 인프라 연동 시 발생하는 세부 권한 부족 오류를 방지하고 아키텍처 실습에 집중하기 위함이며, 상용 환경에서는 최소 권한 원칙(Least Privilege)을 적용해야 합니다.

      Q. IAM 사용자로 AWS Management Console에 접속하려면 어떤 정보가 필요한가요?

      A. 계정 전용 콘솔 로그인 URL(계정 ID 포함), 생성한 IAM 사용자 이름, 그리고 사전에 활성화하여 지정한 사용자 콘솔 비밀번호가 필요합니다.