Spring & Java
IAM 본문

이번 시간은 IAM에 대해서 학습해 보겠습니다.
학습 목표
● IAM 개념
● User / Role / Policy 학습
● 자격증명 원칙


IAM으로 위와 같은 상황을 미연에 방지
● 팀원마다 별도 계정 부여
● 역할별로 권한 분리
● 서버에 필요한 권한만 부여
서버에 권한을 부여한다?


IAM에는 핵심 요소 3가지가 있습니다.
1. User
" 사람" 이 AWS에 접근할 때 사용하는 계정
● 개발자가 AWS 콘솔 (웹사이트)에 로그인할 때
● 관리자가 CLI(명령줄)로 AWS를 관리할 때
● 사람이 직접 AWS를 조작하는 모든 경우
핵심 특징 : 영구적인 자격증명 ( Credential ) 을 가짐
자격증명 ( Credential) ) 이란?
본인임을 증명하는 정보 (비밀번호, 키 등)
● User가 가지는 자격증명 2가지
○ 비밀번호 : AWS 콘솔 (웹사이트) 접근용
- Access Key ID : 아이디 역할
- Secret Access Key : 비밀번호 역할
● 특징
○ 한 번 생성하면 삭제하기 전까지 유효 ( 만료 없음 )
○ 1인 1계정 원칙 권장


2. Role
" 서버/서비스" 에게 권한을 부여할 때 사용
● EC2 서버가 S3에 파일을 업로드할 때
● GitHub Action가 aws에 배포할 때
● 서버/자동화 시스템이 AWS를 사용하는 모든 경우
핵심 특징 : 임시로 빌려 쓰는 권한 세트

3. Policy
" 어떤 작업을 허용/거부 " 할지 정의

Policy 구조 예시
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow", ← 허용? 거부?
"Action": "s3:GetObject", ← 어떤 동작을?
"Resource": "arn:aws:s3:::my-bucket/*" ← 어떤 대상에?
}
]
}
위의 Policy를 해석해보자면,
● "Effect": "Allow" : Allow 이므로 허용 (거부일 경우 Deny)
● "Action": "s3:GetObject" : S3에서 Object를 가져오기
● "Resource": "arn:aws:s3:::my-bucket/*" : S3의 my-bucket/* 대상

너무 복잡하다구요? 한번에 이해할 수 있게 알려드릴게요.


이번 시간에는 IAM과 User / Role / Policy에 대해서 학습 했습니다. 각 역할마다 어떤 기능을 수행하는지 확인하고 그 역할에 따라 어떤 장점과 단점이 있는지, 어떤 흐름으로 이해하는게 맞는 것인지 학습하는 시간이였습니다.
권한이 많을수록 보안에 취약하고 위험하다는 사실을 알게 됐으며, 최소 권한 원칙으로 하고 사용자가 작업을 수행하는데 꼭 필요한 권한만 부여해야 되며, 그 외의 모든 궎한은 거부해야 된다는 원칙을 알게 되었습니다.