처음 시작하는 Infrastructure as Code: AWS & 테라폼을 수강하며 정리한 내용입니다.
AWS EC2
- EC2는 Elastic Compute Cloud의 약자
- EC2는 안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 제공하는 웹 서비스
- 사용자는 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량으로 서버를 구성 가능
- 컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 인프라에서 실행
SSH
- SSH는 Secure Shell Protocol의 약자
- SSH는 네트워크 프로토콜 중 하나로 보통 클라이언트와 서버가 네트워크 통신을 할 때, 보안상 안전하게 통신을 하기 위해 사용하는 프로토콜
- 일반적으로 Password 인증과 RSA 공개키 암호화 방식으로 연결
SSH로 EC2에 접속할 때 유의점
- 적합한 Public IP와 Port를 사용했는지 확인
- Security Group 살펴보기
- AWS는 기본 방화벽 솔루션으로 Security Group을 확인
- 접속을 시도하는 IP와 Port가 Security Group에 허용되어 있어야 접속 가능
- EC2 인스턴스가 Public Subnet에 위치해 있는지 확인
- 만약 EC2 인스턴스가 Private Subnet에 있으면 외부와 통신할 수 없음
- Public Subnet인지 확인하는 것은 해당 Subnet이 연결된 라우팅 테이블을 보면 됨
- VPC 탭으로 가서 Routes에 있는 항목에서 인터넷 게이트웨이가
0.0.0.0/0
, igw-xxxxx
로 설정되어 있는지 확인
EC2 인스턴스 만들기
- AWS에 가입 후 콘솔 홈으로 이동

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

- EC2 인스턴스를 검색하고 클릭

- 인스턴스 시작을 눌러 인스턴스 만들기

- 인스턴스 이름 지정

- OS 이미지 선택

- 인스턴스 유형 선택

- 키 페어(로그인)


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

- 네트워크 설정

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

- 스토리지 구성

- 인스턴스 시작

- 인스턴스 생성 완료

- 생성한 인스턴스 확인

- 생성한 인스턴스의 퍼블릭 IP 확인

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

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

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

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

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

- 서브넷 확인

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

- 세부 정보에 어느 라우팅 테이블에 속해 있는지 표시됨
- 라우팅 테이블을 클릭해서 들어가면 테이블에 선택된 옵션 값이 나옴
- 라우팅 항목에 라우트 룰이 있음
- 네트워크 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로 접속할 수 있는 이유


- 그 안에
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 만들기
- RSA key generator를 사용해서 public key와 private key를 생성
- 온라인에 RSA key generator를 검색해서 이용할 수 있음
- 서버의
authorized_keys
파일에 새로운 public key를 추가

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


second-key.pem
로 서버에 접속

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

eval $(ssh-agent)

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