본문 바로가기
Cloud/AWS

AWS) EC2 보안그룹 - SSH, 인스턴스 역할, 구매 옵션

by 박채니 2023. 12. 13.
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
"유데미" AWS 강의를 참고하여 포스팅한 개인 공부 내용입니다.

 

EC2 보안그룹

→ 보안 그룹을 이용해 EC2 인스턴스의 인바운드 / 아웃바운드 트래픽 제어

→ 허용 규칙만 허용

→ 인바운드 / 아웃바운드에 허용되는 대상 지정

→ 컴퓨터의 IP 주소 참조 혹은 보안 그룹이 서로 참조

 

참고사항

 

  • 여러 인스턴스에 연결 가능 (하나의 인스턴스가 여러 보안 그룹을 가질 수 있음)
  • 리전이나 특정 VPC 조합에 고정
    • 다른 리전 혹은 VPC로 변경하면 새로 보안 그룹을 생성해야함
  • EC2 외부에 위치
  • ⭐️SSH 전용으로 별도의 보안 그룹을 관리하는 것이 좋음⭐️
  • 타임아웃이 발생하면 보안 그룹 문제
  • 기본적으로 모든 인바운드 트래픽은 차단 → 모든 아웃바운드 트래픽은 허용
⭐️주요 포트⭐️

 

  • 22 (SSH / SFTP)
    • 보안 셸
    • 리눅스에서 EC2 인스턴스 로그인 시 사용
    • SFTP → SSH를 이용한 파일 업로드 (보안 파일 전송 프로토콜)
  • 21 (FTP)
    • 파일 전송 프로토콜용
    • 파일 공유에 파일 업로드 시 사용
  • 80 (HTTP)
    • 보안이 적용되지 않은 웹사이트에 액세스 시 사용
  • 443 (HTTPS)
    • 보안이 적용된 웹사이트
  • 3389 (RDP)
    • 원격 데스크톱 프로토콜용
    • 윈도우 인스턴스 로그인 시 사용

 

SSH (보안 셸)

→ 유지 관리나 작업을 위해 서버 내부에 연결하기 위해 사용 (맥 or 리눅스 or window10 이상)

→ 터미널이나 커맨드 라인에서 원격 컴퓨터나 서버 제어

 

SSH를 이용해 EC2 인스턴스 내부 연결하는 방법

$ ssh ec2-user@3.143.230.26

 

ssh ec2-user

→ Amazon Linux 2 AMI는 이미 한 명의 사용자가 설정되어 있고, 해당 사용자 이름이 ec2-user

(EC2 인스턴스를 Amazon Linux 2 AMI로 만듦)

Amazon Linux 2 AMI로 생성되었다는 걸 확인할 수 있음

 

@

→ 특정 서버에서 해당 사용자에 액세스 하고 싶음을 의미

 

3.143.230.26

→ EC2 인스턴스의 공개 IP

→ 인스턴스 재시작 시 변경될 수 있음

 

The authenticity of host '3.143.230.26 (3.143.230.26)' can't be established.
ED25519 key fingerprint is SHA256:Sbu8+51KOWZzvcXWT7R3ALMlN4pfovj/JxbcbW0o/Dk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '3.143.230.26' (ED25519) to the list of known hosts.
ec2-user@3.143.230.26: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

⚠️ 위 오류는 권한이 없음을 의미 (다운로드한 키를 지정하면 해결됨)

 

이전에 생성한 인증서를 다운받고, 이를 지정 (✅ 공백이 없어야함)

위와 같이 생긴 파일 필요

 

인증서가 있는 디렉토리로 이동하고, 접속 명령어 입력

$ pwd
/Users/parkchaeeun/study/aws

$ ssh -i EC2Tutorial.pem ec2-user@3.143.230.26
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'EC2Tutorial.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "EC2Tutorial.pem": bad permissions
ec2-user@3.143.230.26: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

 

보호되지 않은 키 파일이 존재한다는 오류 메세지가 확인되어 해당 권한을 변경해줘야 함

 

$ chmod 0400 EC2Tutorial.pem
$ ssh -i EC2Tutorial.pem ec2-user@3.143.230.26
   ,     #_
   ~\_  ####_        Amazon Linux 2
  ~~  \_#####\
  ~~     \###|       AL2 End of Life is 2025-06-30.
  ~~       \#/ ___
   ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
      ~~._.   _/
         _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
       _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/

12 package(s) needed for security, out of 15 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-39-119 ~]$

SSH를 이용해 EC2 인스턴스에 접속된 것을 확인할 수 있음

 

✅ chmod 0400 → 소유자의 읽기 권한 허용하는 리눅스 셸 명령어

https://www.ibm.com/docs/ko/i/7.4?topic=directories-chmod

 

명령어 입력

[ec2-user@ip-172-31-39-119 ~]$ whoami
ec2-user
[ec2-user@ip-172-31-39-119 ~]$ ping google.com
PING google.com (142.250.191.110) 56(84) bytes of data.
64 bytes from ord38s28-in-f14.1e100.net (142.250.191.110): icmp_seq=1 ttl=114 time=15.7 ms
64 bytes from ord38s28-in-f14.1e100.net (142.250.191.110): icmp_seq=2 ttl=114 time=15.8 ms

exit 혹은 ctrl+d를 입력하여 접속 해제할 수 있음

 

EC2 인스턴스 역할 데모

EC2 인스턴스에 접속해서 여러 작업을 수행할 수 있는데, 현재 나의 EC2 인스턴스는 aws CLI를 내부적으로 포함하고 있음

 

EC2 인스턴스 접속 후 iam user list 가져오기

$ aws iam list-users
Unable to locate credentials. You can configure credentials by running "aws configure".

현재 iam에 접근할 권한 설정이 안되어있으므로, aws configure 명령어를 통해 Access key ID / PWD 등을 입력해야 함.

하지만 해당 방법은 보안 상으로 최악!

 

이럴 때 사용할 수 있는 것이 IAM 역할

DemoRoleForEC2 - IAMReadOnlyAccess 정책을 가지고 있음

 

해당 IAM 역할을 EC2 인스턴스에 역결하여 자격 증명을 제공함

✅ 연결하는 법 → (IAM - Instance - Security - Modify IAM Role)

 

$ aws iam list-users
{
    "Users": [
        {
            "UserName": "chany-dev",
            "PasswordLastUsed": "2023-12-14T12:34:51Z",
            "CreateDate": "2023-11-20T13:17:49Z",
            "UserId": "AIDAXFK2SSD7E7AC4LXKY",
            "Path": "/",
            "Arn": "arn:aws:iam::492500586750:user/chany-dev"
        }
    ]
}

 

 

EC2 인스턴스 구매 옵션

 

  • EC2 On Demand (사용하는 만큼 요금 지불)
    • Linux or Windows → 초당 비용 청구
    • 이외 시스템 → 시간당 비용 청구
    • 높은 가격이지만, 선결제가 없음
    • 장기 약정 필요하지 않음
    • 연속적인 단기 워크로드에 적합 (애플리케이션의 동작을 예측할 수 없을 때)
  • EC2 Reserved (예약 인스턴스)
    • 특정 인스턴스 속성 예약 (인스턴스 유형, 리전, 테넌시 및 OS ...)
    • 온디맨드에 비해 비용을 약 72% 절약 가능
    • 예약 기간을 1년 or 3년으로 지정 
    • 전체 선결제 / 부분 선결제 / 선결제 없이도 가능
    • 특정 리전으로 범위 지정 or 특정 AZ 용량 예약하도록 영역 지정
    • 애플리케이션이 안정된 상태로 사용되는 데이터베이스 등에 적합
    • 전환형 예약 인스턴스도 있음
      • 인스턴스 제품군, 운영체제 및 범위, 테넌시, 유형 변경 가능
  • EC2 Savings Plans
    • 장기 사용에 따른 할인 가능 (약 70%)
    • 시간당 10달러의 비용을 1년 ~ 3년동안 약정
    • 초과 사용량은 온디맨드 가격으로 청구
    • 특정 인스턴스 제품군과 리전에 한해 사용 가능
    • 인스턴스 크기에 구애 받지 않고, Linux ~ Windows간 전환 가능
    • 테넌시 → 호스트, 전용 및 기본값 전환 가능
  • EC2 Spot Instances
    • 가장 파격적인 할인 제공 (약 90%)
    • 인스턴스가 언제든 중단될 수 있음
    • 스팟 인스턴스에 지불하고자 하는 가격보다 높아질 경우 인스턴스 중단
    • 가장 비용 효율적
    • 서비스가 중단되어도 복귀하기 쉬운 워크로드에 적합 (⭐️중요한 작업이나 데이터베이스 등에는 적합하지 않음⭐️)
      • 배치 작업
      • 데이터 분석
      • 이미지 처리 및 분산된 워크로드
      • 시작 및 종료 시점이 유동적인 워크로드 등
  • EC2 Dedicated Hosts (전용 호스트)
    • 사용 사례에 맞춘 EC2 인스턴스 용량을 가진 물리적 서버
    • 소켓 or 코어 or VM 소프트웨어 라이선스 당 청구
    • 가장 높은 가격대 (실제로 물리적인 서버를 예약하기 때문)
    • 규정 준수 요구 사항이 있거나 기존 서버 결합 소프트웨어 라이선스, 사용자 라이선스를 사용해야 할 경우 적합
    • 온디맨드로 초당 청구되거나 1년 or 3년 계약 가능
  • EC2 Dedicated Instances (전용 인스턴스)
    • 사용자의 전용 하드웨어에서 실행 (물리적 서버와 다름)
    • 인스턴스 배치 제어 불가

 

전용 인스턴스와 전용 호스트의 차이점

 

1️⃣ 전용 인스턴스

→ 사용자 하드웨어에 고유한 인스턴스를 가짐

 

2️⃣ 전용 호스트

→ 물리적 서버 자체에 액세스하여 저수준 하드웨어에 대한 가시성 제공

 

EC2 Capacity Reservations (용량 예약)

  • 원하는 기간 동안 특정 AZ에 온디맨드 인스턴스 예약 가능
  • 이후 필요 시마다 해당 용량에 액세스
  • 시간 약정이 없음 → 용량 예약 혹은 취소 언제든 가능
  • 요금 할인 X
  • 인스턴스 실행 여부와 관계없이 온디맨드 요금 청구
  • 특정한 AZ에 위치하는 단기의 연속적인 워크로드에 적합

 

 

상황에 따른 적합한 EC2 인스턴스를 고르는 문제가 나온다고 하네...ㅎ..ㅠㅠ.. 어렵겠당..

블로그에 정리는 안했지만, 리조트를 예로 들어 설명해주는 거 계속 보면서 익히자! (43강)