[AWS] Amazon VPC 천천히 이해하기 - 1
앞선 글에서는 Amazone VPC와 Subnet에 대해서 알아보았습니다.
다음 포스트는 아래 도표와 같이 네트워크를 구성해보고, Public subnet에 Bastion Host를 만들어 Private subnet에 위치한 instance를 접근하는 방법에 대해 알아보려합니다.
이번 포스팅에서는 Public, Private subnet을 만들어 보고, 그에 맞는 Route table 설정과 Network ACL를 알아보겠습니다.
VPC, Subnet
Amazon VPC Dashboard에 들어가 Your VPCs를 클릭하면 Create VPC 버튼이 상단에 표시 됩니다. 이 버튼을 클릭하면 위 화면이 나타나며 새 환경을 생성 할 수 있습니다.
VPC를 만들었다면, Subnet을 만들 차례입니다. 좌측에 보이는 Subnets에 들어가 Create Subnet을 클릭하면 새로운 Subnet을 만들 수 있습니다.
저는 아래 표와 같이 4개의 Subnet을 AZ에 분산하여 만들었습니다.
Name | VPC | AZ | IPv4 CIDR Block |
test-vpc-public-1 | test-vpc | ap-northeast-1a | 10.1.111.0/24 |
test-vpc-public-2 | test-vpc | ap-northeast-1c | 10.1.131.0/24 |
test-vpc-private-1 | test-vpc | ap-northeast-1a | 10.1.211.0/24 |
test-vpc-private-2 | test-vpc | ap-northeast-1c | 10.1.231.0/24 |
Route table
Subnet을 정상적으로 만들었다면 Subnet의 Route table을 설정해 주어야 합니다. Route table에는 네트워크 트래픽을 전달할 위치를 결정하는 데 필요한 Routing의 규칙을 설정합니다.
앞선 절차에서 Subnet을 Public과 Private으로 나누어 만들었습니다. Public subnet의 경우 외부와 통신이 가능해야하며, Private subnet의 경우 외부와 통신이 불가능 해야합니다. 그러므로 Routing table 또한 Public subnet 들과 Private subnet들이 다르게 가져야 합니다.
Route table은 VPC가 생성됨과 동시에 자동으로 생성됩니다.
자동으로 만들어진 Route table을 public용 Route table로 명명하고, Create route table 버튼을 클릭해 private용 route table을 만들 수 있습니다.
Route table을 정상적으로 만들었다면, Private Route Table에 두개의 Private Subnet이 지정될 수 있도록 설정해 주어야합니다. 이는 해당 테이블 클릭 후, Subnet Association 코너에서 Private Subnet을 할당 할 수 있습니다.
아무 설정도 안한 Subnet(public)들은 자동으로 Main route table(public)에 할당됩니다.
Internet Gateway
이제 4개의 Subnet과 Route table을 만들었습니다. 이번 챕터에는 Public Subnet들이 인터넷과 통신할 수 있는 환경을 만들어보려 합니다.
VPC를 생성하면 기본적으로 외부 통신과 단절된 상태로 생성 됩니다. 네트워크 안에 있는 노드들은 internal ip로 통신하기 때문에 아마존에서 제공하는 Internet gateway를 기능을 이용해야 외부와 통신이 가능합니다.
왼쪽 배너에 보이는 Internet Gateways를 클릭하면 상단에 Create Internet gateway이 생성됩니다. 이를 이용해 internet gateway를 손 쉽게 만들 수 있습니다.
VPC를 만들었다면 Actions 버튼을 클릭해 자신의 VPC에 Attach 해주어야 합니다.
정상적으로 Attach 되었다면, Route Table 설정으로 돌아와 Public Route Table에 모든 traffic이 Internet gateway로 향할 수 있도록 지정해줍니다.
Network ACL
이번 챕터에서는 ACL(Access Control List)를 사용해서 Subnet으로 유입되는 Traffic을 제어 해보겠습니다.
네트워크 Infra 구축 시 패킷의 Source Address와 Destnation Address, 서비스가 사용하는 Port등을 고려하여 Inbound & Outbound 패킷을 허용하거나 거부할 정책을 설정해야합니다. Amazon VPC에서는 이를 손쉽게 콘솔에서 제어할 수 있습니다.
NACL 설정에 앞서 ACL의 특징을 살펴 보겠습니다.
- VPC의 NACL은 Subnet 단위로 설정 할 수 있습니다.
- ACL 규칙은 번호가 낮은 것 부터 우선적으로 적용됩니다.
- ACL은 stateless 합니다.
Statless 라는 특징은 ACL에서 가장 중요한 특징 중 하나 입니다. ACL은 Statless 하므로 traffic에 stat를 가지지 않고, Inbound & Outbound Rule에 의해서만 동작합니다 예를들어 INBOUND rule에 80 port를 allow하고 OUTBOUND에는 Deny한다면, 외부에서 80번 포트에 request를 전송할 수 있지만 내부에서 밖으로는 80 port를 통해 response가 전송되지 않습니다. 이런 특징을 잘 생각하며 ACL의 정책을 세워야 합니다.
이번 글에서는 Private subnet에 있는 Instance에 Public bastion host를 통해 ssh 터널링을 해보는 것이 목적이기에 이에 맞는 설정을 해보겠습니다.
NACL은 VPC가 생성됨과 동시에 default NACL이 만들어집니다. 이를 public NACL로 설정하고 새로 Private NACL을 만들어 주여야합니다.
먼저 왼쪽 배너에 Security 밑에 있는 NACL을 클릭 후, Create NETWORK ACL 버튼을 클릭해 private ACL를 만들어줍니다.
그 다음 Private의 INBOUND Rule을 위와 같이 설정해줍니다. 이는 private subnets에 대한 NACL이기 때문에 Source address는 VPC Network인 10.1.0.0/16을, Type은 ssh를 선택해 정책을 생성해 줍니다.
OutBound의 경우 10.1.0.0/16에 대해 ALL TCP 프로토콜이 통신 가능하도록 만들어 줍니다.
INBOUND, OUTBOUND Rule 설정 후 Subnet associations 코너에서 private subnet들을 assign 해줍니다.
Public ACL의 경우 INBOUND는 ssh port만, outbound의 경우 TCP 프로토콜만 허용해 주시면 됩니다. 만약 특정 IP에서만 접근 가능하도록 만들고 싶다면 source ip와 destination ip를 설정해주시면 됩니다.
Security Group
ACL과 달리 Security Group은 Instance에 대한 traffic을 제어합니다.
Security Group의 특징을 몇가지 정리하자면
- 같은 Subnet안에 통신은 Security group의 rule이 적용된다.
- Security Group은 stateful합니다.
Security Group은 NACL과 다르게 state를 기억하기 때문에 NACL과 INBOUND Rule에 80번 포트를 allow해두었다면, OUTBOUND rule에 상관없이 response를 보낼 수 있습니다.
Public에 들어갈 Instance와 Private에 들어갈 Instance는 다른 정책을 가져야 하기에 두가지의 Security Group을 만들어 주어야 합니다.
왼쪽 배너의 Security Group 클릭 후 Create Security Group 버튼을 클릭해 만들 수 있습니다.
public sg를 만들었다면 위와 같이 INBOUND RULE을 설정해줍니다.
위의 방법과 같이 private sg를 만든 후 Inbound Rule을 설정할 수 있습니다. Security group의 경우 source에 ip를 기입 할 수 있지만, Security Group 자체를 Source에 등록할 수 있습니다. 이번에는 public용 sg를 등록해 진행하겠습니다.
NACL, Security Group..
지금까지 직접 VPC를 만들어보고 상황에 맞는 Subnet, Route table, NACL, SG를 만들어 보았습니다. NACL과 SG의 경우 보안에 직접적으로 연결되는 만큼 각 특징들을 잘 생각하며 운용해야 합니다.
다음 글에서는 지금 까지 환경 위에서 Bastion host를 만드는 것에 대해 알아보도록 하겠습니다.