IAM
IAM란, Identity And Access Management의 약자이다.
- AWS 계정과 권한을 제어하고 사용자를 관리하는 기능을 제공하는 보안 서비스이다.
- AWS 리소스에 대한 액세스를 안전하게 제어할 수 있다.
- IAM은 글로벌 서비스에 해당한다.
- 처음 계정을 생성하면 루트 사용자가 배치되고 이를 기본으로 사용하게 되지만, 루트 계정은 사용자(계정)을 생성할 때만 사용하고 루트 계정을 직접적으로 사용하게 둬서는 안된다.
그룹, 사용자
- IAM 서비스로 사용자를 생성할 수 있다.
- 여러 사용자들을 그룹으로 묶을 수 있으며, 그룹에 포함되지 않는 사용자도 존재할 수 있다.
- 한명의 사용자는 여러 그룹에 포함 될 수 있다.
- 이렇게 IAM 서비스를 이용해 사용자와 그룹을 생성하는 이유는 사용자, 그룹에 모든 권한을 허용하지 않으면서 보안 문제를 예방하기 위함이다.
- 사용자와 그룹에게는 반드시 필요한 권한만 부여하는 것이다.
IAM 정책
- IAM 글로벌 서비스를 이용해서 사용자와 그룹을 생성할 수 있다.
- 그룹에 속하지 않은 특정 사용자에게는 inline 정책을 부여할 수 있다
- iam 정책 구조
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:GenerateCredentialReport",
"iam:GenerateServiceLastAccessedDetails",
"iam:Get*",
"iam:List*",
"iam:SimulateCustomPolicy",
"iam:SimulatePrincipalPolicy"
],
"Resource": "*"
}
]
}
- Version: 정책 언어 버전
- Statements: 정책 구성 요소의 컨테이너
- Sid(Optional): 선택 설명문 ID를 포함하여 설명문들을 구분한다.
- Effect: 특정 api에 접근하는 것을 허용할 것인지 거부할 것인지를 정할 수 있다.
- Principal(특정 상황에서 필요): 계정, 사용자, 권한 등 어느 정책에 적용할 것인지를 정할 수 있다.
- Action: Effect에 기반하여 허용 및 거부되는 API 호출 목록이다.
- Resource: 적용될 Action의 리소스 목록
- Condition: Statement가 언제 적용될지를 결정하는 조건
MFA
사용자 정보 방어 메커니즘이고 크게 2가지가 있다.
1. 비밀번호 정책 정의
- AWS에서는 다양한 옵션을 이용해 비밀번호 정책 생성 가능
- 비밀번호 최소 길이 설정 가능
- 특정 유형의 글자 사용을 요구할 수 있다
- ex) 대/소문자, 숫자, 물음표와 같은 특수 문자
- IAM 사용자들의 비밀번호 변경을 허용 또는 금지 가능
- 일정 기간이 지나면 비밀번호 만료 시킬 수 있음
- 비밀번호 변경 시 이전 비밀번호를 사용하지 못하게 할 수 있음
2. MFA(Multi Factor Authentication)
- AWS에서는 MFA 메커니즘을 필수적으로 사용하도록 권장
- MFA란, 비밀번호와 보안 장치를 함께 사용하는 것
- 비밀번호가 누출되어도, 휴대전화와 같은 물리적 장치가 필요하기에 계정 침해의 가능성이 낮아짐
- AWS에서의 MFA 장치 옵션
- Virtual MFA device(가상 MFA)
- Authy는 하나의 장치에서 여러개의 토큰을 지원한다.
- 루트 계정, IAM 사용자 또 다른 계정, 그리고 또 다른 IAM 사용자가 지원되는 식
- Universal 2nd Factor Security Key(U2F 보안 키)
- 이는 물리적 장치
- 하나의 키에 여러 루트 계정, IAM 사용자 지원이 가능하기에 1개의 키로 충분하다
AWS 접근 방법
AWS 서비스에 접근할 수 있는 방법은 크게 3가지가 있다.
1. Password + MFA
2. AWS CLI 사용.
- 액세스 키로 보호되며 액세스키, 시크릿 키를 사용하여 터미널에서 aws 서비스에 접근이 가능하다.
3. AWS SDK
- 코드에서 API를 호출할 때 사용하며 코드를 통해 접근할 수 있다.
1. IAM Credentials Report (access-level)
- 자격 증명 보고서 생성 - 계정 수준에서 가능
- 보고서에는 모든 계정의 사용자와 다양한 자격 증명 상태를 포함한다.
- 보안 인증 보고서에는 이 계정의 모든 IAM 사용자와 해당 사용자의 다양한 보안 인증 상태를 확인할 수 있다.
- 보고서가 생성되면 최대 4시간 동안 저장된다.
2. IAM Access Advisor(user-level)
- 액세스 관리자 - 사용자 수준에서 가능
- 사용자에게 부여된 서비스 권한과 해당 서비스에 마지막으로 액세스한 시간이 보인다.
- 사용자의 권한을 파악하여 최소 권한 원칙을 준수할 수 있다.
- 해당 도구를 통해 어떠한 권한이 사용되지 않는지 확인할 수 있다.
- 사용자에서 액세스 관리자로 들어가기에 최근 4시간의 활동내역을 확인해볼 수 있다.
IAM Guidelines & Best Practices
Guidelines
- 루트 계정은 AWS 계정을 설정할 때를 제외하고 사용하지 않기
- 하나의 AWS 사용자는 한 명의 실제 사용자를 의미
- 제 3자에게 계정을 부여할때는 유저 그룹에 할당하고 그룹에 권한을 부여해야한다.
- 강력한 비밀번호 설정을 권장한다.
- MFA(Multi Factor Authentication)을 사용한다면 더욱 계정을 지킬 수 있다.
- AWS 서비스에 권한을 주기 위해서는 역할을 만들고 사용해야 한다.
- 가상 서버인 EC2 인스턴스, Lambda를 포함해서
- CLI or SDK를 사용하기 위해서는 반드시 액세스 키를 만들어야 한다.
- 계정의 권한을 감시하기 위해서는 IAM 자격 증명 보고서와 IAM 액세스 분석기를 사용할 수 있다.
- IAM 액세스키는 절대 공유하는 것이 아니다.
Best Practices
- 실제 사용자마다 Users에 매핑하는 것이다.
- 사용자를 그룹에 두는 것이다.
- 사용자나 그룹에 권한을 부여하는 것이다.
- 역할을 사용한다.
- EC2 인스턴스를 생성하거나 AWS 서비스가 다른 AWS 서비스에 무언가를 하게 하는 어떤 권한을 주려고 할 때 IAM 역할을 만들어야 한다.
- MFA를 이용해 두번째 창지로 사용하고 강력한 비밀번호 정책을 가져야 한다.
- CLI 혹은 SDK를 이용해 AWS를 사용하고자 한다면 반드시 액세스키를 만들어야 한다.