AWS IAM
IAM은 사람과 AWS 서비스가 어떤 리소스에 어떤 방식으로 접근할 수 있는지 정하는 권한 계층입니다. 사용자, 역할, 정책을 묶어 콘솔·CLI·서비스 호출의 허용 범위를 통제합니다.
▶아키텍처 다이어그램
🔗 관계 다이어그램점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다
팀원이 늘고 자동화도 붙는데 같은 액세스 키를 여러 곳에서 돌려 쓰면, 사고가 나도 누가 어떤 권한으로 무엇을 했는지 추적하기 어렵습니다. 서비스마다 필요한 권한만 좁혀 주지 못하면 작은 스크립트 하나가 계정 전체 위험으로 번집니다.
초기에는 루트 계정이나 고정 키를 여러 곳에서 함께 쓰는 관행이 많았지만, 이런 방식은 사고가 나면 추적과 회수가 어렵습니다. 그래서 역할 기반 접근 제어와 임시 자격증명을 중심으로 한 IAM이 기본 보안 모델이 됐습니다.
IAM은 사용자, 그룹, 역할, 정책을 분리해두는 방식으로 최소 권한 원칙을 구현합니다. 사람은 사용자 계정을 통해 콘솔과 CLI에 접근하고, 공통 권한은 그룹으로 묶어 사용자에 붙입니다. 서비스는 사람 계정 대신 역할을 맡아 임시 자격증명으로 필요한 리소스에만 접근합니다. 이 구조 덕분에 Lambda 함수는 S3 읽기 권한만 있는 역할을 부여받고 그 이상은 시도조차 할 수 없게 됩니다. 정책은 JSON으로 어떤 서비스의 어떤 작업을 어떤 리소스에 허용할지 명시하므로, 필요한 범위 이상을 열어줬는지 코드처럼 검토하고 관리할 수 있습니다. 이 분리 구조가 없으면 공유 키 하나가 유출될 때 계정 전체가 노출되지만, 역할과 최소 정책이 조합되면 사고 범위가 그 역할에 허용된 작업으로만 제한됩니다.
IAM과 Cognito는 둘 다 인증처럼 보이지만 대상이 다릅니다. IAM은 AWS 계정 안의 사람과 서비스 권한을 다루고, Cognito는 애플리케이션 최종 사용자의 로그인과 토큰 발급을 다룹니다. 콘솔·CLI·서비스 역할 권한이 문제면 IAM을 보고, 앱 사용자 가입과 로그인 흐름이 문제면 Cognito를 보면 됩니다.
Cognito
사용자 인증 및 권한 부여
둘 다 인증처럼 보이지만 IAM은 AWS 내부 사용자와 서비스 권한을 다루고, Cognito는 애플리케이션 최종 사용자의 로그인과 토큰을 다룹니다.
VPC
가상 네트워크 격리
둘 다 보안에 쓰이지만, IAM은 누가 어떤 AWS 작업을 할 수 있는지 통제하고 VPC는 리소스가 어떤 네트워크 경계 안에서 통신할지 통제합니다.
KMS
암호화 키 관리
둘 다 보안 서비스지만, IAM은 누가 어떤 리소스에 접근할 수 있는지 정하고 KMS는 그 데이터를 어떤 키로 암호화할지 정합니다.
WAF
웹 애플리케이션 방화벽
둘 다 보안 서비스지만, IAM은 자격증명 기반으로 AWS 리소스 접근을 통제하고 WAF는 공개 엔드포인트로 들어오는 HTTP 요청 자체를 필터링합니다.
팀 권한 분리, 서비스 간 호출, 배포 파이프라인 권한, 리소스별 최소 권한 설계, 멀티계정 AWS 접근 통제에 적합합니다. 최종 사용자 로그인 흐름을 직접 제공하거나 데이터 암호화 키 자체를 관리하는 계층은 아닙니다.