AWS - Infra


이 포스트는 AWS 인프라에 대해 간략히 알아본 후 EC2 배포, CloudFormation 생성을 진행해본다.

  • AWS
    • AWS Cloud
  • AWS Network
  • 사전 준비
    • SSH
  • EC2 배포 테스트
  • CloudFormation Stack 생성 테스트

아래는 이번 포스팅에서 다뤄볼 범위 도식화이다.

1. AWS

AWS Infra e.g.

1.1. AWS Cloud

AWS Cloud 범위

가용 영역 (AZ, Availability Zone)

  • 한 개 이상의 데이터 센터들의 모음

Region

  • 지리적 영역 내에서 격리되고 물리적으로 분리된 여러 개의 가용 영역의 모음
  • 최소 2개, 최대 6개의 가용 영역으로 구성
  • AWS 서비스 구성 시 가용 영역을 분산하여 구성하는 것 권장

Edge

  • 외부 인터넷과 AWS 글로벌 네트워크망을 연결하는 별도의 센터
  • 엣지 로케이션과 리전별 엣지 캐시로 구성됨
  • CloudFront(CDN 서비스), Direct Connect, Route53(DNS 서비스), AWS Shield(DDoS Protection), AWS Global Accelerator 가 엣지에서 동작함

Edge-Region


2. AWS Network

AWS VPC - 리소스 격리

  • Virtual Private Cloud
  • 독립된 가상의 클라우드 네트워크

VPC 에 대한 더 상세한 내용은 AWS - VPC (1) 를 참고하세요.

AWS VPN - 가상 사설망

  • Virtual Private Network
  • 공용 인터넷을 통해 가상의 사설 네트워크를 구성하여 Private 통신을 제공
  • 데이터 암호화, 전용 연결 등 여러 보안 요구 충족 가능
  • AWS 에서는 Site-to-Site VPN 과 클라이언트 VPN 제공

추후 더 자세히 다룰 예정입니다.

ELB - 로드 밸런서

  • Elastic Load Balancing

ELB 의 상세한 내용은 AWS - Load Balancing (1) 을 참고하세요.

  • 퍼블릭 인터넷에 데이터가 노출되지 않도록 하고, 내부 네트워크를 통해 AWS 서비스와 on-Premises 간의 안전한 비공개 연결 제공

PrivateLink 의 상세한 내용은 AWS - VPC (2) 를 참고하세요.

Route53 - DNS

추후 더 자세히 다룰 예정입니다.

AWS 전송 게이트웨이 - 네트워크 확장

  • VPC 나 On-Premises 등의 네트워크를 단일 지점으로 연결할 수 있는 라우팅 서비스

추후 더 자세히 다룰 예정입니다.

AWS Direct Connect - AWS 전용 연결

  • 데이터 센터, Co-Location 환경과 같은 장소에서 AWS 와의 전용 네트워크 연결을 제공하는 전용선 서비스

추후 더 자세히 다룰 예정입니다.

AWS CloudFront - CDN(컨텐츠 전송/캐시)

  • 컨텐츠를 캐싱하여 서비스 제공

추후 더 자세히 다룰 예정입니다.

AWS Global Accelerator - 글로벌 전송

  • 글로벌 사용자를 대상으로 애플리케이션의 가용성과 성능을 개선할 수 있는 서비스
  • AWS 글로벌 네트워크를 통해 사용자에서 애플리케이션으로 이어진 경로를 최적화하여 트래픽 성능 개선

추후 더 자세히 다룰 예정입니다.

네트워크 보안

  • 보안 그룹, 네트워크 ACL, 웹 방화벽 등이 있음

추후 더 자세히 다룰 예정입니다.


3. 사전 준비

3.1. SSH

EC2 인스턴스에 접근하기 위해서는 SSH Key pair 가 필요하다.

SSH 인증 방식은 ‘user-password’ 방식과 ‘key pair file’ 방식이 있는데 ‘user-password’ 방식은 무차별 대입 공격 방식에 의해 권한 탈취의 우려가 있지만, ‘key pair file’ 방식은 개인키가 노출되지 않기 때문에 안전하고 key file 로 로그인이 가능하여 암호를 입력하지 않아도 되어 편리하다.

EC2 → Network & Security → Key Pairs 에서 생성가능하다.

  • .ppk: Windows OS or Putty
  • .pem: Mac OS or 리눅스 내장 SSH

SSH key 분실 시 임시로 System Manager Session Manager 를 이용하여 접근 후 관리자 권한 상승으로 임시 조치 가능
http://bit.ly/cnba0101


4. EC2 배포 테스트

  • AWS console 에서 EC2 instance 배포
  • 로컬에서 SSH 로 EC2 instance 접근
  • EC2 instance 에 웹서비스 설치
  • EC2 instance 삭제

AWS console 에서 EC2 instance 배포

아래와 같은 설정값으로 EC2 를 생성하여 배포한다.

  • AMI: Amazon Linux 2 AMI
  • Instance type: t2.micro
  • Key pair: 위에서 생성한 key pair
  • Auto-assign Public Ip: Enable
  • Security Group
    • SSH: source type > My IP
    • HTTPS: source type > Anywhere

EC2 설정-1 EC2 설정-2 EC2 설정-3 EC2 설정-4 EC2 설정-summary

로컬에서 SSH 로 EC2 instance 접근

SSH -i {key file} ec2-user@{public-ip}

# 소유자만 파일을 볼 수 있도록 권한 변경
$ chmod 400 sandbox-jh.pem
$ ll
-r--------@ 1 juhyunlee  staff   1.6K 10 16 13:24 sandbox-jh.pem

# ssh 로 ec2 instance 접근
$ ssh -i sandbox-jh.pem ec2-user@43.201.xx.xx
The authenticity of host '43.201.xx.xx (43.201.xx.xx)' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '43.201.xx.xx' (ED25519) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 7 available
Run "sudo yum update" to apply all updates.

[ec2-user@ip-172-31-xx-xx ~]$ whoami
ec2-user

EC2 instance 에 웹서비스 설치

# root 계정으로 전환
[ec2-user@ip-172-31-xx-xx ~]$ sudo su -
마지막 로그인: 월 10월 17 04:30:45 UTC 2022 일시 pts/0

# web 서비스 설치
[root@ip-172-31-xx-xx ~]# yum install httpd -y

# web 서비스 실행
[root@ip-172-31-xx-xx ~]# systemctl start httpd

# 페이지 구성
[root@ip-172-31-xx-xx html]# echo "Test Web Server" > /var/www/html/index.html

[root@ip-172-31-xx-xx html]# curl localhost
Test Web Server

http://public ip 로 접근하여 정상 출력되는지 확인한다.

Web Service 확인

EC2 instance 삭제

EC2 삭제


5. CloudFormation Stack 생성 테스트

  • CloudFormation 스택 생성
    • 스택 생성
    • 생성된 자원 확인

CloudFormation

CloudFormation 은 AWS 인프라에 대해 코드로 개략적인 선언을 하는 방법으로,
생성할 AWS 인프라 자원을 코드로 정의하여 자동으로 정의된 자원을 생성하거나 삭제할 수 있다. (=IaC, Infrastructure as Code)

Template 는 AWS 인프라 지원을 코드로 정의한 파일로써 JSON, yaml 형식으로 작성 가능하다.

Template 를 CloudFormation 에 업로드하여 Stack 을 생성할 수 있으며, Stack 을 생성하면 Template 에 정의된 AWS 인프라 자원에 대해 순서대로 자동 생성된다.

Template Download!

Template 를 통해 EC2 instance 에 대한 OS, instance type, key-pair, tag, Security Group 을 정의하여 배포할 수 있다.
EC2 instance 가 부팅 시 자동으로 실행되는 명령어도 정의하여 배포할 수 있다. (UserData)

CloudFormation Template (펼쳐보기)
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
    Type: AWS::EC2::KeyPair::KeyName
    ConstraintDescription: must be the name of an existing EC2 KeyPair.
  LatestAmiId:
    Description: (DO NOT CHANGE)
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
    AllowedValues:
      - /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2

Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId
      InstanceType: t2.micro
      KeyName: !Ref KeyName
      Tags:
        - Key: Name
          Value: WebServer
      SecurityGroups:
        - !Ref MySG
      UserData:
        Fn::Base64:
                !Sub |
          #!/bin/bash
          yum install httpd -y
          systemctl start httpd && systemctl enable httpd
          echo "<h1>Test Web Server</h1>" > /var/www/html/index.html

  MySG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable HTTP access via port 80 and SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

CF 생성-1 CF 생성-2

스택이 다 생성되면 EC2 로 가서 WebServer EC2 instance 가 생성되었는지 확인해본다.

이후 스택을 삭제하면 자원을 일일히 수동 삭제할 필요없이 자동으로 생성된 자원이 삭제된다.


참고 사이트 & 함께 보면 좋은 사이트

본 포스트는 김원일, 서종호 저자의 따라하며 배우는 AWS 네트워크 입문를 기반으로 스터디하며 정리한 내용들입니다.






© 2020.08. by assu10

Powered by assu10