Users & Groups (사용자 및 그룹)
Root User
- AWS 계정을 생성하면 Root계정이 만들어짐
- 모든 권한을 가진 계정으로 다른 누구와도 공유하면 안됨
IAM User
- AWS 계정 내에서 특정 권한을 가진 개인이나 하나의 프로그램을 구분하는 ID(identity)
- 이름과 장기적으로 사용 가능한 자격 증명(credential)으로 구성되어 있음
- IAM User 생성 시, console과 프로그래밍 방식(CLI, API)으로의 접근에 대한 권한을 부여
구분 방법
- 구성되어 있는 이름(name) → AWS Management Console에서 확인 가능
- IAM User의 ARN(Amazon Resoruce Name) → 고유의 이름으로 AWS 전역에 사용
- IAM User의 고유식별자를 사용 → API를 사용할 때에만 사용
자격증명
- Console 비밀번호 → AWS Management Console에서 사용
- Access Key → 프로그래밍을 통한 AWS 접속에 사용
- SSH Key → CodeCommit에서 인증할 때 사용
- 서버 인증서 → SSL/TLS
- MFA(Multi-factor Authentication)로 보안 강화
IAM Group
- IAM User들의 집합체
- 그룹에 권한을 부여하면 해당 그룹에 속한 IAM User들에게도 권한 부여
IAM Users in IAM Group
- 하나의 IAM User는 0개 이상의 그룹에 속할 수 있음
- 그룹은 다른 그룹에 속할 수 없음
Role (역할)
- IAM Role은 IAM User와 비슷하게 AWS 계정 내에서 특정 권한을 가진 ID (identity)
- 다만 IAM User는 고유의 ID이지만, 역할의 경우 필요한 모든 이에게 해당 역할을 부여할 수있음
- 암호, 액세스 키 등 장기적으로 사용되는 자격 증명(credential)이 없이 단기간 임시적으로 부여 (Role Session)
- Application, Service, 다른 계정의 User 등에 부여 가능

역할 생성 이미지

역할 부여 이미지
Policy (정책)
- 정책 생성 후 IAM ID (user, group, role)이나 AWS 리소스에 부여하면서 AWS 엑세스를 관리
- 정책은 권한을 정의하는 AWS의 객체로 IAM 보안 주체(user, role)이 요청할 때에 판단
- 대부분의 정책은 요청의 허용과 거부 여부를 결정
- JSON 문서로 AWS에 저장
- 허용된 권한은 어떤 방식으로 접근해도 허용 (Console, CLI, API 등 모두 허용)
Policy Type
Identity-based policies (자격 증명 기반 정책)
- IAM ID (user, group of users, roles) 관한 권한 설정
- Managed Policies
- AWS managed policies → AWS에 의해 만들어지고 관리되고 있는 정책
- Customer managed policies → 계정 관리자가 만들어서 좀 더 커스텀이 가능한 정책
- AWS managed policy를 더 우선적으로 적용
- Inline Policies
- ID에 직접적으로 권한을 부여
- ID 삭제 시, 같이 삭제
Resource-based policies (리소스 기반 정책)
- AWS S3, Lambda와 같은 Resource에 권한을 부여
- 어떤 조건에 어떤 Action이 허가되는지에 대한 권한을 설정
- Managed Policy가 없음 → 직접적으로
Permission boundaries (권한 경계)
- Identity-based Policy의 최대 권한을 설정
Organizations SCPs (조직 SCP)
- 기업이 소유한 AWS 계정을 그룹화 → 중앙 관리
- 조직 or 조직 단위에 최대 권한을 지정하는 Json 정책
- 해당 방식은 Root 사용자 또한 엔티티에 대한 권한을 제한 가능
Access control lists (ACLs, 액세스 제어 목록)
- 비 Json 정책
- 다른 계정의 보안 주체를 제어하는 서비스 정책 → 다른 계정이 본인 계정의 resource에 액세스 하는 권한을 관리
Session policies (세션 정책)
- 역할, 연동 사용자를 위한 임시 세션을 만들어서 매개변수로 넘겨주는 고급 정책
JSON Policy
예시
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FirstStatement",
"Effect": "Allow",
"Action": [
"iam:ChangePassword"
],
"Resource": "*" // 모든 리소스를 의미, but 요청한 사용자의 암호에만 영향
},
{
"Sid": "SecondStatement",
"Effect": "Deny",
"Principal": {
"AWS": [
"arn:aws:iam::account-id:root"
]
},
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::confinential-data",
"arn:aws:s3::confidential-data/*"
],
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true" // MFA인증된 경우에만
}
}
}
]
}
Version
- 정책 언어의 버전
- 가장 최근 버전인 2012-10-17을 사용
Statement
- JSON 정책의 메인 요소로 해당 요소 아래 세부 요소로 정책을 정의한다
- 하나의 JSON 정책에 다수의 Statement를 작성 가능 → 리스트 안에 표현
Sid
- 선택적 요소
- 각 Statement를 구별하는 ID를 부여
Effect
- 액세스 허용에 대한 여부
- 허용(Allow) 및 거부(Deny)
Principal
- 일부 상황에서만 작성
- Resource-based Policy(리소스 기반 정책)을 만들 때에만 필수적으로 작성
- 어떤 계정, user, role, 연동 사용자에게 권한을 부여할 지에 대한 정보
Action
Resource
- 일부 상황에서만 작성
- 작업이 적용되는 리소스 목록
- IAM 권한 정책을 생성할 때 작업이 정용되는 리소스 목록을 지정 필요
- Resource-based Policy(리소스 기반 정책)을 만들 때에는 선택적
- 미작성 → 해당 작업이 적용되는 리소스가 정책이 연결된 리소스로 자동으로 할당
Condition
정책 생성 및 권한 부여 시 가장 중요한 점
- IAM User가 필요한 가장 최소한의 권한만 부여!