들어가며
이번에는 AWS 에서 제공하는 기능들에 대해 알아보고 어떤의미인지 알아보고 실습을 통해 AWS에 익숙해지는 연습을 진행할 것이다.
IAM
IAM이란 Identity and Access Management 의 줄임말로 보안과 연관있는 기능이다. AWS 를 처음시작하게 되면 ROOT 사용자와 IAM 사용자로 구분할 수 있다. Root 사용자는 AWS의 모든 기능을 사용하는 슈퍼유저이고 IAM 은 누가, 무엇을, 접근할수 있다/없다 와 같이 권한을 부여하고 권한된 부여만 사용하는것이다. 장기자격증명이고 생성된 자격으로 접근할 수 있다. 간단한 실습을 통해 확인해보면
AWS 콘솔 -> IAM -> 사용자 -> 사용자 생성

메니지먼트 콘솔에 접근 (aws management 엑세스 권한 o) -> 콘솔로 접근을 한다.
권한 설정 -> 직접 정책 연결 (AdministratorAccess)
이때 AdministratorAccess 권한은 root 계정에 있는 모든 인프라에 접근권한이 있는 IAM 유저이다.

IAM 유저로 로그인


Root 로그인과 다르게 이메일로 들어가는것이 아닌 AWS 에서 생성된 자격으로 들어가는것이다.
if) Root 에서 IAM 유저의 권한을 삭제하면?

AWS 콘솔로 확인할때 접근 권한이 삭제되어서 이런식으로 사용할 수 있는 기능이 없어진다.
CLI에서도 접근이 가능하다.
"Windows AWS CLI install" 입력 → AWS CLI 설치 Documents 페이지 접속

보안 자격 증명 → 엑세스키 발급 → CLI (설명 태그값은 선택사항)


엑세스키는 꼭 따로 저장해야한다. (한번 보여주고 안보여줌)
설치가 완료되면 CMD 창에서 aws --version 을 통해 제대로 설치됐는지 확인하고
aws configure -> login 과 비슷
aws sts get-caller-identity → 자격증명에 관한 정보를 얻는 명령어
IAM 계정의 권한을 ReadOnly로 변경 후
aws iam create-user --user-name lab-edu-iam-user-02
를 실행하면

에러가 뜨는것을 확인할 수 있다. (ReadOnly 권한이므로)
네트워크 서비스(VPC)
네트워크를 어떻게 설계해야할까에 대해 생각하면 크게 분리, 연결, 보안으로 생각할 수 있다.
이때 AWS 에서 사용할 수 있는 서비스는 VPC이다.
VPC란 다른 네트워크 환경 및 외부와 격리된 가상의 사설 네트워크이다.
AWS에서 내가 전용으로 쓰는 가상 사설 네트워크로 IP와 라우팅 규칙을 직접 설계할 수 있다.
서브넷 (VPC 안의 IP 대역을 더 작은 구역으로 나눈것)
그럼 왜 서브넷을 만들까 생각하면 용도와 장애를 분리하는것이다.
Public 과 Private 를 구분해 필요한 용도에 따라 네트워크를 분리하고
AZ를 구분해 한 AZ가 터져도 다른 AZ에 서비스가 남도록하여 장애를 대응한다.
이때 Subnet은 반드시 하나의 AZ에만 속한다.
VPC 의 경우 위에서 말한것과 같이 사설네트워크이다. 그래서 직접 정해주어야한다.
Public = IGW(인터넷 게이트웨이) + Routing Table
인터넷 게이트웨이는 내부에서 외부, 외부에서 내부를 이어주는 역할을 한다.
IGW를 생성만 해서는 의미가 없다. 해당 VPC에 할당을 해서 사설네트워크에 외부통로를 만들어 주어야한다. 이때 VPC 1 개당 1개의 IGW를 붙일 수 있다.
그럼 양방향 통신(내부에서 외부, 외부에서 내부) 를 하기 위해서는?
Private
Private 네트워크는 단절된 네트워크이다. 외부에서 접근을 못하게 해서 보안의 중요한 서버로 이용된다. 하지만 내부에서 외부로는 트래픽을 나가게 할 수 있다.
이때 사용하는것이 NAT Gateway이다. 사설->공인 네트워크로 변환해주어 내부에서 외부로 통신이 가능하게 한다. 쉽게 흐름을 이해하면
Private EC2 → (Private Route Table) → NAT GW → (Public Route Table) → IGW → Internet 가 된다.
그럼 내부-외부 통신을 할때는 필요한것이 있다. 바로 어떤 트래픽을 허용하고 막을지 이다.
NACL(Network ACL)
서브넷 출입구에 설치된 가상 방화벽의 역할을 한다. Subnet에는 NACL이 1개만 연결 가능하다. (NACL 1개를 여러개의 Subnet에 연결하는것은 가능)
NACL은 stateless 이기 때문에 인바운드 규칙과 아웃바운드 규칙을 대칭적으로 열어 주어야한다. 또한 allow/deny를 통해 트래픽을 결정한다.
Security Group
VPC 안에서 ENI에 붙는 가상 방화벽이다. EC2 와 같은 리소스는 네트워크 카드(ENI)를 통해 통신한다. 즉 그 ENI에 붙어서 트래픽의 허용/불허를 결정한다. 하지만 SG는 allow만 있다. deny의 경우는 allow 가 아니면 자동적으로 deny이다. 또한 stateful 이기때문에 인바운드 규칙만 허용하면 아웃바운드 규칙은 자동으로 허용된다. 반대도 똑같이 작용한다.
두개를 표로 보면

이러한 특징이 있다.
위에 설명에서 Public IP 와 EIP에 대해 언급한 내용이 있는데 두개를 자세히 비교하면
Public IP
EC2를 Public Subnet에 생성할 때 자동 할당 되는 IP 이다.
▪ 비영구적인 IP로 인스턴스 중지 후 다시 시작하면 새로운 값으로 변경된다.
비용이 청구되지 않는 무과금 IP 리소스
임시로 EC2 인스턴스에 접근이 필요한 경우 사용
IP 주소 고정이 필요 없는 환경에 적합
Elastic IP 는
사용자가 명시적으로 생성 후 EC2에 직접 할당하여 사용하는 IP 이다.
▪ 영구적인 IP로 인스턴스 중지 후 다시 시작해도 같은 값을 유지
IP를 고정하고 계속 사용할 필요가 있는 경우 사용
EC2 (Elastic Compute Cloud)
EC2는 AWS 의 대표적인 IaaS 서비스로 가상화 된 컴퓨팅 자원이다.
그럼 EC2는 서버라 생각하면 되는데 다 같은 서버인가? 라고 생각하면 아니다.
EC2는 인스턴스 타입마다 성능이 다르다.
인스턴스 타입을 자세히 보면 4가지 네이밍 규칙으로 지어진다.
AMI (Amazon Machine Image)
AMI는 EC2 인스턴스를 실행하는 데 필요한 설정 정보를 모은 단위이다.
조금 다르지만 쉽게 생각해서 AMI는 도커이미지 EC2는 도커컨테이너의 느낌으로 이해하면 편하다.
AMI 구성 요소
AMI는 리전 단위로 저장되어 다른 리전에서 사용하려면 리전 간 복사를 진행해야한다.
실습
VPC 생성 (10.0.0.0/16)


서브넷 생성(4개)


퍼블릭에 ip 자동할당 표시

라우팅 테이블 생성


RT -> PUB (퍼블릿 서브넷 2개 연결- IGW는 서브넷 당 한개)
RT -> PRI-01(프라이빗 서브넷 01 연결)
RT -> PRI-02(프라이빗 서브넷 02 연결)
인터넷게이트웨이 생성
만들고 → 작업 → VPC 연결

PUB RT 에 IGW 지정

퍼블릿 서브넷 완성 (접속하자마자 외부인터넷 통신이 가능)
NAT 게이트웨이 생성


EC2 생성 (3개) - 아래의 사진과 같이 구성

Bastion 서버 생성


추가로 보안그룹 HTTP 추가
스토리지 기본설정으로 넘어감
web 서버 생성

스크립트를 추가 맨아래 (고급세부정보)

프로젝트 진행을 위해 미리 만들어진 스크립트 복사한것이다.
private 은 외부에서 들어갈수없으므로 bastion을 이용해 들어간다.
private 이기때문에 public ip (자동할당된 ip가 없다)
bastion 서버에서 pri로 들어가는 pem 파일을 만든다. (같은 pem 키)

또한 열려있는 포트를 확인해볼 수 있다.

web 서버에 접속
bastion 서버에서 sh파일을 통해 실행한다.
bastion ec2에 권한을 준다. iam → 역할 (ec2 → amazonec2fullaccess)
web 서버에도 동일하게 권한을 준다.


확인해보면 (public IP → private IP(web) 에 접근)

만약 접속이안되면 우선적으로 보안그룹을 확인하고 보안그룹이 문제가 없으면 80 포트가 listen 중인지 확인한다.
개발환경 구축 (vscode 서버) 만들기

또한 별도의 스크립트를 추가해서 서버를 만들고 최종 서버를 확인해보면

이제 공인 IP (http://[vscodeIP]:8080) 으로 들어가보면

이제 개발환경에 필요한 소스코드를 GIT 으로 받아오면

환경이 세팅된다.
Vscode 로 bastion, web server에 접근하기
pem 키 추가

config 생성

둘다 편의를 위해 ~/.ssh로 위치를 옮긴다.

하지만 이렇게 하면 위에 bastion에 들어갈 수 없다. 왜???
다시 생각해보면 보안그룹에 내 IP 만 접근 가능하게해서

SSH 10.0.0.0/16 을 추가하면

Vscode 에서 들어갈 수 있다.
마무리
이번 실습에서는 간단한 IAM 유저 생성, VPC 생성, Subnet 생성, IGW 생성, NAT Gateway 생성, EC2 과 같은 AWS에서 기본적이지만 중요한 네트워크와 관련된 부분과 유저관리에 대한 부분을 공부하였다. 추후에는 이 실습을 토대로 더 많은 기능을 구현할 것이다.