AWS Certified Solutions Architect Associate - C03을 준비하며 작성한 글입니다.
01. IAM 소개: 사용자, 그룹, 정책
IAM: 사용자 & 그룹
- IAM = Identity and Access management
- 사용자를 생성하고 그룹에 배치 → Global Service
- 루트 계정(Root Account): 기본 생성, 계정을 생성할 때만 사용되어야 합니다. → 대신 사용자를 생성해야 합니다.
- 루트 계정은 계정에 대한 모든 권한을 가지고 있기 때문에, 보안 상의 이유로 별도의 관리자 계정(User)을 만드는 것이 좋습니다.
- 사용자(Users): 조직 내의 한 사람에 해당하며 그룹으로 묶을 수도 있습니다.
- 그룹(Groups): 사용자만 배치할 수 있으며, 다른 그룹을 포함시킬 수 없습니다.
- 그룹에 포함되지 않은 사용자도 있을 수 있습니다.
- 한 사용자가 여러 그룹에 속할 수 있습니다.
💡 사용자와 그룹을 생성하는 이유는 뭘까요?
이들이 AWS 계정을 사용하도록 허용하기 위함입니다. 그리고 허용을 위해서는 이들에게 권한을 부여해야 합니다.
IAM: 권한
사용자 또는 그룹에게 IAM 정책이라고 불리는 JSON 문서를 지정할 수 있습니다.
- 특정 사용자, 혹은 특정 그룹에 속한 모든 사용자들이 어떤 작업에 권한을 가지고 있는지를 설명해 놓은 문서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": "elasticloadbalancing:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:ListMetrics", "cloudwatch:GetMetricStatistics", "cloudwatch:Describe*" ], "Resource": "*" }, ] }
이 정책들을 사용해 사용자들의 권한을 정의할 수 있게 됩니다.
AWS에서는 모든 사용자에게 모든 것을 허용하지 않습니다. → 최소 권한의 원칙을 적용
- 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것
02. IAM 정책
IAM 정책 상속
- 그룹 레벨 정책: 그룹의 모든 구성원에게 적용, 구성원 모두 권한을 얻으며 정책 상속 가능
- 인라인 정책: 그룹에 소속 여부와 관계없이 원하는 사용자에게 적용 가능
- 여러 그룹에 속한 경우, 여러 정책을 함께 적용받을 수도 있습니다.
IAM 정책의 구조
- Version: 보통은 “2012-10-17”로 정책 언어 버전입니다.
- Id: 정책을 식별하는 ID (선택)
- Statement: 1개 이상으로 구성 (필수)
- Sid: Statement ID, Statement의 식별자 (선택)
- Effect: Statement의 특정 API 접근 허용 여부, [Allow || Deny]
- Principal: 특정 정책이 적용될 사용자, 계정 또는 역할(Roles)
- Action: Effect에 기반해서 허용 및 거부되는 API 호출의 목록
- Resource: 적용될 Action의 리소스 목록
- Condition: Statement가 언제 적용될지 결정 (선택)
|
|
03. IAM MFA
IAM - 비밀번호 정책
- 강력한 비밀번호 = 철저한 계정 보안
- AWS의 비밀번호 정책
- 최소 길이
- 특수 문자형(specific character types) 요구
- 영문 대소문자
- 숫자
- 특수문자(non-alphanumeric)
- 사용자 비밀번호 변경 허용 / 금지 설정
- 비밀번호 만료 기간 → 재설정 요구 (password expiration)
- 비밀번호 재사용 방지
Multi Factor Authentication - MFA
- AWS 필수 권장사항
- MFA = 비밀번호 + 보안 장치
- 비밀번호가 노출된 상황에서도 관리자 소유의 물리적 장치가 추가로 필요하기 때문에 계정이 침해당하지 않습니다.
- AWS의 MFA 장치 옵션
- 가상 MFA 장치(Virtual MFA Device): Google Authenticator(phone only), Authy(multi-device) 등
- 보안 키(U2F, Universal 2nd Factor Security Key): USB 형태의 물리적 장치(FIDO)
- 하드웨어 키 팝 MFA 장치(Hardware Key Fob MFA Device): 일회용 비밀번호 생성기(TOTP)
04. AWS 액세스 키 , CLI 및 SDK
AWS 접근
- AWS 접근 방법
- AWS Management Console: 비밀번호 + MFA
- AWS Command Line Interface(CLI): Access Keys
- AWS Software Developer Kit(SDK): Access Keys
- 액세스 키는 관리 콘솔을 사용해서 생성할 수 있으며, 사용자들이 직접 관리합니다.
- 액세스 키는 비밀번호와 마찬가지로, 공유하면 안됩니다.
- Access Key ID: AKIASK4E37PV4983d6C (예시)
- Secret Access Key: AZPN3zojWozWCndlijhB0Unh8239albzbzO5fqqkZq (예시)
AWS CLI
- 명령줄 Shell에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 해주는 도구
- CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스할 수 있습니다.
- CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있습니다.
- https://github.com/aws/aws-cli
AWS SDK
- 소프트웨어 개발 키트
- 라이브러리 집합 → 프로그래밍 언어에 따라 개별 SDK 존재
- AWS 서비스나 API에 프로그래밍을 위한 액세스가 가능하도록 해줍니다.
- 코딩으로 애플리케이션 내에 작성
- 프로그래밍 언어, 모바일 SDK, IoT 장치 SDK 등 지원
AWS CLI 설치: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
❗ 보안 자격 증명 생성에 루트 계정을 사용하지 마세요.
05. AWS 클라우드쉘
- CloudShell은 특정 리전에서만 사용이 가능합니다.
- CloudShell은 전체 저장소를 갖고 있습니다.
- 파일을 업로드, 다운로드할 수 있는 옵션이 있습니다. (CloudShell → Actions)
06. AWS 서비스에 대한 IAM Role (Service Role)
- AWS 서비스는 사용자를 대신하여 다른 서비스의 리소스로 액세스할 수 있어야 합니다.
- 이를 위해서는 AWS 서비스에 권한을 부여해야 합니다. → IAM Roles
- EC2 Instance Roles
- Lambda Function Roles
- Roles for CloudFormation
07. IAM 보안 도구
- IAM 자격 증명 보고서(IAM Credential Report, 계정 수준): 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함
- IAM 액세스 관리자(IAM Access Advisor, 사용자 수준): 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 포함
- 최소 권한의 법칙: 위의 도구들을 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고 따라서 사용자의 권한을 줄여 원칙을 지킬 수 있습니다.
08. IAM 모범 사례
IAM 가이드라인
- 루트 계정은 AWS 계정을 설정할 때를 제외하고는 사용하면 안됩니다.
- 새로운 사람이 AWS를 이용하고자 한다면 사용자를 추가해야 합니다.
- 1 AWS 사용자 = 1 실제 사용자
- 사용자를 그룹에 넣어 해당 그룹에 권한을 부여하면 그룹 수준에서 보안을 관리할 수 있습니다.
- 비밀번호 정책은 강력하게 설정해야 합니다.
- MFA를 사용할 수 있다면 계정을 안전하게 보호할 수 있습니다.
- AWS 서비스에 권한을 부여할 때마다 역할을 추가해야 합니다.
- AWS를 프로그래밍 할 경우(CLI 또는 SDK를 사용하는 경우) Access Key를 생성해야 합니다.
- 계정의 권한을 감사할 때는 IAM 자격 증명 보고서와 IAM 액세스 관리자를 사용할 수 있습니다.
- 절대로 IAM 사용자와 액세스 키를 공유하지 마세요.
09. IAM 요약
- Users: 회사 내 실제 사용자와 IAM 사용자가 매핑됩니다.
- Groups: 그룹은 사용자만 포함할 수 있습니다.
- Policies: 사용자나 그룹에 권한을 부여합니다. IAM 정책은 JSON 문서로, 사용자나 그룹이 할 수 있는 권한을 알려주는 문서입니다.
- Roles: AWS 서비스가 다른 AWS 서비스에 무언가를 하게 하는 권한을 주려고 할 때, IAM 역할을 만들어야 합니다.
- Security: MFA + 강력한 비밀번호 정책
- Access Keys: CLI 또는 SDK를 이용하여 AWS에 접근한다면 반드시 액세스 키를 만들어야 합니다.
- Audit: IAM 자격 증명 보고서 & IAM 액세스 관리자