해당 정리는 Udemy Section4:IAM & AWS CLI 강의를 듣고 번역, 정리한 것임
IAM 이란?
- Identity and Access Management
- 루트 계정은 절대 사용 및 공유 해서는 안됨
- 사용자는 조직 내 사람이며 그룹화할 수 있음
- 그룹에는 다른 그룹이 아닌 사용자만 포함됩니다.
- IAM는 Global View 로 보는게 가능, 리전 구분이 따로 없음

IAM:Permissions
- 사용자 또는 그룹에 정책이라는 JSON 문서를 할당할 수 있습니다.
- 권한은 정책에 의해 관리되고 정책은 JSON 으로 작성됨
- 최소 권한 원칙 (Least Privilege Principle): 사용자에게 작업을 수행하는데 필요한 최소한의 권한을 부여하는 것
정책 구조
{
"Version": "2012-10-17", // 이 값은 언제나 같음
"Id": "S3-Account-Permissions",
"Statement": [
{
"Sid": "1", // 식별자
"Effect": "Allow", // [Allow,Deny]
"Principal": {
"AWS": ["arn:aws:iam::123456789012:root"] // 정책이 적용된 계정/사용자/규칙
},
"Action": [ // 어떤 액션에 대한 정책을 줄건지에 대한
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::mybucket/*"] // 액션이 적용될 리소스
}
]
}
Shared Responsibility Model (공유책임모델)
AWS
- 인프라(글로벌 네트워크 보안)
- 구성 및 취약점 분석
- 규정 준수 검증
You
- 사용자, 그룹, 역할, 정책 관리 및 모니터링
- 모든 계정에서 MFA 활성화
- 모든 키를 자주 회전
- IAM 도구를 사용하여 적절한 권한 적용
- 액세스 패턴 분석 및 권한 검토
사용자 & 그룹 보호하기
Password Policy
- 강력한 비밀번호는 계정의 보안과 직결됨
- 강력한 비밀번호 정책 세우기
- 최소 암호길이 설정
- 특정 문자 유형 요구 가능
- 비밀번호 변경 요구 가능
- 재사용 방지 기능
MFA (Multi Factor Authentication)
일반적으로 사용자는 계정에 액세스 할 수 있으며 AWS 계정에서 구성을 변경하거나 리소스를 삭제할 수 있음. 이때 Root 계정 및 IAM User를 보호하려는 경우에 MFA를 이용할 수 있음
❗️ MFA를 이용하면 패스워드를 해커에게 유출당해도 계정은 보호할 수 있다.
MFA 종류
- Virtual MFA device (Google Authenticator, Authy)
- Univaersal 2nd Factor (U2F) - USB와 비슷하게 생겼네..
- Hardware key Fod MFA Device - 이름은 기억안나지만..은행 랜덤 코드 생성해주는 거라 비슷...
IAM Credentials Report (account-level)
계정의 모든 사용자와 다양한 사용자의 상태를 나열하는 보고서
신임장
IAM Access Advisor (user-level)
- Access Advisor는 사용자에게 부여된 서비스 권한을 보여줍니다.
서비스에 마지막으로 액세스했습니다.
- 이 정보를 이용하여 정책을 수정할 수 있습니다.
IAM Guidelines & Best Practices
- AWS 계정 설정을 제외하고, 루트 계정을 사용하지 마라.
- 한명의 실 사용자 = AWS 사용자
- 강력한 패스워드 정책 세우기
- MFA 사용하기
- 프로그래미틱하게 접근할때는 액세스 키를 사용하라 (CLI/SDK)
- 룰을 생성하여 AWS 서비스에 권한을 주어라
- IAM & Access key를 공유하지마라
How can users access AWS ?
AWS에 액세스하려면 다음 세 가지 옵션이 있음.
- AWS Management Console(암호 + MFA로 보호)
- AWS 명령줄 인터페이스(CLI): 액세스 키로 보호
- AWS 소프트웨어 개발자 키트(SDK) - 코드용: 액세스 키로 보호
- 액세스 키는 AWS 콘솔을 통해 생성됩니다.
- 사용자는 자신의 액세스 키를 관리합니다.
- 액세스 키는 암호와 마찬가지로 비밀입니다. 공유금지
- 액세스 키 ID ~= 사용자 이름
- 비밀 액세스 키 ~= 암호
AWS CLI 란?
- 명령줄 셸에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 도구
- AWS 서비스의 공개 API에 직접 액세스
- 리소스를 관리하기 위한 스크립트를 개발할 수 있습니다.
- 오픈 소스 https://github.com/aws/aws-cli
- AWS Management 콘솔 사용의 대안
AWS SDK 란?
- AWS 소프트웨어 개발 키트(AWS SDK)
- 언어별 API(라이브러리 세트)
- 프로그래밍 방식으로 AWS 서비스에 액세스하고 관리할 수 있습니다.
- 애플리케이션에 내장
- 지원
- SDK(JavaScript,Python,PHP,.NET,Ruby,Java,Go,Node.js, C++)
- 모바일 SDK(Android, iOS, ...)
- IoT 장치 SDK(임베디드 C, Arduino, ...)
Summary
- Users: 물리적인 유저, 패스워드로 콘솔에 접근 가능
- Groups: 유저만 포함된
- Policies: 유저나 그룹에 대한 권한을 JSON 문서로 표현한 것
- Roles: Ec2 인스턴스에서 필요한 것
- Security: MFA + 비밀번호 정책
- Access Keys: CLI 나 SDK 사용시 AWS에 접근할때 필요한 것
- Audit: IAM 리포트 & IAM 접근 Advisor
출처