May 9, 2023

AWS 클라우드 서버 구축 1

AWS 클라우드 서버 구축 1

용어 설명

  • EC2

AWS에서 EC2는 쉽게 말하면 클라우드상의 가상 서버를 말한다.
Amazon Elastic Compute Cloud(Amazon EC2)는 다음의 기능을 제공한다.

  1. 인스턴스 : 가상 컴퓨팅 환경
  2. Amazon Machine Image(AMI) : 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로 인스턴스를 쉽게 만들 수 있다.
  3. 인스턴스 유형 : 인스턴스를 위한 CPU, 메모리, 스토리지, 네트워킹 용량의 여러 가지 구성 제공
  4. 기 페어를 사용하여 인스턴스 로그인 정보 보호(AWS는 퍼블릭 키를 저장하고 사용자는 개인 키를 안전한 장소에 보관하는 방식)
  5. 인스턴스 스토어 볼륨 : 임시 데이터를 저장하는 스토리지 볼륨으로 인스턴스 중단, 최대 절전 모드로 전환 또는 종료시 삭제됨
  6. Amazon Elastic Block Store(Amazon EBS), 즉 Amazon EBS 볼륨을 사용해 영구 스코리지 볼륨에 데이터 저장
  7. 인스턴스와 Amazon EBS 볼륨 등의 리소스를 다른 물리적 장소에서 액세스할 수 있는 리전 및 가용영역
  8. 보안 그룹을 사용해 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스IP 범위를 지정하는 방화벽 기능
  9. 탄력적 IP 주소(EIP) : 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
  10. 태그 : 사용자가 생성하여 Amanon EC2 리소스에 할당할 수 있는 메타데이터
  11. AWS 클라우드에서는 논리적으로 격리되어 있지만 원할 때마다 고객이 네트워크와 간편히 연결할 수 있는 가상 네트워크인 Virtual Private Clouds(VPC)
  • VPC

Amazon Virtual Private Cloud(Amazon VPC)는 사용자가 정의한 가상 네트워크를 말한다.
Amazon VPC는 Amazon EC2의 네트워크 계층으로. 다음과 같은 개념을 가지고 있다.

  1. Cirtual Private Cloud(VPC) – 사용자의 AWS 계정 전용 가상 네트워크.
  2. 서브넷 - VPC의 IP주소 범위
  3. 라우팅 테이블 : 네트워크 트래픽을 전달할 위치를 결정하는 데 사용되는 라우팅이라는 규칙 집합.
  4. 인터넷 게이트웨이 : VPC의 리소스와 인터넷 간의 통신을 활성화하기 위해 VPC에 연결하는 게이트웨이.
  5. VPC 엔드포인트 : 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결을 필요로 하지 않고 PrivateLink 구동 지원 AWS 서비스 및 VPC 엔드포인트 서비스에 VPC를 비공개로 연결할 수 있다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않는다. VPC와 기타 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않는다.
  6. 리전당 5개까지 생성할 수 있으나 필요에 따라 리소스 증가요청을 하여 100개까지 사용할 수 있다.
  • IAM

AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스로 IAM을 사용하여 리소스를 사용하도록 인증 및 권한부여 된 대상을 제어함.
IAM에서는 다음의 기능을 제공한다.

  1. AWS 계정에 대한 공유 액세스
  2. 세분화된 권한
  3. Amazon EC2에서 실행되는 애플리케이션을 위한 보안 AWS 리소스 액세스
  4. 멀티 팩터 인증(MFA)
  5. 자격 증면 연동
  6. 보장을 위한 가격 증명 정보
  7. PCI DSS 준수
  8. 여러가지 AWS 서비스와의 통합
  9. 최종 일관성

IAM 액세스 방법

  1. AWS Management 콘솔
  2. AWS 명령줄 도구
  3. AWS SDK
  4. IAM HTTPS API
  • Netwok ACL

네트워크 ACL(액세스 제어 목록)은 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 역할을 하는 VPC를 위한 선택적 보안 계층이다. 보안 그룹과 비슷한 규칙으로 네트워크 ACL을 설정하여 VPC에 보안 계층을 더 추가할 수 있다.

  1. 네트워크 ACL 기본사항
    a. VPC는 수정 가능한 기본 네트워크 ACL과 함께 자동으로 제공됩니다. 기본적으로 모든 인바운드 및 아웃바운드 IPv4 트래픽을 허용하며, 해당되는 경우 IPv6 트래픽도 허용한다.
    b.사용자 지정 네트워크 ACL을 생성하여 서브넷과 연결할 수 있다. 기본적으로 각 사용자 지정 네트워크 ACL은 규칙을 추가하기 전에는 모든 인바운드 및 아웃바운드 트래픽을 거부한다.
    c. VPC에 있는 각 서브넷을 네트워크 ACL과 연결해야 한다. 서브넷을 네트워크 ACL에 명시적으로 연결하지 않을 경우, 서브넷은 기본 네트워크 ACL에 자동적으로 연결된다.
    d. 네트워크 ACL을 여러 서브넷과 연결할 수 있다. 그러나 서브넷은 한 번에 하나의 네트워크 ACL에만 연결할 수 있다. 네트워크 ACL을 서브넷과 연결하면 이전 연결은 제거된다.
    e. 네트워크 ACL에는 번호가 매겨진 규칙 목록이 포함되어 있다. 가장 낮은 번호가 지정된 규칙부터 시작해서 트래픽이 네트워크 ACL과 연결된 서브넷의 내부 또는 외부로 전달되도록 허용되는지 결정한다. 규칙에 사용할 수 있는 가장 높은 번호는 32766이다. 나중에 필요한 곳에 새 규칙을 삽입할 수 있도록, 처음 시작할 때는 증분 방식으로(예: 10 또는 100 단위씩 증분) 규칙을 생성하는 것이 좋다.
    f. 네트워크 ACL에는 별개의 인바운드 및 아웃바운드 규칙이 있으며, 각 규칙은 트래픽을 허용하거나 거부할 수 있다.
  • 기타 용어 설명

    1. 네트워크 ACL은 상태 비저장이다. 즉, 허용되는 인바운드 트래픽에 대한 응답은 아웃바운드 트래픽에 대한 규칙을 따르고, 그 반대의 경우에도 마찬가지다.

    2. VPC당 네트워크 ACL 수 및 네트워크 ACL당 규칙 수에 대한 할당량(제한)이 있다. VPC당 네트워크 ACL은 200개까지 생성가능하다. 그리고 하나의 네트워크 ACL당 20개의 규칙이 할당 가능하다.

    3. 네트워크 ACL규칙
      a. 규칙 번호. 번호가 가장 낮은 규칙부터 평가된다. 규칙에 일치하는 트래픽이 있으면 이와 모순되는 상위 규칙이 있더라도 적용된다.
      b. 유형. 트래픽 유형(예: SSH). 모든 트래픽 또는 사용자 지정 범위를 지정할 수도 있다.
      c. 프로토콜. 표준 프로토콜 번호를 가진 어떤 프로토콜이든 지정할 수 있다. 자세한 내용은 프로토콜 번호를 참조. ICMP를 프로토콜로 지정하면 ICMP 유형과 코드 중 일부 또는 전부를 지정할 수 있다.
      d. 포트 범위. 트래픽에 대한 수신 포트 또는 포트 범위. 예를 들어, HTTP 트래픽의 경우 80이다.
      e. 소스. [인바운드 규칙만 해당] 트래픽의 소스(CIDR 범위)다.
      f. 대상. [아웃바운드 규칙만 해당] 트래픽의 대상(CIDR 범위)이다.
      g. 허용/거부. 지정된 트래픽을 허용 또는 거부 할지 여부이다.


1. 서버 구축

  • 가상프라이빗 클라우드 생성(VPC, Subnet, Routing Table , Gateway)
    1. VPC

    자동으로 생성 되어 있는 리소스의 활용이 가능하다면 해당 리소스를 활용하는 것도 가능하다. 단, 여기에서 설명하는 퍼블릭과 프라이빗의 개념을 적용하여 구현하도록 한다.

vpc_dashboard
VPC 대시보드 화면

최초 접속시 아무것도 생성
되어 있지 않은 상태.

1-1. VPC 생성

동일 리전당 기본 5개까지 생성가능하다. 리소스 증가 요청을 통해 최대 100개까지 생성할 수 있다.
동일한 VPC 내 서버끼리는 통신할 수 있다.

vpc_make
VPC 생성화면

Name : sangsang-vpc-0001
Ipv4 CIDR 블록 정보 : 10.0.0.0/16
테넌시 : 기본값

1-2. VPC 세부 정보

vpc_detail
VPC 세부 정보

VPC 생성후 세부 정보 화면
VPC를 생성하면 자동으로 DHCP옵션 셋트와 라우팅 테이블 네트워크ACL이 생성된다.
VPC 이름과 IPv4 CIDR이 제대로 입력되었는지 확인한다.

1-3. 서브넷 생성

subnet_make
서브넷 생성 화면

서브넷을 생성한다.

1번 서브넷
VPC :   sangsang-vpc-0001 선택
서브넷 이름 :   sangsang-public-subnet-001
가용영역 :  기본 설정 없음(자동 선택)
IPv4 CIDR :   10.0.51.0/24

2번 서브넷
VPC :   sangsang-vpc-0001 선택
서브넷 이름 :  sangsang-private-subnet-001
가용영역 :  기본 설정 없음(자동 선택)
IPv4 CIDR :   10.0.52.0/24

1-4. 라우팅 테이블 정보

routing_info

라우팅 테이블 정보를 확인 한다.

VPC 생성시 같이 생성된 라우팅 테이블이 존재한다.

1-5. 라우팅 테이블 생성

routing_make
라우팅 테이블 생성 화면

서브넷과 연결할 라우팅 테이블을 생성한다.

이름 : public001-routetable
VPC : sangsang-vpc-0001

이름 : private001-routetable
VPC : sangsang-vpc-0001

1-6. 라우팅 테이블 서브넷 연결

생성후 해당 라우팅 테이블 선택 > 서브넷 연결 편집 선택 > sangsang-private-subnet-001 선택

routing_subnet_link

각각의 서브넷과 생성한 라우팅 테이블을 연결해 준다.

1-7. 인터넷 게이트웨이 생성

make_gateway

외부 통신을 할 수 있게 인터넷 게이트웨이를 생성한다.

1-8. 인터넷 게이트웨이와 VPC 연결

gateway_vpc_link01
gateway_vpc_link02

생성한 인터넷 게이트웨이를 VPC에 연결한다. 

1-9. Public001-routetable의 route 규칙 편집

이제 public subnet 에 속한 서버는 local network IP 이외의 대상과 통신할 경우 Internet Gateway 로 트래픽을 보낸다. 인터넷 통신은 Public IP 를 필요로 하기 때문에, public subnet의 서버는 public ip 를 가지고 있어야만 인터넷 통신이 가능하다. 외부와 직접 연결할 수 있는, 본인이 제어할 수 있으면서 외부와 연결되고 내부와는 격리돤 네트워크를 DMZ 라고 한다. 비록 외부에서 연결 가능한 DMZ(public subnet)내의 서버이지만, ACL이나 Security Group 을 통해 접근제어를 설정 할 수 있다.

Public001-routetable_route_edit
Public001-routetable의 route 규칙 편집

라우팅 테이블 선택 > public001-routetable 선택 > 라우팅 선택 > 라우팅 편집 선택 > 라우팅 추가 선택

Destination: 0.0.0.0/0
Target : Internet Gateway 선택

1-10. NAT 게이트웨이 생성

make_nat_gateway

public subnet 안에 통신-게이트웨이를 생성한다. 이를 NAT Gateway라고 한다.

이름 : sangsang-nat-gateway-01
서브넷 : sangsang-public-subnet-001
탄력적 IP 할당 : 탄력적 IP 할당

1-11. 프라이빗 서브넷 라우터 규칙 편집

이제 private subnet에 속한 서버는 로컬IP 이외의 대상과 통신할 경우 NAT Gateway 로 트래픽을 보낸다. private subnet에 속한 서버는 NAT Gateway 를 통해 인터넷 연결을 할 수 있으며, 이 때 사용하는 IP 는 NAT Gateway 에 할당된 IP이다. 이해하기 쉬운, 예를 들면, 일반적으로 사용하는 공유기의 경우 NAT Gateway 역할을 하며, 연결된 서버는 private subnet에 속한다. private subnet 에 속한 서버는 Public IP를 할당하더라도 사용할 수 없다. 외부에서 private subnet에 직접 접근은 불가능하다.

private-subnet_route-edit

private subnet 에서 local network 이외의 IP 에 대해서 NAT gateway 로 트래픽이 가도록 설정합니다.
private-subnet –routetable 이름의 서브넷 Routing Table의 Routing 규칙을 편집합니다.
  
Destination: 0.0.0.0/0
Target : NAT Gateway 선택

1-12. Network ACL 정보

Network-ACL_info

VPC당 최대 개수 200개 ACL당 규칙 목록  인바운드 20개, 아웃바운드 20개 ACL은 stateless이다.(트래픽에 대한 상태를 저장하지 않음)
네트워크 ACL
서브넷 레벨에서 운영됩니다.
허용 및 거부 규칙 지원
상태 비저장: 반환 트래픽이 규칙에 의해 명시적으로 허용되어야 함
트래픽 허용 여부를 결정할 때 번호가 가장 낮은 규칙부터 순서대로 규칙을 처리합니다.
연결된 서브넷의 모든 인스턴스에 자동 적용됨 (보안 그룹 규칙이 지나치게 허용적일 경우 추가 보안 계층 제공)

1-13. Network ACL 생성 및 서브넷 연결

각 서버 인스턴스에 방화벽을 설정할 수 잇는 것이 Security Group 이라면, 각 Subnet 에 대해서 방화벽(접근제어 설정)을 하는 것이 ACL 이다.
ACL은 서비스 구성에서 방화벽의 역할을 담당한다. 하나의 ACL을 여러 개의 Subnet이 사용한다.
인스턴스나 ELB등의 위치에서 동작하는 Security Group 보다 더 우선하여 동작한다.

make_Network-ACL_-_subnet_link
make_Network-ACL_-_subnet_link02

이름 : public-subnet-acl
VPC : sangsang-vpc-0001

이름 : private-subnet-acl
VPC : sangsang-vpc-0001

각각 서브넷 연결메뉴를 선택하여 해당 서브넷을 연결해준다.

1-14. Network ACL 규칙 편집1

Network-ACL_edit_rule_01

Public & Private subnet acl 인바운드 & 아웃바운드 규칙 편집

규칙 : 100   (번호)
유형 : 모두트래픽 
프로토콜 : 모두
포트범위 : 모두
소스 : 0.0.0.0/0
허용/거부 : ALLOW

위와 동일한 값을 퍼블릭, 프라이빗의 인바운드, 아웃바운드 ACL에 기본값으로 모두 입력해준다.

1-15. Network ACL 규칙 편집2

private subnet 의 서버들은, 위에서 설계한 네트워크 구조상 public subnet 에서만 접근이 가능하고, 또한 private subnet 의 network ACL 에 의해, public subnet 의 10.10.50.31 서버에서만 private subnet 의 ssh 에 접속할 수 있다. 이렇게 되면 internet 과 맞닿아있는 public subnet 의 다른 instance 가 장악되더라도 private 영역을 보호할 수 있게 된다.
10.10.50.31가 유일한 경로가 되며, 이 서버의 접근제어만 최우선적으로 관리하면 된다.

Network-ACL_edit_rule_02

Private subnet acl 인바운드 규칙 편집

규칙 : 90   (번호)
유형 : SSH(22) 
프로토콜 : TCP(6)
포트범위 : 22
소스 : 10.10.50.31/32
허용/거부 : ALLOW

규칙 : 91   (번호)
유형 : SSH(22) 
프로토콜 : TCP(6)
포트범위 : 22
소스 : 0.0.0.0/32
허용/거부 : DENY

규칙 : 100   (번호)
유형 : 모두트래픽 
프로토콜 : 모두
포트범위 : 모두
소스 : 0.0.0.0/0
허용/거부 : ALLOW

1-16. 보안 그룹 정보

secure_group_info

보안 그룹 정보를 확인 한다.
생성되어 있는 보안그룹의 VPC ID가 본인이 생성한 VPC ID와 일치하는지 확인해 둔다.
보안 그룹
인스턴스 레벨에서 운영됩니다.
허용 및 거부 규칙 지원
상태 저장: 규칙에 관계없이 반환 트래픽이 자동으로 허용됨
트래픽 허용 여부를 결정하기 전에 모든 규칙을 평가함
인스턴스 시작 시 누군가 보안 그룹을 지정하거나, 나중에 보안 그룹을 인스턴스와 연결하는 경우에만 인스턴스에 적용됨

1-17. 보안 그룹 추가(퍼블릭 서브넷용)

add_secure_group

퍼블릭 서브넷의 인스턴스에서 사용할 보안 그룹을 추가한다.