Identity and Access Management의 약자로 AWS service 및 resource에 접근하는 ID를 관리하는 Service이다.
AWS Service는 각 지역(Region)마다 사용할 수 있는 Service가 각기 다른데, IAM의 경우에는 Global Service로 Region에 구분되지 않고 사용 가능하다.
User, Group 개념을 설명하기 앞서 우리가 기본적으로 AWS service를 사용하기 위해 접속하여 로그인을 한다. 이때 보통 사용되는 계정은 Root 계정이다.
혼자 사용하는 경우는 Root Account를 사용하는 것이 편하다. 그러나 다수의 사람들과 협업하는 경우에도 Root Account를 공유하여 접근하는 것은 위험이 있다.
예를 들어 계정을 공유하는 사람들 중 한 사람이 중요한 EC2 Instance를 삭제한다던지 과도한 사용을 하여 요금제 폭탄을 맞는다던지 하는 상황이 발생할 수도 있다.
그렇기 때문에 Root Account를 공유하는 것이 아닌 각자 계정을 만들어 사용 권한을 부여하는 것이 적절하다. 여기서 나오는 개념이 user와 group이다.
정리하자면
User는 사용 정책이 없거나/하나 혹은 여러 개의 정책을 소유할 수 있고, 여러 group에 속할 수 있다.
그리고 group은 여러 user를 포함하고, group에 정책을 부여하면 group안에 속한 user들은 일괄적으로 정책을 부여받을 수 있다.
앞서 설명한 사용 정책은 권한(Permission)이며 권한은 JSON 구조로 작성되고 이를 통해 user, group의 권한을 정의할 수 있다. 예시로 IAMReadOnlyAccess 정책의 내용을 보면 JSON 구조로 선언되있음을 확인할 수 있다.

일반적인 Policy Json 구조는 다음과 같다
{
"Version":, // 정책 언어 버전
"Id":, // 정책을 식별하는 ID(선택사항)
"Statement":[ // 하나 혹은 여러 option이 입력됨(필수사항)
{
"Sid":, // Statement를 구별하는 id(선택사항)
"Effect":, // Action에서 정의한 내용을 Allow(허용)할 것인지 Deny(거부)할 것인지 정의(Allow, Deny)
"Principal":, // 정책이 적용될 account(계정)/user(사용자)/Role(역할)
"Action":[], // Allow or Deny될 API 목록
"Resource":, // Action이 적용될 Resource 목록
"Condition": // Statement가 적용될 시점 조건(선택사항)
}
}
AWS IAM안의 여러 정책들을 보면 제시한 json구조로 이루어져 있다. 각 블록이 어떤 것을 의미하는지 알고 정책 내용을 보면 어떤 목적의 정책인지 이해할 수 있다.
Root Account 및 각 Account들은 비밀번호를 어렵게 구성하면서 계정 자체에 대한 보안을 신경쓸 수 있다. 그 외에 신뢰할 수 있는 외부 device에서 보안 키를 받아 비밀번호 이외에 추가적인 인증절차를 통해 로그인을 하는 것을 MFA라고 한다.
Google Authenticator, Authy등 여러 MFA Application이 있다. 이를 통해 AWS Account의 MFA 인증 절차를 추가할 수 있다.
추가적으로 다른 3rd party를 이용하여 MFA를 설정할 수 있다. Hardware Key Fob MFA Device for AWS GovCloud (US)와 같은 것을 말한다.