AWS EC2 및 SSH 활용

Chori·2024년 10월 12일
0
post-thumbnail

처음 시작하는 Infrastructure as Code: AWS & 테라폼을 수강하며 정리한 내용입니다.


AWS EC2

  • EC2는 Elastic Compute Cloud의 약자
  • EC2는 안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 제공하는 웹 서비스
  • 사용자는 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량으로 서버를 구성 가능
  • 컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 인프라에서 실행

SSH

  • SSH는 Secure Shell Protocol의 약자
  • SSH는 네트워크 프로토콜 중 하나로 보통 클라이언트와 서버가 네트워크 통신을 할 때, 보안상 안전하게 통신을 하기 위해 사용하는 프로토콜
  • 일반적으로 Password 인증과 RSA 공개키 암호화 방식으로 연결

SSH로 EC2에 접속할 때 유의점

  1. 적합한 Public IP와 Port를 사용했는지 확인
  2. Security Group 살펴보기
    • AWS는 기본 방화벽 솔루션으로 Security Group을 확인
    • 접속을 시도하는 IP와 Port가 Security Group에 허용되어 있어야 접속 가능
  3. EC2 인스턴스가 Public Subnet에 위치해 있는지 확인
    • 만약 EC2 인스턴스가 Private Subnet에 있으면 외부와 통신할 수 없음
    • Public Subnet인지 확인하는 것은 해당 Subnet이 연결된 라우팅 테이블을 보면 됨
    • VPC 탭으로 가서 Routes에 있는 항목에서 인터넷 게이트웨이가 0.0.0.0/0, igw-xxxxx로 설정되어 있는지 확인

EC2 인스턴스 만들기

  1. AWS에 가입 후 콘솔 홈으로 이동

  1. 리전을 아시아 태평양 (서울)로 선택

  1. EC2 인스턴스를 검색하고 클릭

  1. 인스턴스 시작을 눌러 인스턴스 만들기

  1. 인스턴스 이름 지정

  1. OS 이미지 선택

  • AMI는 OS 이미지를 의미
  1. 인스턴스 유형 선택

  1. 키 페어(로그인)

  • 새 키 페어 생성

  • 키 페어 이름 지정
  • 기본적으로 RSA 방식 사용

  • 키 페어 생성을 눌러 새로운 키를 다운로드
  1. 네트워크 설정

  • 네트워크: 어느 vpc에 생성할지에 대한 것
  • 서브넷: 어느 서브넷에 생성할지, 서브넷은 Zone에 종속적이며 Zone은 서버의 물리적인 거리를 의미, Zone이 다르다는 것은 리전 단위의 데이터 센터는 아니어도 어느 정도 물리적인 거리가 떨어져 있는 서로 다른 하드웨어 머신이라는 것
  • 퍼블릭 IP 자동 할당: 퍼블릭 IP를 자동으로 할당할 것인지에 대한 것, 퍼블릭 IP 자동 할당에 상관 없이 Elastic IP를 이용해도 됨

  • 다른 옵션에 대해서는 기본값 사용
  1. 스토리지 구성

  • 기본적으로 gp3 사용
  1. 인스턴스 시작

  1. 인스턴스 생성 완료

  1. 생성한 인스턴스 확인

  • 인스턴스가 표시되지 않으면 새로 고침
  1. 생성한 인스턴스의 퍼블릭 IP 확인

  1. 인스턴스의 보안 항목에서 보안 규칙 확인

  • 0.0.0.0/0이라는 것은 어디서든 접속이 허용된다는 의미
  1. SSH로 인스턴스에 접속

  • 다운로드한 키의 위치 확인
ssh -i 키 ec2-user@퍼블릭IP
  • 위와 같이 ssh 명령어 사용
  • -i 옵션은 키 파일을 지정
  • Amazon Linux 이미지를 사용한 EC2의 최초 유저는 ec2-user
    • 우분투 이미지를 사용했으면 ubuntu
  • -p로 포트 지정 가능, 기본 포트가 22로 설정되어 있으면 생략할 수 있음

  • UNPROTECTED PRIVATE KEY FILE!라는 경고가 발생
  • 다운로드한 키 파일에 너무 많은 권한이 허용되어 있어서 경고가 발생한 것
  • 키의 권한을 바꿔야 접속이 허용됨
    • 권한 값에서 십의 자리와 일의 자리가 0이어야 함
chmod 600

  • 그룹에 소속된 사용자와 그 외 사용자에 대한 읽기 권한이 사라짐

  • 접속 성공
  1. 서브넷 확인

  • 인스턴스의 세부 정보에서 서브넷 ID 클릭하여 서브넷으로 들어가기

  • 세부 정보에 어느 라우팅 테이블에 속해 있는지 표시됨
  • 라우팅 테이블을 클릭해서 들어가면 테이블에 선택된 옵션 값이 나옴
  • 라우팅 항목에 라우트 룰이 있음
  1. 네트워크 ACL 확인

  • 네트워크 ACL 메뉴에 접속해서 네트워크 ACL을 볼 수 있음
  • 네트워크 ACL의 설정에 따라 접속이 거부되는 경우도 있음
  • 네트워크 ACL를 사용하는 경우는 많지 않음, 시큐리티 룰을 많이 사용
  • 특정 IP를 막을 때는 네트워크 ACL을 사용

SSH 더 알아보기

22번 포트로 접속할 수 있는 이유

  • 서버에 22번 포트로 접속할 수 있다는 것은 서버가 22번 포트를 리스닝하고 있다는 뜻
  • 즉, 22번 포트로 접속을 계속 기다리는 상태
  • 서버가 몇 번 포트를 리스닝하고 있는지는 netstat -lntp 명령어로 알 수 있음

  • 0.0.0.0/0, tcp 포트로 리스닝하고 있음을 확인할 수 있음

SSH는 프로그램

  • /usr/bin/sshd라는 데몬 프로그램이 실행 중

key-pair로 접속할 수 있는 이유

  • .ssh 디렉토리가 존재함

  • 그 안에 authorized_keys라는 파일이 있음

  • 파일을 열면 난수가 적혀 있음
  • 이것을 ssh rsa public key라고 함
  • private key(개인키)는 인스턴스를 생성했을 때 다운로드한 key
  • private key와 authorized_keys 파일에 적혀 있는 public key(공개키)가 한 쌍의 key-pair
  • 둘은 key-pair가 맞기 때문에 서로 적합한지 알고 있음, private key로 public key 암호화 메시지를 해독 가능
  • 공개키는 누구에게나 공개해도 되며 보내는 메시지를 암호화하는 키
  • private 키는 암호화된 메시지를 복호화
  • 접속 시도를 하면 priavte key와 public key를 확인하고 적합하다면 통과

새로운 key-pair 만들기

  1. RSA key generator를 사용해서 public key와 private key를 생성
    • 온라인에 RSA key generator를 검색해서 이용할 수 있음
  2. 서버의 authorized_keys 파일에 새로운 public key를 추가

  1. 로컬에서 second-key.pem을 생성 후 권한 재설정

  1. second-key.pem로 서버에 접속

key를 메모리로 로드하기

  • ssh-agent에 SSH 키를 추가하여 SSH로 서버에 접속할 때 매번 키를 입력하지 않도록 할 수 있음
  • ssh-add 명령어로 현재 내 세션에 키를 계속 붙어 있도록 함
  • 아래 명령어로 ssh-agent에 SSH 키 추가
ssh-add test-EC2-key.pem
  • 만약 ssh-agent를 한 번도 실행한 적이 없으면 다음과 같이 오류가 발생

  • 다음 명령어로 ssh-agent를 먼저 실행
eval $(ssh-agent)
  • 그리고 다시 키 추가

  • 키를 추가했으면 SSH로 서버에 접속할 때 키를 입력하지 않아도 됨

profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글