본문 바로가기

AWS

[AWS 교과서] 8장 AWS IAM 서비스

 

1. 배경 소개 

 

1) AWS 리소스 생성하고 관리하기 

 

AWS 관리 콘솔(AWS management console)

 

- AWS 리소스를 생성하고 관리하는 데 사용할 수 있는 '웹(web)' 기반 사용자 인터페이스를 제공한다. 

 

AWS 명령줄 인터페이스(AWS Command Line Interface, AWS CLI)

 

- AWS 서비스를 관리하는 통합 도구 

- 운영 체제(윈동, macOS, 리눅스)에 설치하면 '셸(shell)' 프로그램에서 AWS 서비스를 사용할 수 있다. 

 

AWS 소프트웨어 개발 키트(Software Development Kit, SDK)

 

- 특정 소프트웨어를 개발할 때 도움을 주는 개발 도구 집합 

- AWS SDK는 AWS 리소스를 프로그래밍적으로 사용하기 편리하도록 제공되는 라이브러리이다.

- AWS SDK는 파이썬, Go, 루비, 자바 등 주요 프로그래밍 언어별로 다양한 라이브러리를 제공한다. 

 

 

2) AWS API란 

 

- API(Application Programming Interface)는 두 애플리케이션이 상호 작용할 수 있게 도와주는 매개체이다. 즉, API를 이용하여 두 애플리케이션이 서로 통신하면서 정보를 주고받을 수 있는 것이다. 

 

- API를 사용할 때는 두 가지 규칙을 따라야 한다. 

  1. 외부에 공개된 API 서버가 아닐 때는 인증된 사용자만 접속할 수 있게 해야 한다. 
  2. 요청할 때 규칙을 정리한 문서인 '명세서'가 필요하다. 

- AWS 클라우드에서 인프라, 보안, 데이터베이스, 분석, 배포 및 모니터링 등 모든 IT 리소스는 AWS API 호출로 제어할 수 있다. 

 

AWS API

 

- 사용자나 애플리케이션이 AWS 서비스를 사용하기 위해 도와주는 매개체

 

ex)

- 사용자가 Amazon S3 서비스를 사용하려고 한다면 사용자는 요청 정보를 AWS API에 보낸다. 이때 AWS API는 사용자 인증을 확인한 후 요청이 적합하다고 판단되면 Amazon S3 서비스에 전달하여 서비스를 처리하게 한다. 

 

- 인증과 인가를 확인한 후에는 AWS CloudTrail 서비스를 이용하여 'API 로깅'을 남긴다. API 로깅이란 AWS API의 활동 기록을 저장하는 것으로, 보안 사고나 장애가 발생하면 더욱 빠르게 대응할 수 있다. 

 

 

2. AWS IAM

 

1) AWS IAM(Identity & Access Management)

 

- AWS 서비스와 리소스에 안전하게 접근할 수 있도록 관리하는 기능 

- IAM을 이용하여 리소스를 사용하도록 '인증'과 '권한'을 통제한다. 

- AWS 사용자 및 그룹을 만들고 관리하거나 권한을 이용하여 AWS 리소스 접근을 허용하거나 거부할 수 있다. 

- AWS IAM은 대부분의 AWS 서비스와 연결되어 활용할 수 있으며, 추가 비용 없이 사용할 수 있다. 

 

 

2) AWS IAM 구성 요소와 동작 방식 

 

구성 요소 

 

- AWS IAM은 사용자, 그룹, 역할, 정책으로 구성된다. 

 

AWS 계정 루트 사용자  - 맨 처음 생성된 AWS 계정이며, 해당 계정의 모든 권한을 가지고 있다. 
IAM 사용자(user) - 별도의 AWS 계정이 아닌 계정 내 사용자이며, 각 IAM 사용자는 자체 자격 증명을 보유한다. 즉, IAM 사용자마다 특정 AWS 작업을 수행할 수 있게 권한을 통제할 수 있다. 
IAM 그룹(group) - IAM 사용자 집합을 의미한다. IAM 그룹에 권한을 지정해서 다수의 IAM 사용자의 권한을 쉽게 관리할 수 있다. 
IAM 정책(policy) - 자격 증명이나 리소스와 연결될 때 요청을 허용하거나 거부할 수 있는 권한을 정의하는 AWS 객체이다. 
IAM 역할(role) - 특정 권한을 가진 계정에 생성할 수 있는 IAM 자격 증명이다. 역할에는 그와 연관된 암호 또는 접근 키 같은 장기 자격 증명이 없다. 그 대신 역할을 주면 역할 세션을 위한 임시 보안 자격 증명을 제공한다. 
보안 주체(principals) - AWS 계정 루트 사용자, IAM 사용자, IAM 역할을 이용하여 로그인하고 AWS에 요청하는 사람 또는 애플리케이션이다. 

 

 

인증, 인가 동작 방식 

 

- IAM 사용자가 AWS 리소스를 사용할 때는 암호나 접근 키 같은 자격 증명을 사용하여 인증받아야 한다. IAM 사용자 계정에 따른 암호나 접근 키가 올바르다면 적합한 사용자로 간주되어 인증 동작이 마무리된다. 그다음 인증이 처리되면 IAM 사용자는 적합한 권한이 있는지 확인하는 인가 동작을 진행한다. 

 

3) AWS IAM 사용자 

 

- AWS 사용자는 일반적으로 '루트 사용자''일반 IAM 사용자'로 나뉜다. 

- 루트 사용자는 AWS의 모든 리소스에 접근할 수 있는 권한이 있어 AWS 계정 생성 및 해지와 IAM 사용자 관리 등에 사용하지만, 직접 AWS 리소스를 사용하도록 권장하지는 않는다. 

 

 

4) AWS IAM 정책

 

- 사용자를 인가하고 나면, 사용자별로 권한에 대한 확인 절차를 진행한다. 

- 사용자별 권한 검사는 AWS IAM 정책을 이용해서 진행한다. 사용자에 연결된 IAM 정책으로 사용자별 AWS 서비스와 리소스에 대한 인가(권한)를 얻을 수 있다. 

- 사용자가 특정 AWS 서비스를 사용하려고 인가를 요청하면, IAM은 IAM 정책을 기반으로 AWS 요청을 검사, 평가한 후 최종적으로 허용할지 차단할지를 결정한다. 

 

ex)

{
	"Version" : "2012-10-17"
    "Statement" : [
    {
    	"Effect" : "Allow or Deny",
        "principal" : "principal",
        "Action" : ["action"],
        "Resource" : ["*"],
        "Condition" : {"key":"value"}
        }
 	]
}

 

Effect 명시적 정책에 대한 허용 혹은 차단
principal 접근을 허용 혹은 차단하고자 하는 대상
Action 허용 혹은 차단하고자 하는 접근 타입
Resource 요청의 목적지가 되는 서비스 
Condition 명시적 조건이 유효하다고 판단될 수 있는 조건 

 

 

5) AWS IAM 역할 

 

- IAM 역할이란 정의된 권한 범위 내 AWS API를 사용할 수 있는 임시 자격 증명을 의미한다. 

- 코드에 하드 코딩하지 않고 실행할 때 임시(+Token, 일정 시간 이후 만료됨) 자격 증명을 사용하는데, 이를 'Assume'이라고 한다. 

- IAM 역할을 사용하면 사용자 권한을 공유하거나 매번 권한을 부여할 필요가 없다. 

 

 

3. AWS IAM 사용자 생성 및 정책, 역할 동작 확인하기 

 

실습 단계 

  • 실습을 위한 기본 인프라를 배포한다. 
  • IAM 사용자(user) 생성 및 동작을 확인한다. 
  • IAM 정책(policy) 설정 및 동작을 확인한다. 
  • IAM 역할(role) 설정 및 동작을 확인한다. 
  • 실습을 위해 생성된 자원을 모두 삭제한다. 

 

1) 실습을 위한 기본 인프라 배포하기 

 

- AWS 관리 콘솔에서 CloucFormation 서비스에 들어간 후 스택 생성을 누른다. 

- AMazon S3 URL에 URL을 입력하고 다음을 누른다. 

- 스택 세부 정보 지정 페이지에서 다음과 같이 설정하고 다음을 누른다. 

 

 

2) IAM 사용자 생성 및 동작 확인하기 

 

- IAM 사용자로 admin과 viewuser를 각각 생성하고 인라인(inline) 정책을 연동하여 동작을 확인 

 

IAM 사용자 생성하기 

 

admin 사용자 생성 

 

- 보안, 자격증명 및 규정 준수 > IAM으로 들어간다. 사용자 > 사용자 추가를 눌러 사용자 생성 페이지로 들어간다. 

- 사용자 세부 정보 지정 페이지에서 다음과 같이 설정한다. 

  • 사용자 이름에 'admin' 입력
  • 다음 누르기 

- 권한 설정 페이지에서 다음과 같이 설정하고 사용자 생성을 누른다. 

  • 직접 정책 연결 선택
  • 권한 정책에서 'AdministratorAccess'에 체크 
  • 다음 누르기 

 

 

프로그래밍 방식을 사용하기 위해 액세스 키 만들기 

 

- 먼저 생성된 admin 사용자를 선택한 후 신규 메뉴 화면에서 아래쪽에 있는 보안 자격 증명 탭을 클릭한다. 보안 자격 증명 아래 액세스 키 만들기를 누른다. 

 

- 액세스 키 모범 사례 및 대안 페이지에서 다음과 같이 설정하고 다음을 누른다. 

  • Command Line Interface(CLI) 선택
  • '위의 권장 사항을 이해했으며 액세스 키 생성을 계속하려고 합니다.'에 체크
  • 다음 누르기 

- 설명 태그 설정 - 선택 사항 페이지에서 설명 태그 값에 'admin access key'를 입력한 후 액세스 키 만들기를 누른다. 

 

- 액세스 키 검색 페이지에서는 액세스 키와 비밀 액세스 키를 확인할 수 있다. 

 

 

admin 사용자가 웹 관리 콘솔에 접속할 수 있게 콘솔 액세스 활성화를 설정 

 

- 보안 자격 증명 탭에서 오른쪽 위에 있는 콘솔 액세스 활성화를 누른다. 

- 관리 콘솔에 접속할 때 사용할 사용자 암호를 설정한다. 

  • 콘솔 액세스에서 활성화 선택
  • 사용자 지정 암호(8자 이상의 복잡성을 만족하는 암호) 입력
  • 적용 누르기

 

viewuser 사용자 생성

 

- 다시 IAM > 사용자 메뉴를 선택하고 사용자 추가를 눌러 사용자 생성 페이지로 들어간다. 사용자 세부 정보 지정 페이지에서 다음과 같이 설정한다.

  • 사용자 이름에 'viewuser' 입력
  • 다음 누르기 

- viewuser 사용자는 읽기만 가능한 권한을 부여하고자 권한 설정에서 다음과 같이 설정한다. 

  • 직접 정책 연결 선택
  • 'ViewOnlyAccess'에 체크
  • 다음 누르기

- 검토 및 생성 단계에서 아래쪽에 있는 사용자 생성을 눌러 viewuser 사용자를 생성한다. 

 

 

viewuser 사용자도 웹 관리 콘솔에 접속할 수 있게 콘솔 액세스 활성화 설정 

 

- 사용자 메뉴로 다시 들어와서 viewuser 사용자를 선택한 후 보안 자격 증명 탭에서 오른쪽 위에 있는 콘솔 액세스 활성화를 누른다. 그 다음 관리 콘솔에 접속할 때 필요한 사용자 암호를 다음과 같이 설정한다. 

  • 콘솔 액세스에서 활성화 선택
  • 사용자 지정 암호(8자 이상의 복잡성을 만족하는 암호) 입력
  • 적용 누르기 

 

IAM 사용자로 AWS 관리 콘솔 로그인하기 

 

- AWS 관리 콘솔에서 오른쪽 위에 있는 자신의 계정 이름을 선택한다. 바로 아래에 출력되는 내 계정 뒤의 숫자(12자리)는 계정 ID로, 이 숫자를 메모하고 로그아웃한다. 

 

- 로그인 화면에서 IAM 사용자를 선택하고 계정 ID를 입력한 후 다음을 누른다. 사용자 이름에 앞서 생성한 IAM 사용자 이름(admin)과 암호를 입력하고 로그인을 누른다. 

 

- admin IAM 사용자는 AdministratorAccess 정책이 연동되어 있어 관리자 수준의 AWS 리소스를 조회, 생성, 변경, 삭제할 수 있다. 

 

- EC2> 인스턴스 메뉴에 들어간다. BasicEC2 위에서 마우스 오른쪽 버튼을 눌러 인스턴스 재부팅을 선택하여 EC2 재부팅을 시도한다. 

 -> AWS 리소스 변경에 대한 권한이 있으므로 Basic EC2 인스턴스가 정상적으로 재부팅된다. 

 

- viewuser IAM 사용자는 ViewOnlyAccess 정책이 연동되어 있어 AWS 리소스를 조회할 수 있지만 AWS 리소스를 생성, 변경, 삭제할 수는 없다. 

 

- EC2 > 인스턴스 메뉴에 들어간다. BasicEC2 위에서 마우스 오른쪽 버튼을 눌러 인스턴스 종료를 선택하여 EC2 종료를 시도한다. 

-> 권한이 없으므로 EC2 인스턴스 종료에 실패한 것을 볼 수 있다. 

 

 

3) IAM 정책 설정 및 동작 확인하기 

 

- BasicEC2에 IAM 사용자 자격 증명을 설정한 후 IAM 정책이 어떻게 동작하는지 확인 

 

- BasicEC2에 SSH로 접속한 후 admin IAM 사용자 자격 증명을 설정한다. 

 

# AWS CLI 사용을 위한 admin IAM 사용자 자격 증명 설정
# admin IAM 사용자를 생성할 때 csv 파일의 액세스 접근 키 ID와 비밀 액세스 접근 키 정보 사용 
aws configure

# 자격 증명 List 확인
aws configure list

# S3 정보 조회로 자격 증명 설정이 정상인지 확인
aws s3 ls

 

 

- BasicEC2에 SSH로 접속한 상태에서 S3LAMRoleEC2 재부팅을 시도하는 데 필요한 기본 정보를 확인한다. 

 

# 인스턴스 상세 정보 조회
aws ec2 describe-instances

# 인스턴스 ID와 태그 Name 값 조회, S3IAMRoleEC2의 인스턴스 ID 확인
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Instance:InstanceId, Name:Tags[?Key==`Name`]|[0].Value}' --output text

#인스턴스 ID와 프라이빗 IP 조회, S3IAMRoleEC2의 프라이빗 IP 확인
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Instance:PrivateIpAddress,Name"Tags[?Key==`Name`]|[0].Value}' --output text

 

- S3IAMRoleEC2 재부팅을 시도 

 

 

- IAM > 사용자에서 admin을 클릭하여 admin 요약 페이지로 들어간다. 권한 탭 오른쪽 위에 있는 인라인 정책 추가를 클릭한다. 

 

- JSON을 선택한 후 다음 코드를 입력한다. 입력했으면 정책 검토를 선택하고 다음으로 넘어간다. 

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect":"Deny",
			"Action": [
			    "ec2:RebootInstances",
			    "ec2:StopInstances"
			    ],
			    "Resource":"*"
		}
	]
}

 

- 이름에 'ec2denypolicy'를 입력하고 정책 생성을 누르면 모든 설정이 끝난다. 

 

- 재부팅 거부 정책이 적용된 admin IAM 사용자로 S3IAMRoleEC2를 재부팅한다. 

 

-> 재부팅 요청이 거부되는 것을 확인할 수 있다. 

 

 

4. IAM 역할 설정 및 동작 확인하기 

 

AWS CloudFormation으로 미리 설정한 IAM 역할 정보 확인 

 

- IAM > 역할 메뉴를 선택하고 STGLablnstanceRole을 클릭하여 요약 페이지로 들어간다. 

- EC2 > 인스턴스 메뉴에 들어간다. 'S3IAMRoleEC2'에 체크하고 아래쪽 보안 탭을 클릭한 후 IAM 역할 정보를 확인한다. 

 

 

- S3IAMRoleEC2 인스턴스는 'IAM 사용자 자격 증명'이 없어도 IAM 역할로 S3 리소스를 사용할 수 있다. 

 

 

S3IAMRoleEC2 SSH 접속 

# S3 버킷 조회
aws s3 ls

# S3 버킷 생성
aws s3 mb s3: //버킷

# S3 버킷 삭제
aws s3 rb s3: //버킷

# VPC 정보 확인, 연결된 IAM 역할에 권한이 없으므로 오류 발생
aws ec2 describe-vpcs