벤자민의 블로그 2기 시작
2023년 6월 13일 갑작스러운 부친상을 격고나서 무언가를 한다라는 것에서 거의 손을 대지 않고 있었네요. 슬프다거나 그런 감정보다는 그냥 무언가 빠져버린
AWS에서 EC2는 쉽게 말하면 클라우드상의 가상 서버를 말한다.
Amazon Elastic Compute Cloud(Amazon EC2)는 다음의 기능을 제공한다.
Amazon Virtual Private Cloud(Amazon VPC)는 사용자가 정의한 가상 네트워크를 말한다.
Amazon VPC는 Amazon EC2의 네트워크 계층으로. 다음과 같은 개념을 가지고 있다.
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스로 IAM을 사용하여 리소스를 사용하도록 인증 및 권한부여 된 대상을 제어함.
IAM에서는 다음의 기능을 제공한다.
IAM 액세스 방법
네트워크 ACL(액세스 제어 목록)은 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 역할을 하는 VPC를 위한 선택적 보안 계층이다. 보안 그룹과 비슷한 규칙으로 네트워크 ACL을 설정하여 VPC에 보안 계층을 더 추가할 수 있다.
기타 용어 설명
네트워크 ACL은 상태 비저장이다. 즉, 허용되는 인바운드 트래픽에 대한 응답은 아웃바운드 트래픽에 대한 규칙을 따르고, 그 반대의 경우에도 마찬가지다.
VPC당 네트워크 ACL 수 및 네트워크 ACL당 규칙 수에 대한 할당량(제한)이 있다. VPC당 네트워크 ACL은 200개까지 생성가능하다. 그리고 하나의 네트워크 ACL당 20개의 규칙이 할당 가능하다.
네트워크 ACL규칙
a. 규칙 번호. 번호가 가장 낮은 규칙부터 평가된다. 규칙에 일치하는 트래픽이 있으면 이와 모순되는 상위 규칙이 있더라도 적용된다.
b. 유형. 트래픽 유형(예: SSH). 모든 트래픽 또는 사용자 지정 범위를 지정할 수도 있다.
c. 프로토콜. 표준 프로토콜 번호를 가진 어떤 프로토콜이든 지정할 수 있다. 자세한 내용은 프로토콜 번호를 참조. ICMP를 프로토콜로 지정하면 ICMP 유형과 코드 중 일부 또는 전부를 지정할 수 있다.
d. 포트 범위. 트래픽에 대한 수신 포트 또는 포트 범위. 예를 들어, HTTP 트래픽의 경우 80이다.
e. 소스. [인바운드 규칙만 해당] 트래픽의 소스(CIDR 범위)다.
f. 대상. [아웃바운드 규칙만 해당] 트래픽의 대상(CIDR 범위)이다.
g. 허용/거부. 지정된 트래픽을 허용 또는 거부 할지 여부이다.
자동으로 생성 되어 있는 리소스의 활용이 가능하다면 해당 리소스를 활용하는 것도 가능하다. 단, 여기에서 설명하는 퍼블릭과 프라이빗의 개념을 적용하여 구현하도록 한다.
VPC 대시보드 화면
최초 접속시 아무것도 생성
되어 있지 않은 상태.
1-1. VPC 생성
동일 리전당 기본 5개까지 생성가능하다. 리소스 증가 요청을 통해 최대 100개까지 생성할 수 있다.
동일한 VPC 내 서버끼리는 통신할 수 있다.
VPC 생성화면
Name : sangsang-vpc-0001
Ipv4 CIDR 블록 정보 : 10.0.0.0/16
테넌시 : 기본값
1-2. VPC 세부 정보
VPC 세부 정보
VPC 생성후 세부 정보 화면
VPC를 생성하면 자동으로 DHCP옵션 셋트와 라우팅 테이블 네트워크ACL이 생성된다.
VPC 이름과 IPv4 CIDR이 제대로 입력되었는지 확인한다.
1-3. 서브넷 생성
서브넷 생성 화면
서브넷을 생성한다.
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. 라우팅 테이블 정보
라우팅 테이블 정보를 확인 한다.
VPC 생성시 같이 생성된 라우팅 테이블이 존재한다.
1-5. 라우팅 테이블 생성
라우팅 테이블 생성 화면
서브넷과 연결할 라우팅 테이블을 생성한다.
이름 : public001-routetable
VPC : sangsang-vpc-0001
이름 : private001-routetable
VPC : sangsang-vpc-0001
1-6. 라우팅 테이블 서브넷 연결
생성후 해당 라우팅 테이블 선택 > 서브넷 연결 편집 선택 > sangsang-private-subnet-001 선택
각각의 서브넷과 생성한 라우팅 테이블을 연결해 준다.
1-7. 인터넷 게이트웨이 생성
외부 통신을 할 수 있게 인터넷 게이트웨이를 생성한다.
1-8. 인터넷 게이트웨이와 VPC 연결
생성한 인터넷 게이트웨이를 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 규칙 편집
라우팅 테이블 선택 > public001-routetable 선택 > 라우팅 선택 > 라우팅 편집 선택 > 라우팅 추가 선택
Destination: 0.0.0.0/0
Target : Internet Gateway 선택
1-10. NAT 게이트웨이 생성
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 에서 local network 이외의 IP 에 대해서 NAT gateway 로 트래픽이 가도록 설정합니다.
private-subnet –routetable 이름의 서브넷 Routing Table의 Routing 규칙을 편집합니다.
Destination: 0.0.0.0/0
Target : NAT Gateway 선택
1-12. Network ACL 정보
VPC당 최대 개수 200개 ACL당 규칙 목록 인바운드 20개, 아웃바운드 20개 ACL은 stateless이다.(트래픽에 대한 상태를 저장하지 않음)
네트워크 ACL |
서브넷 레벨에서 운영됩니다. |
허용 및 거부 규칙 지원 |
상태 비저장: 반환 트래픽이 규칙에 의해 명시적으로 허용되어야 함 |
트래픽 허용 여부를 결정할 때 번호가 가장 낮은 규칙부터 순서대로 규칙을 처리합니다. |
연결된 서브넷의 모든 인스턴스에 자동 적용됨 (보안 그룹 규칙이 지나치게 허용적일 경우 추가 보안 계층 제공) |
1-13. Network ACL 생성 및 서브넷 연결
각 서버 인스턴스에 방화벽을 설정할 수 잇는 것이 Security Group 이라면, 각 Subnet 에 대해서 방화벽(접근제어 설정)을 하는 것이 ACL 이다.
ACL은 서비스 구성에서 방화벽의 역할을 담당한다. 하나의 ACL을 여러 개의 Subnet이 사용한다.
인스턴스나 ELB등의 위치에서 동작하는 Security Group 보다 더 우선하여 동작한다.
이름 : public-subnet-acl
VPC : sangsang-vpc-0001
이름 : private-subnet-acl
VPC : sangsang-vpc-0001
각각 서브넷 연결메뉴를 선택하여 해당 서브넷을 연결해준다.
1-14. Network ACL 규칙 편집1
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가 유일한 경로가 되며, 이 서버의 접근제어만 최우선적으로 관리하면 된다.
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. 보안 그룹 정보
보안 그룹 정보를 확인 한다.
생성되어 있는 보안그룹의 VPC ID가 본인이 생성한 VPC ID와 일치하는지 확인해 둔다.
보안 그룹 |
인스턴스 레벨에서 운영됩니다. |
허용 및 거부 규칙 지원 |
상태 저장: 규칙에 관계없이 반환 트래픽이 자동으로 허용됨 |
트래픽 허용 여부를 결정하기 전에 모든 규칙을 평가함 |
인스턴스 시작 시 누군가 보안 그룹을 지정하거나, 나중에 보안 그룹을 인스턴스와 연결하는 경우에만 인스턴스에 적용됨 |
1-17. 보안 그룹 추가(퍼블릭 서브넷용)
퍼블릭 서브넷의 인스턴스에서 사용할 보안 그룹을 추가한다.