EnJinnier

[SAA-C03] Part1: IAM 본문

자격증/AWS

[SAA-C03] Part1: IAM

공학도진니 2024. 9. 12. 00:01

**본 글은 udemy의 AWS Certified Solutions Architect Associate by Stephane Maarek의 강의를 참고하여 개인 공부 목적으로 작성하였으며 어떠한 수익 창출의 의도도 없음을 밝힙니다.**

Section 3: AWS 클라우드 개요 - Regions & Availability Zone(AZ)

Regions

- 다양한 데이터센터들의 집합 (a cluster of data centers) (오하이오, 싱가폴, 도쿄, ...)

- 대부분의 서비스들은 특정 리전에 연결되어 국한됨(region-scoped)

 

How to choose an AWS Region? 

AWS 리전 선택에 영향을 미치는 요인들 

- Compliance(법률 준수) : 국가마다 법률이 다름(프랑스의 데이터는 프랑스에 보관해야함)

- Proximity(지연 시간) : 미국 유저가 많으면 당연히 미국에 설치하는게 좋음

- Available services : 데이터센터가 없는 지역(국가)도 존재

- Pricing : 리전마다 요금이 달라짐

 

Availability Zones(가용 영역)

- 각 리전마다 가용영역(3~6개, usually 3)을 가지고 있음(재난에 대비하기 위해 분산)

- 각각의 가용 영역은 여분의 전원 네트워킹, 통신 기능을 갖춘 1-2개의 개별적인 데이터 센터로 이루어짐.

 

Section 4: IAM 및 AWS CLI

IAM

- Identity and Access Management

- 사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스(-> 리전선택x, IAM에서 사용자를 생성하면 어디에서나 사용가능)에 해당함

- Root account -> 오직 계정을 생성할때만 사용되고 더이상 사용,공유하면 안됨(대신에 사용자를 생성)

- 하나의 사용자는 조직 내의 한 사람에 해당, 필요하면 사용자들을 그룹으로 묶을 수 있음

- 그룹에는 사용자만 배치할 수 있으며 다른 그룹을 포함시킬 수 없음.

- 한 사용자가 어느 그룹에도 속하지 않거나 다수의 그룹에 속할 수도 있음

 

사용자와 그룹을 생성하는 이유 : 이들이 AWS계정을 사용하도록 허용하기 위함.

이를 위해 사용자 또는 그룹에게 정책, 또는 IAM 정책이라고 불리는 JSON 문서를 지정할 수 있음.

(특정 사용자, 혹은 특정 그룹에 속한 모든 사용자들이 어떤 작업에 권한을 가지고 있는지를 설명해 놓은 것)

json 문서 형식

최소 권한의 원칙(least privilege principle) : 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않음(비용 문제, 보안 문제 야기 가능성)

 

사용자 및 그룹 실습

1. 콘솔에서 IAM 검색 및 선택후 사용자 생성. 

이때 IAM 사용자를 생성하고 싶음에 체크해야함 (시험에 영향 ㅇ)

사용자가 내가 아니라면 비밀번호를 자동생성하고 나중에 바꿀 수 있도록 체크(또는 Custom password로 처음부터 설정)

2. 사용자에게 권한 부여 (직접 부여 또는 그룹 지정)

 

IAM 정책(Policies Structure)

IAM 정책 구조(JSON 문서)

- Version: 버전 숫자: 정책 언어 버전

- Id: 정책을 식별하는 ID(Optional)

- Statement(required) :

     - Sid(optional) : Statement ID, Statement의 식별자

     - Effect : (Allow, Deny) 문장이 특정 API에 접근하는 걸 허용할지 거부할지에 대한 내용

     - Principal : 특정 정책이 적용될 사용자, 계정, 혹은 역할로 구성 됨(위 예시에선 AWS 계정의 루트 계정에 적용 됨)

     - Action : effect에 기반해 허용 및 거부되는 API 호출의 목록

     - Resource : 적용될 action의 리소스의 목록

     - Condition(optional) : Statement가 언제 적용될지를 결정

 

IAM MFA 개요

사용자와 그룹이 손상되지 않도록 보호해야 하며 두가지 방어 메커니즘이 있음

 

1. 비밀번호 정책 (Password Policy) 정의하기 

- 사용하는 비밀번호가 강력할수록 계정 보안이 강화됨

- 방식 : 최소 비밀번호 길이 설정, 특정 문자 유형 요구, 일정 시간 후에 비밀번호 변경 요구, 비밀번호 재사용 방지 등 

 

2. 다중 인증(MFA, Multi Factor Authentication)

- AWS에서 필수, 사용하는 것이 매우 권장됨

- MFA = 사용자 비밀번호 + 사용자가 소유한 보안 장치의 조합

- AWS에서의 MFA 장치 옵션 

       1. 가상 MFA 장치(Virtual MFA device) : 한 번에 하나의 전화에서만 작동하는 Google Authenticator, Authy 사용.

           Authy의 경우 하나의 장치에서 여러(multiple) 토큰을 제공할 수 있어서 루트 계정, IAM 사용자, 다른 계정, 다른 IAM 사용자 등을 가질 수 있음.

       2. Universal 2nd Factor(U2F) Security Key : 물리적인 장치. ex) YubiKey

           단일(single) 보안 키를 사용하여 여러 계정(사용자) 지원. (따라서 사용자 수만큼 많은 키가 필요하지 않음)

       

      3. Hardware Key Fob MFA Device : 타사 젬알토에서 제공하는 하드웨어 보안 토큰 MFA 장치

      4. Hardware Key Fob MFA Device for AWS GovCloud : 미국 정부의 클라우드인 AWS GovCloud를 사용하고 있다면 타사인 SurePassID에서 제공하는 보안 토큰

 

AWS 액세스 키, CLI 및 SDK

AWS에 액세스하는 방법은 총 3가지가 있다.

1. 관리 콘솔 (Management Console) 이용하기 : protected by password + MFA

2. 명령줄 인터페이스인 CLI(Command Line Interface) 이용하기 : protected by access keys. 터미널에서의 AWS 접근을 가능하도록 함.

3. SW 개발자 키트 SDK(Software Developer Kit) 이용하기 : for code: protected by access keys. AWS로부터 애플리케이션 코드 내에서 API를 호출하고자 할 때 사용되는 방식.

 

- 액세스 키는 관리 콘솔을 사용해 생성할 수 있으며 사용자들이 자신의 액세스 키를 직접 관리함. 

- Access Key ID ~= username, Secret Access Key ~= password

- CLI에 액세스 키 ID와 액세스키가 적용되면 AWS API에 접근이 가능함. (터미널에서 사용)

- SDK란? 소프트웨어 개발 키트. 특정 언어로 된 라이브러리의 집합. 따라서 프로그래밍 언어에 따라 개별 SDK가 존재함. 터미널 내에서 사용x. 코딩을 통해 애플리케이션 내에 심어 두어야 함.

 

AWS CLI 실습

aws의 사용자를 클릭 후 액세스 키를 만들 수 있다.

~ aws configure
AWS Access Key ID [None] : ㅁ
AWS Secret Access Key [None] : ㅁ
Default region name [None]: eu-west-1
Default output format [None]:

- aws configure를 입력하면 액세스 키 ID를 입력하라는 메세지가 표시되고 입력 후 엔터를 누르면 비밀 액세스 키를 입력하라는 메세지가 표시된다. 

- Default region name은 나에게 가장 가까운 리전으로 입력하면 된다.

- Default output format(기본 출력 형식)은 그냥 엔터키를 누른다.

이렇게하면 AWS CLI가 구성된 것이다.

~ aws iam list-users

위 명령어를 입력하면 내 계정의 모든 사용자가 나열된다.

만약 사용자에게 해당 명령에 대한 권한이 없다면 위 명령어를 입력해도 거부되었으므로 아무 응답이 없다.

 

AWS 클라우드쉘

AWS에 터미널을 통해 명령을 내리는 것 대신 CloudShell을 사용할 수 있다. 

(클라우드쉘은 AWS 클라우드에서 무료로 사용 가능한 터미널같은 개념이다)

화면 우측 상단의 아이콘을 통해 사용할 수 있으며 특정 리전에서만 사용가능하기 때문에 해당 아이콘이 없다면 나의 리전을 확인해보자.

 

클라우드쉘의 장점

1. CLI를 사용할때 API 호출을 반환해 줌

2. 클라우드엔 전체 저장소가 있어서 파일 생성 등을 했을때 재시작해도 그대로 남아있음.

3. 설정이 가능. 글씨나 테마 등도 바꿀 수 있음.

4. 파일을 업로드하거나 다운로드할 수 있음.

 

IAM Roles for Services

(*Role이 역할로 번역됨 주의)

우리 계정에서 실행해야 하는 AWS 서비스를 사용하기 위해 AWS 서비스에 권한을 부여해야 한다. 

IAM Role은 사용자와 같지만 실제 사람이 사용하도록 만들어진 것이 아니고 AWS 서비스에 의해 사용되도록 만들어졌다.

(we will assign permissions to AWS services with IAM Roles)

예를 들어, 가상 서버인 EC2 Instance를 만들때 EC2 인스턴스는 AWS에서 어떤 작업을 수행하려고 할 수 있다.

이때 EC2 인스턴스에 권한을 부여해야 하며 이를 위해 IAM Role을 만들어 이들을 하나의 개체로 만든다.

Commone roles: EC2 Instance Roles, Lambda Function Roles, Roles for CloudFormation

 

IAM Security Tools (보안도구)

- IAM Credentials Report (account-level) : IAM 자격증명 보고서. 계정수준에서 가능하며 보고서는 계정에 있는 사용자와 다양한 자격 증명의 상태를 포함함. 

사용자의 비밀번호가 마지막으로 사용된 시기, 마지막으로 변경된 시기 등을 확인할 수 있기 때문에 비밀번호나 계정을 변경하지 않거나 사용하지 않는 사용자들을 확인할 때 매우 유용함.

- IAM Access Advisor (user-level) : IAM 액세스 관리자. 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간이 보임. 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고 따라서 사용자의 권한을 줄여 최소 권한의 원칙을 지킬 수 있음. AWS에서 세부적인 사용자 액세스 권한을 수행해야 할 때 매우 유용함.

 

IAM 가이드라인 & Summary

 

Quiz

Question 1: 다음 중 IAM 역할의 올바른 정의는 무엇일까요?

-> AWS 서비스에 요청을 생성하기 위한 일련의 권한을 정의하고, AWS 서비스에 의해 사용될 IAM 개체

(사용자가 사용하는 것이 아님. Role(역할)은 서비스가 사용하는것)

Question 2: 다음 중 IAM 보안 도구에 해당되는 것은 무엇인가요?

-> IAM 자격 증명 보고서

Question 3: IAM 사용자에 대해 잘못 서술된 내용을 고르세요.

- IAM 사용자들은 다중 사용자 그룹에 속할 수 있습니다.

- IAM 사용자들이 사용자 그룹에 속할 필요는 없습니다.

- IAM 정책은 IAM 사용자에게 직접 연결될 수 있습니다.

- IAM 사용자들은 루트 계정 자격 증명을 통해 AWS 서비스에 액세스합니다. v

-> IAM 사용자들은 자신만의 자격 증명(사용자 이름 & 비밀번호, 혹은 액세스 키)을 통해 AWS 서비스에 액세스함.

Question 4: 다음 중 IAM 모범 사례에 해당하는 것은 무엇인가요?

-> 루트 계정 사용하지 않기 (루트 계정은 최초 IAM 사용자 생성과 일부 계정/서비스 관리 업무에만 사용됩니다. 일상적인 업무에는 IAM 사용자를 사용하셔야 합니다.)

Question 5: IAM 정책은 무엇인가요?

-> AWS 서비스에 요청을 생성하기 위한 일련의 권한을 정의하며, IAM 사용자, 사용자 그룹 및 IAM 역할에서 사용하게 될 JSON 문서

Question 6: IAM 권한에는 다음 중 어떤 원칙이 적용되어야 할까요?

-> 최소 권한 부여하기

Question 7: 루트 계정 보안을 향상시키기 위해서는 어떤 작업을 수행해야 할까요?

-> 다중 인증 (MFA) 활성화하기

Question 8: (참/거짓) IAM 사용자 그룹은 IAM 사용자 및 기타 사용자 그룹을 포함할 수 있습니다.

-> 거짓. IAM 사용자 그룹은 IAM 사용자만을 포함할 수 있습니다.

Question 9: IAM 정책은 하나 이상의 문장(Statement)으로 구성됩니다. 다음 중 IAM 정책 내 문장의 구성 요소가 아닌 것을 고르세요.

-> 버전. IAM 정책의 문장은 시드, 효과, 원칙, 조치, 리소스, 그리고 조건(Sid, Effect, Principal, Action, Resource, Condition)으로 구성됩니다. 버전은 IAM 정책 자체의 일부이지, 문장의 일부가 아닙니다.