[AWS] IAM
2023. 6. 18. 00:27ㆍDevops/AWS
IAM란?
- Identity and Access Management의 약자
- User를 생성하고 Group에 배치하기 때문에 글로벌 서비스에 해당됨
- 계정 생성 시 기본적으로 Root User가 생성됨
- Root User는 계정 생성 후로는 절대 사용하거나 공유해서는 안 됨
- 대신 User를 생성하여 사용
User
- 조직 내 한 사람에 해당하는 개념
- Group에 포함될 수도 있고 안 될 수도 있음
Group
- User들을 그룹화해놓은 개념
- developers, operations 등의 Group에 User들을 배정 가능
- User는 여러 Group에 속할 수 있음
- 배정되지 않는 User들은 Inline Policy 방식으로 직접 권한 지정 가능
- 권장되는 방법은 아님
- Group을 활용한 Managed Policy 방식을 활용하는 것이 권장됨
IAM 정책
- 관련자들이 AWS 계정을 사용하도록 허용하기 위한 권한 부여 절차
- JSON 문서로 작성됨
{
"Version": "2012-10-17",
"Id": "S3-Account-Permissions",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::123456789012:root"]
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::mybucket/*"]
}
]
}
- Version: 정책 언어 버전. 보통 2012-10-17
- Id(optional): 정책을 식별자.
- Statement(required): 정책 구성 요소
- Sid(optional): 해당 statement 식별자
- Effect: 해당 statement가 특정 API에 대한 접근을 허용할지 거부할지를 나타내는 값
- Allow, Deny
- Principal: 해당 정책이 적용될 User, Account, 또는 Role로 구성
- 위 예제에선 루트 계정에 적용
- Action: Effect에 기반해 허용 및 거부되는 API 목록
- Resource: 적용될 Action의 리소스 목록
- Condition(optional): statement가 언제 적용될지를 결정하는 요소
- User 또는 Group에게 권한을 부여할 수 있음
- 정책을 통해 관련자들이 불필요한 서비스를 사용하여 불필요한 비용을 발생시키거나 보안 문제를 야기하는 등의 문제를 예방
- AWS에서는 최소 권한의 원칙을 적용
- 사용자가 필요로 하는 권한 외에는 허용하지 않는 것
Password Policy
- 사용자 생성 시 비밀번호 정책 설정
옵션
- 최소한 대문자 한 글자 이상
- 최소한 소문자 한 글자 이상
- 숫자 포함
- 특수문자 포함
- 비밀번호 변경 허용 또는 금지
- 일정 기간 후 비밀번호 만료 후 재설정 요구
- 변경 시 이전 비밀번호로 설정 불가
MFA
- Multi-Factor Authentication
- 비밀번호 외에 물리적 보안 장치를 함께 사용하는 보안 방식
- AWS에서는 이 메커니즘을 필수적으로 사용하도록 권장
- 비밀번호가 노출되더라도 물리적 장치로 한 번 더 인증하기 때문에 훨씬 안전
방법
1. Virtual MFA device
- 스마트폰에 인증 애플리케이션을 설치하여 활용하는 방법
- TOTP(시간 기반 일회용 암호) 알고리즘에 따라 6자리 숫자 코드를 생성하는 인증 애플리케이션을 활용
- 하드웨어 방식보다 약함
- Google Authentication, Authy 등
2. Universal 2nd Factor (U2F) Security Key
- 하나의 보안 키에서 여러 루트 계정과 IAM 사용자를 지원
- 공개 키 암호 방식 기반
- AWS가 아닌 다른 회사에서 제작하는 장치
- ex) Yubico 사의 YubiKey
3. Hardware Key Fob MFA device
- TOTP(시간 기반 일회용 암호) 알고리즘에 따라 6자리 숫자 코드를 생성하는 하드웨어 디바이스를 활용하는 방법
- AWS가 아닌 다른 회사에서 제작하는 장치
- ex) Gemalto
- 미국 정부 클라우드인 AWS GovCloud 사용 시 SurePassID 라는 키 팝 사용
CLI
- AWS 콘솔에 접근하지 않고 명령창에서 사용하는 방법
- CLI를 활용하여 스크립트를 개발하면 업무 자동화 가능
- CLI 프로그램을 다운받고 Access Key와 Access Secret을 발급받아 사용 가능
Role
- AWS 서비스에 권한을 부여하는 것
- User에게 적용되는 것이 아닌 AWS 서비스에 적용되는 것
- 예를 들어 EC2 인스턴스를 만들었는데 이 인스턴스에서 AWS에 접근하여 어떤 행동을 하고 싶을 때 Role을 활용하여 접근 여부를 판단
일반적인 roles
- EC2 Instasnce Roles
- Lambda Function Roles
- Roles for CloudFormation
보안 도구
IAM Credentials Report(acount-level)
- 계정에 있는 사용자와 다양한 자격 증명 상태를 보고서 형태로 제공
IAM Access Advisor
- 사용자에게 부여된 서비스 권한 확인 가능
- 해당 서비스에 마지막으로 접근한 시간 확인 가능
- 해당 도구들을 활용하여 어떤 권한이 사용되지 않는지 볼 수 있고 사용자 권한을 줄여 최소 권한의 원칙을 지킬 수 있다.