IAM
IAM 사용자 및 그룹
- IAM은 Identity and Access Management의 준말로 Global 서비스이다. 즉, 어떤 리전에 종속되지 않는다.
- Root 사용자는 계정 생성 시 자동으로 만들어지는 계정으로, 가급적이면 사용하거나 공유하지 않아야 한다.
- 권장하지는 않지만 User는 Group이 없을 수 있다.
- Group 안에 Group은 불가능하고, 오직 User만 참여할 수 있다.
- 하나의 User는 여러 Group에 소속될 수 있다.
- 즉 관리자가 원하는대로 사용자 및 그룹 단위로 분리할 수 있고, 이를 기준으로 권한 제어를 할 수 있다. 이를 통해 보안이나 비용 발생 문제를 해결할 수 있다.
- AWS에서는 최소 권한의 원칙을 적용해 사용자가 반드시 필요한 이상의 권한을 주지 않는다.
IAM 정책
- 정책에는 두 가지 종류가 있다. Group 정책, Inline 정책이다.
- Group 정책은 Group 전체 구성원이 적용받는 정책이다.
- Inline 정책은 사용자를 기준으로 적용받는 정책이다.
- IAM 정책은 JSON 구조로 되어있다.
{
"Version": "2012-10-17", // Version은 해당 권한이 생성된 최근 업데이트된 일자를 말한다.
"Statement": [ // Statement 아래의 속성들(Effect, Action, Resource)을 기준으로 정책의 내용이 결정된다.
{
"Effect": "Allow", // 해당 정책을 허용/거부할지 선택하는 속성이다.
"Action": [ // 해당 정책에서 어떤 API들이 영향을 받을지 결정한다.
"iam:GenerateCredentialReport",
"iam:GenerateServiceLastAccessedDetails",
"iam:Get*", // '*' 기호를 사용할 수 있다.
"iam:List*",
"iam:SimulateCustomPolicy",
"iam:SimulatePrincipalPolicy"
],
"Resource": "*" // 해당 정책이 적용될 리소스를 결정한다.
}
]
}
- IAM 정책은 커스터마이징이 가능하다. JSON 작성이 어려운 경우, AWS Web Console의 GUI 환경에서 생성할 수 있다.
IAM Password 정책과 MFA
- IAM의 Password 정책은 최소 비밀번호 길이 설정, 특정 문자 유형 요구(대문자, 소문자, 숫자,특수문자 혼합), 패스워드 만료일자 제한, 중복된 패스워드 재사용 금지 등의 정책을 사용할 수 있다. -> 이러한 비밀번호 정책은 브루트포스 공격을 효과적으로 방어할 수 있다.
- MFA 개념도 도입돼 있다. MFA 란 내가 알고 있는 패스워드와 내가 소유한 장치를 혼합한 인증 방식이다. 패스워드가 탈취되더라도 소유한 장치가 없으면 접근이 불가능한 점을 이용한 것이다. 예로 우리의 스마트폰에서 로그인 시 유튜브 앱을 실행해 인증하라는 방식이 있다.
- AWS에서의 MFA 디바이스 옵션 중 Authenticator App, Security Key, Hardware TOTP token 택일하면 된다.
- Virtual MFA Device(Authenticator App)는 Google Authenticator, Authy 앱 같은 가상의 앱에서 토큰을 생성해 주는 것을 말한다.
- Securtiy Key는 Universal 2Nd Factor (U2F) Security Key를 사용한다.
- Hardware TOTP token은 Hardware Key Fob MFA Device, Hardware Key Fob MFA Device for AWS GovClod (US) 등을 사용한다.
*전혀 암기할 필요 없고, "여러 선택지가 있구나~" 하고 넘어가자. 어차피 비즈니스 요구사항에 따라 사용되는 MFA 도구도 분명 다를 것이다.
* 참고로 MFA는 최대 8개의 타입을 등록할 수 있다.
IAM Role
- IAM Role은 사용자와 같지만 실제 사람이 사용하도록 만들어진 것이 아니라 AWS 서비스에 의해 사용되도록 만들어졌다.
예시) EC2 인스턴스가 AWS API와 상호작용할 수 있도록 권한이 필요할 때 AWS IAM Role이 사용된다.
IAM Security Tools
- IAM Credentials Report (Account Level) : IAM 자격 증명 보고서를 만들어 Account 내의 사용자와 다양한 자격 증명 상태를 확인할 수 있다. 이를 통해 보안 정책을 준수하고 있지 않은 사용자를 확인할 수 있다. 예로 MFA 미설정 직원을 찾아야 할 때 사용하기 적합하다.
- IAM Access Advisor (User-Level) : IAM 액세스 관리자로, 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 확인할 수 있다. 이를 통해 사용자의 사용 패턴을 확인할 수 있고 불필요한 권한을 제거하여 최소 권한의 원칙을 지킬 수 있다.
AWS CLI
AWS 접근 방식의 종류 3가지
- AWS 웹 콘솔
- AWS CLI : Access Key에 의해 보호된다.
- AWS SDK : 애플리케이션 내에서 코드를 호출할 때 사용한다.
AWS Access Key
- Access Key ID = Username / Access Key = Password 수준으로 이해하면 된다.
*Access Key는 절대 공유를 금지한다.
AWS CLI 이점
- AWS CLI를 통해 AWS 서비스들과 상호 작용할 수 있다. 즉, AWS 서비스의 공용 API를 직접 액세스하는 것이다.
- 각종 작업들을 자동화할 수 있다. 숙련된 AWS 사용자는 AWS CLI만 사용하는 경우도 있다.
AWS SDK와 CLI의 차이점
- AWS CLI는 터미널에서 상호 작용하는 반면 SDK는 서비스 내에서 구현 언어에 맞게 AWS API에 접근할 수 있게 해주는 것이다.
AWS CLI 대신 Cloud Shell 사용하기
- AWS는 AWS CLI 대신 Cloud Shell 보안상의 이유로 사용 권고한다. 그러나 Cloud Shell은 사용할 수 있는 Region이 정해져 있다.
AWS IAM Guidelines & Best Practices
요약
- AWS Account Setup 외에는 Root 계정을 사용하지 않아야 한다.
- 1명의 AWS 사용자는 한 명의 직원과 동일하다. 한 명의 직원에게 여러 사용자를 부여해서는 안 된다.
- 보안 수준을 그룹 레벨로 유지해야 한다.
- 강력한 패스워드 정책을 사용해야 한다.
- MFA 인증을 사용해야 한다.
- AWS 서비스에 권한 부여 시 AWS Role를 사용해야 한다.
- Access Key는 AWS CLI나 SDK를 사용할 때 필요하며 절대 타인과 공유해서는 안 된다.
- 계정 권한이나 사용자가 주로 사용하는 서비스 등을 확인할 때는 Account Level은 IAM Credentials Report을 User Level은 IAM Access Adviso를 사용하면 된다.
AWS IAM Summary
요약
- Users: IAM 사용자는 실제 물리적 사용자와 매핑되어야 한다.
- Groups: 사용자를 그룹화해 그룹 레벨로 관리하는 것이 좋고, 오직 사용자만 그룹에 포함될 수 있다.
- Polices: 그룹이나 사용자에 대한 권한 정책은 JSON으로 관리할 수 있다.
- Roles: EC2 인스턴스나 AWS 서비스를 위한 정책의 개념이다.
- Security: MFA + Password Policy를 적극 사용해야 한다.
- AWS CLI : CLI로 각종 AWS 서비스를 접근할 수 있다.
- AWS SDK : 프로그래밍 언어를 활용해 서비스 내에서 각종 AWS 서비스를 접근할 수 있다.
- Access Keys :CLI 또는 SDK를 사용하기 위해 Access Key가 필요하며 타인과 공유를 절대 금한다.
- Audit : IAM Credential Reports나 IAM Access Advisior를 통해 계정이나 사용자의 현황에 대해서 확인할 수 있다.
오답노트
- 해당 섹션 문제 풀이 결과 8/9
- AWS IAM Policy 내 Statement의 구성 요소는 Sid(시드), Effect(효과), Principal(원칙), Action(조치), Resource(리소스), Condition(조건)으로 구성된다.
- Version은 IAM Policy 자체의 일부이고, Statement의 일부가 아니다.
'Dev > AWS' 카테고리의 다른 글
[AWS TechCamp] 기초부터 배우는 AWS 핵심 서비스로 웹 애플리케이션 구축하기 후기 및 요약 (1) | 2024.09.03 |
---|---|
[AWS-SAA] 00. AWS 글로벌 인프라 구조 (압축 요약) (0) | 2024.08.29 |
AWS 한 번에 초기화 할 때 aws-nuke를 사용하자 (0) | 2024.05.28 |
AWS 프리티어 과금 안 되도록 사용하는 방법, 요약 (0) | 2024.05.21 |