AWS를 처음 접할 때 많이 헷갈려 하는 부분이 바로 Network ACL과 Security Group일겁니다.

일반적으로 생각하는 방화벽과는 조금 다른 기능이라 그런 것 같습니다.

그리하여 오늘은 두 개의 보안 설정에 대한 개념정리를 해보겠습니다.


참고로 Network ACL은 VPC가 구성 되어야만 사용이 가능합니다.

VPC를 잠깐 설명드리자면 클라우드 환경에서 실제 IDC환경과 동일한 가상의 IDC환경을

구축 할 수 있도록 제공하는 기능입니다.


Network ACL은 외부간 통신을 담당하는 보안기능으로 서브넷 단위로 설정이 가능하며, Security Group는 내부간 통신을 담당하며 서버 단위로 정책을 설정할 수 있습니다.



 Network ACL : Stateless 필터링 방식

 Security Group : Stateful 필터링 방식


 ※ Stateful과 Stateless의 차이점

 Stateful : 요청 정보를 저장하여 응답하는 트래픽 제어를 하지 않음.

 Stateless : 요청 정보를 따로 저장하지 않기 때문에 응답하는 트래픽에 대한 필터링을 설정 해야함.



Network ACL과 Security Group의 전체적인 그림을 설명드리겠습니다.


경우1. 외부에서 접근

외부에서 서버로 접근하기 위해서는 Network ACL의 보안정책과 하위의 Security Group 보안정책에 적용됩니다.


경우2. 내부통신

동일 서브넷의 내부통신은 Security Group 보안정책만 적용됩니다.




여기까지만 보면 일반적인 보안이랑 크게 차이가 나지 않습니다.

하지만, Network ACL은 특정 포트와 통신 하기 위해서는 인바운드/아웃바운드 두 개의 정책을 다 써야한다고

명시되어 있습니다.




Network ACL은 기본적으로 인/아웃이 차단되어 있습니다.

예를 들어 80포트를 허용하였을 경우 방화벽의 경우는 아웃바운드가 차단이 되어도 외부에서 80포트로 접속하는데

문제가 되지 않지만, ACL의 경우는 아웃바운드가 차단이 되어 있으면 통신이 되지 않습니다.

위 이미지의 마지막 줄을 보시면 아웃바운드에 1024-65535 포트를 허용하라고 되어있습니다.


웹 서비스를 하기 위해서는 Network ACL의 인바운드/아웃바운드 정책이 하기 이미지와 같아야 합니다.

즉, 응답하는 서버의 sport도 허용 해주어야 통신이 됩니다.





여기에서 왜 1024-65535 포트를 허용하여야 하는지 궁금하신 분들도 계실겁니다.

위에서 언급한 것처럼 Stateless는 세션을 기억하지 않기 때문에 요청에 대한 응답을 할 경우 응답하는 대상의 Source Port 범위인 1024-65535를 추가 해주어야 한다는 말입니다.



그럼 Network ACL과 Security Group이 어떻게 동작하는 지 Case By Case로 알아보겠습니다.



 

 외부에서 내부로 들어오는 경우





위의 경우는 일반적인 사용자가 서버에 접근할 때 적용되는 정책입니다.

외부에서 요청이 오면 Network ACL 정책을 먼저 거친 후 Security Group 정책을 거치게 되며,

서버측 응답은 Security Group의 아웃바운드 정책은 거치지 않고 Network ACL정책만 거친 후 사용자에게 응답합니다.

여기서 주의 해야할 점은 Network ACL의 아웃바운드 정책에 1024-65535 정책이 없으면 응답을 할 수 없게 되는 것이죠..






위의 경우는 같은 서브넷에 서버가 존재할 경우는 Security Group정책만 따르게 됩니다.






위의 경우는 통신할 서버가 다른 서브넷에 존재할 경우 Case1 번과 같은 조건이기 때문에 1번과 동일하게 동작합니다.






 

 내부에서 외부로 나가는 경우


내부에서 외부로 나가는 경우는 위 3개의 Case와 반대로 생각하시면 됩니다.




위의 경우는 서버에서 외부로 접속을 시도할 때 Security Group의 아웃바운드 정책을 먼저 거친 후 Network ACL의 정책을 거치게 됩니다. 그리고 응답을 받을 때엔 Network ACL의 인바운드 정책만 적용이 됩니다.

여기서 주의해야 할 점은 Network ACL의 인바운드 정책에 1024-65535 정책이 있어야만 통신이 됩니다.






Case 2번과 동일합니다.





Case 4번과 동일합니다.





 

 결론


1. 서브넷이 다를 경우

: Network ACL 정책이 적용 됨


2. 서브넷이 같을 경우

: Security Group 정책만 적용 됨


3. Network ACL

: Stateless 기반으로 인바운드 / 아웃바운드 정책에 1024-65535 포트에 대하여 허용하여야 통신이 가능하다.


4. Security Group

: 방화벽 이라고 생각하시면 됨




'할롬::컴터 > AWS정보' 카테고리의 다른 글

[AWS] AWS-F50B간 BGP 설정  (0) 2013.05.21
[AWS] CLI Command Line 사용방법  (0) 2013.05.13




AWS를 사용하시다 보면 Management Console로만 사용하기에는 기능적으로 부족한 부분들이 있습니다.

그래서 AWS를 보다 완벽하게 사용하실려면 CLI를 통해서 작업을 하셔야 합니다.


기본적으로 CLI를 사용하기 위해서 AWS는 2가지 환경을 제공하고 있습니다.


1. 로컬PC를 통한 CLI환경 구성 (Windows, Linux, MAC)

2. AWS에서 제공하는 Instance를 이용한 환경 구성


위 두 가지 차이점은 비용이겠죠..


1번의 경우는 각 OS환경에 맞게 설정을 해야하는 번거러움이 있으며,

2번의 경우는 AWS에서 CLI기능이 들어간 Instance를 제공하므로 추가적인 설정이 필요없습니다.



두 가지 다 장단점은 있기 때문에 사용자 입맛에 맞는 걸 쓰시면 되고,

저는 1번을 기준으로 설명 드리겠습니다. (방법은 1번과 2번 차이는 없습니다.)



Windows, Linux 두 가지 OS에 대하여 설정하는 방법을 설명 드리겠습니다.



 

 공통적으로 필요한 프로그램


 1. JAVA
 2. Openssl

 3. ec2-api-tools (Tool 다운받기)




 

 Windows 설정 방법


 1. Java를 설치 합니다.

 2. 다운받은 ec2-api-tools를 원하는 경로에 압축 해제합니다.

 3. openssl 설치

     - 윈도우에서 openssl  설치는 손이 많이 가므로 쉽게 사용하실려면 apm을 설치하시면 별 다른 설정없이

       사용하실 수 있습니다. (APM 다운 받기)




설치가 완료 되었으면, openssl 을 이용하여 키를 생성하여야 합니다.


openssl genrsa 1024 > c:\pk.pem
 openssl req -new -x509 -nodes -sha1 -days 730 -key c:\pk.pem > c:\cert.pem
 기본값으로 설정하면 되므로 [Enter]




이제 2 개의 키가 생성되었으며, 추가적인 환경설정을 합니다. (폴더명이 다를 수 있으므로 환경에 맞게 수정)


 윈도우 내컴퓨터->속성->고급시스템설정->환경변수에 추가하여 사용하시면 됩니다.


 set JAVA_HOME="C:\Program Files (x86)\Java\jre7"
 set EC2_HOME="C:\ec2-api-tools-1.5.3.0"
 set PATH=%JAVA_HOME%\bin;%EC2_HOME%\bin;%PATH%
 set EC2_CERT=c:\cert.pem
 set EC2_PRIVATE_KEY=c:\pk.pem






 

 AWS IAM 설정 방법 및 권한


생성 된 키 중에서 cert.pem 키를 IAM 사용자에게 등록하여야 사용할 수 있습니다.

메모장으로 cert.pem 파일의 내용을 복사 한 후 키를 등록 합니다.





Permissions이 PowerUserAccess 권한 이상되어야만 명령어가 정상동작합니다.





이제 모든 설정이 완료 되었으며, 명령어가 정상적으로 동작하는지 확인 해 봅니다.

하기 이미지와 같다면 지금부터 CLI 를 사용하실 수 있습니다.






 

 Linux 설정 방법


 1. Java를 설치 합니다.

  : yum install java-1.7.0-openjdk.x86_64


 2. 다운받은 ec2-api-tools를 원하는 경로에 압축 해제합니다.


 3. openssl 설치

  : yum install openssl-devel




설치가 완료 되었으면, openssl 을 이용하여 키를 생성하여야 합니다.


 openssl genrsa 1024 > ~/pk.pem
 openssl req -new -x509 -nodes -sha1 -days 730 -key ~/pk.pem > ~/cert.pem
 기본값으로 설정하면 되므로 [Enter]




환경설정 (사용자에 맞게 설정하시면 됩니다.)


 사용자 Profile에 하기 내용을 추가하여 사용하시면 됩니다.


 export EC2_HOME=/root/ec2-api-tools-1.5.3.0

 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre

 export EC2_CERT=/home/aws/cert.pem
 export EC2_PRIVATE_KEY=/home/aws/pk.pem



여기까지 설정 되었으면 위의 [AWS IAM 설정 방법 및 권한]과 동일하게 설정하시면 됩니다.





AWS의 모든 CLI 명령어는 하기 주소에서 확인 하시면 됩니다.

http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/command-reference.html





'할롬::컴터 > AWS정보' 카테고리의 다른 글

[AWS] AWS-F50B간 BGP 설정  (0) 2013.05.21
[AWS] NetworkACL & SecurityGroup 개념  (6) 2013.05.14