Network Baseline : Network Security
NACL( Network Access Control List )
: 서브넷에 접근허용할 트래픽정보를 관리하는 가상의 방화벽 서비스
- 서브넷 단위로 적용 → 서브넷 내부의 모든 리소스에 규칙이 적용
- 서브넷에는 1개의 NACL만 적용가능( 1:1 ), 1개의 NACL이 여러 서브넷에 적용가능
- In-bound( 외부→내부 )트래픽의 허용/차단 규칙 정의 Out-bond( 내부→외부 )트래픽의 허용/차단 규칙 정의
- 우선순위 기반 순차적 평가
- 상태 비저장( stateless ) 방식의 방화벽
- : 정상통신을 위해서는 양방향 모두에 동일정책을 정의해야함( 특정 트래픽의 한방향만 정의하면 반대방향 통신에서는 차단됨 )
- Net ACL Quatos : 최대 기본 20개의 규칙
⇒ 제한이 있어서 많이 사용되지는 않음
보안그룹( Security Group )
: 리소스에 접근허용할 트래픽 정보를 관리하는 가상의 방화벽 서비스
- 리소스 단위로 적용 : VPC내 ENI(Elastic Network Interface, 가상의 네트워크 카드, 네트워크 관련 설정의 집합체)를 가지는 모든 리소스( ex. EC2 인스턴스 )
- 1개의 ENI에 여러 SG이 적용가능( 1:N ), 최대 5개
- In-bound( 외부→내부 )트래픽, Out-bond( 내부→외부 )트래픽의 허용규칙만 정의
- 상태 저장( stateful )방식의 방화벽 : In-bound 허용 규칙이 있을 경우 Out-bound 허용 규칙이 없어도 통과, 통신가능
- 모든 규칙을 평가하여 허용된 트래픽만 통과
- Security Group Quotas : 최대 60개의 규칙 → ENI별 최대 5개할당 ⇒ 리소스 단위 최대 규칙 1000개
소스(Source) 값이 다른 보안 그룹의 ID : 해당 보안 그룹에 속한 모든 리소스에서 오는 트래픽을 허용한다는 의미 ( 보안그룹에 속한 리소스간의 통신 )
Network ACL과Security Group의비교( 중요 )
트래픽 흐름 : 인터넷 → NACL(서브넷) → 보안 그룹(ENI) → EC2 인스턴스
- NACL : 모든 트래픽을 허용, 차단할 IP대역이나 포트를 지정하여 차단
- SG : 리소스단위로 허용되어야할 프로토콜, 포트를 세부적으로 지정
Computing Service
Elastic Compute Cloud( EC2 )
AWS에서 제공하는 가상 서버 서비스 → 탄력성( scale-out, scale-in ), 워크로드에 맞는 인스턴스 제공, 온드맨드 방식, 커스터마이징, 고가용성 등
[ Virtual Server Structure ]
: 대표적인 IaaS 서비스로 가상화된 컴퓨팅자원(인스턴스)을 제공
- Hpyervisor로 하드웨어 자원(인프라)를 가상화 → 여러 가상서버 독립적 구축, 독립적인 운영체제( guestOS )를 가지고 실행
- 여러 리소스와 연계하여 동작 ( AMI, 데이터 : EBS, 네트워크 : VPC, 백업 : snapshot, 고정 IP : Elastic IP )
[ EC2 Instance type ]
: Family, Generation, Attributes, Size로 구성 → 서비스 요구사항에 적합한 컴퓨팅 리소스 선택 가능
- Instance Family : 기능별, 성능별로 인스턴스 유형을 묶어 패밀리단위로 구분
- Instance Generation : 주기적으로 최신기술을 반영한 신규세대 인스턴스가 출시 ( 비용절감 혹은 성능향상 ) ⇒ Region, AZ별로 지원되는 인스턴스 세대가 다름
- Instance Attribute : 추가지원되는 기능 → d,b,e속성은 스토리지에 최적화
- Size : 인스턴스 크기에 따라 처리량이 상이( nano (최소)< small < medium < large < xlarge< … 112xlarge (최대)까지 확장 )
사이즈가 커질때마다 리소스 사용량이 2배씩 커지는 규칙
[ AMI( Amazon Machine Image ) ]
: EC2 인스턴스를 생성하기 위한 템플릿으로( 생성시 항상 설정 ) 운영체제 및 필요한 소프트웨어가 포함( 인스턴스의 특정시점을 캡처하여 백업할 수 있도록 함 )
- 3가지 구성요소
- 루트 볼륨 템플릿 : 운영체제, 라이브러리 등
- 인스턴스 시작 설정값
- AMI 권한관리정보( permission ) : Public / Private
- Region단위로 저장 → 해당 Region에 존재하지 않으면 Region간 복사 n번 Region에서 생성후 m번 Region, k번 Region으로 복사
- S3에 저장되며 저장비용 발생
- EC2 백업 및 복제 ( 장애발생시, Auto Scale진행시 활용 )
DevOps CI/CD 환경에서 개발환경을 사전구성하여 테스트수행
- EC2 Instance AMI & Marketplace
- AWS AMI : AWS에서 기본으로 제공하는 이미지 ( 자주 사용되는 운영체제 위주 ), 정기적인 보안 업데이트 제공
- Marketplace AMI : Thrid-party벤더가 생성한 이미지 ( 보안 소프트웨어, DB서버 용도 ), 사용시 사용료 부과( EC2 비용 제외 플랫폼자체의 비용 ) 솔루션에서 AMI를 설치한 EC2를 제공
- Community AMI : AWS사용자(개인)가 생성한 이미지를 공유( Permission설정은 Public으로 설정 ) → 보안과 안정성 검토 필수( 가급적 사용하지 말 것 )
- Sharing AMI : 특정 사용자(허가된 계정)간 공유하는 이미지( 조직내 협업, 프로젝트에서 이용 )
[ Public IP와 Elastic IP ]
- Public IP : 생성시에 자동할당되는 IP 생성되는 public subnet에 퍼블릭 IP자동할당 체크 인스턴스 중지후 재시작마다 새로운 IP 할당( 무료 )
- Private IP : 생성후 명시적으로 할당하는 IP를 EC2에 매핑 → 영구적인 IP( 유료 )
[ User Data ]
EC2 인스턴스 시작시 초기설정을 자동화하는 스크립트( 명령어 )
인스턴스가 최초 생성되는 부팅시에 한번만 실행 ⇒ 인스턴스 설정 자동화( 서버가 꺼졌다 켜질때도 자동으로 실행 )
root권한 & 운영체제에 따라 다른 형식 ( 리눅스 서버 : bash script, 윈도우 서버 : power shell script )
EC2 서비스 구성 실습
[ Bastion host 생성 (lab-edu-ec2-bastion) ]
- AMI는 Amazon Linux 2023, type은 t3.micro, RSA유형의 키페어생성(lab-edu-key-ec2.pem)
- 네트워크 설정 : VPC설정, 첫번째 pub서브넷에 할당, 퍼블릭IP 자동할당 활성화
- 보안그룹 생성(lab-edu-sg-bastion)
- SSH : 인바운드의 소스(트래픽의 발신지)로 내 IP설정( 소스 유형을 위치 무관으로 하면 탈취될 수 있음 내 IP로 한정 )
- HTTP : Anyopen → 내 IP로 추가
Bastion host 접속 ( mobaxterm ) : 생성한 키 페어를 사용하여 접속
퍼블릭 IP주소를 이용하여 접속 → 프라이빗 IP주소(서브넷에서 할당받은 IP주소)에 접속됨
윈도우 CMD로도 접속가능
ssh -i 인증키파일 ec2-user@{bastion의 PUBLIC_IP}
[ Web server 생성 ( lab-edu-ec2-web ) ]
- AMI는 Amazon Linux 2023, type은 t3.micro, 기존의 키페어 등록(lab-edu-key-ec2.pem)
- 네트워크 설정 : VPC설정, 첫번째 private서브넷에 할당, 퍼블릭IP 자동할당 비활성화
- 보안그룹 생성(lab-edu-sg-web)
- SSH : 인바운드의 소스(트래픽의 발신지)로 사용자지정 VPC네트워크를 지정( 10.0.0.0/16 ) = VPC내부에서만 SSH접속을 허용
- HTTP : 기존보안그룹? 10.0.0.0/16? 해당 보안그룹의 인스턴스나 리소스가 출발지로 설정
User Data영역( 고급세부정보 )에 파이썬 설치 스크립트(install_python.sh)를 저장
[ Putty를 이용한 Web서버 접속 ] : bastion을 이용한 접속
PuTTYgen으로 pem키 사전등록 : 키본 ppk형식이 아닌 *.*형식에서 pem 키 찾아서 로드 ( PuTTY는 PPK(PuTTY Private Key) 형식만 지원 )
Connection-SSH-Auth-Credentials등록, Session에서 HostName+IP입력하고 세션 save
lab-edu-ec2-bastion에 접속 → pem 키페어를 복사하여 파일로 내용 저장 ( vim Editor 이용 → 파일명: lab-edu-key-ec2.pem )
pem 키파일 권한설정 ( chmod 600 ) → 보호
chmod 600 lab-edu-key-ec2.pem
Bastion 서버(10.0.0.59)에서 pem키를 이용하여 web서버의 private IP주소(10.0.40.245)로 ssh 접속
ssh -i lab-edu-key-ec2.pem ec2-user@{ web서버 private IP }
로그확인
vim /var/log/cloud-init-output.log
[ Proxy설정 ]
Bastion Server를 Proxy Server로 사용 → private IP에서 만든 Web Server를 public IP로 접근가능
setting_bastion.sh 파일 : Bastion Server를 web server로 접속하기 위한 프록시 환경을 세팅하는 스크립트 파일
AWS 계정인증( lab-edu-iam-user-22에서 엑세스키 생성하여 이용 )
aws configure : IAM user가 자격 증명(access/secret key)을 사용해 AWS 서비스에 접근 권한을 설정하는 명령
파일권한 설정
sudo chmod +x setting_bastion.sh
파일 실행
./setting_bastion.sh
Bastion 서버의 Public IP로 접속하면(포트없음) Web Server로 자동연결 이때 web server에는 EC2 관련 데이터 접근을 위한 IAM 권한이 없기에 에러페이지가 반환됨( admin권한으로 EC2를 생성 하였지만 없음, Crendential Error발생 )
[ Instance Profile (IAM Role)를 통한 EC2 인스턴스에 권한할당 ]
EC2 서비스에 부여가능한 IAM Role을 생성한다 ( lab-edu-role-ec2 )
AmazonEC2FullAccess : EC2와 관련된 모든 작업을 허용하는 광범위한 권한을 부여 = EC2 리소스를 완전히 관리
EC2 인스턴스에 할당 EC2 메인 콘솔 화면 → 인스턴스 리소스 탭 → lab-edu-ec2-web 선택 → 작업 → 보안 → IAM 역할 수정
이후 인스턴스 재부팅
웹서버에서 80번 포트가 LITSEN 상태가 아니라면 → 브라우저를 통해 Streamlit 애플리케이션에 접근할 수 있도록 설정
정상권한으로 접근된다.
[ VS Code server 생성(lab-edu-ec2-vscode) ]
- AMI는 Ubuntu 24.04 LTS type은 c7i.2xlarge 기존의 키페어 등록(lab-edu-key-ec2)
- 네트워크 설정 : VPC설정, 두번째 public 서브넷에 할당, 퍼블릭IP 자동할당 활성화
- 보안그룹 생성(lab-edu-sg-vscode)
- SSH : 인바운드의 소스(트래픽의 발신지)로 내 IP 지정
- TCP : 인바운드의 소스(트래픽의 발신지)로 내 IP 지정 & 포트범위 8080 ⇒ 로컬 컴퓨터에서 8080 포트로 접속 가능
이외 설정 : 스토리지 구성 : 100GiB, gp3 유형
고급세부확장 - Userdata영역에 install_vscode.sh 복사 AWS_ACCOUNT_ID, AWS_REGION에 적절한 값 입력 USER_NAME = rudals, PW = CJ_CloudWave2025!!
접속 : 웹 브라우저에서 {VS_CODE_SERVER_PUBLIC_IP}:8080 접속
Workspace Setting & github에서 sample 소스코드 다운로드
Workshop 폴더 open시에 새로운 코드가 세팅되어있음
SSH Config 설정 : VS Code Terminal에서 Bastion, Web Server에 SSH로 접속하기 위한 설정
인증키를 생성 → /.ssh경로로 이동
config파일을 생성하고 등록하여 bastion, web-server에 접속가능하도록 함 ( VSCode의 SSH 연결 설정 ) → /.ssh 경로로 이동하여 키 확인
VS Code Terminal에서 ssh 명령을 통해 Web Server 접속
'CLOUDWAVE' 카테고리의 다른 글
Public Cloud(AWS) : Storage Service - EBS, S3 (0) | 2025.01.22 |
---|---|
Public Cloud(AWS) : Computing service - ELB, Auto Scaling (0) | 2025.01.21 |
Public Cloud(AWS) : IAM / Network Baseline - VPC, Subnet, Routing Table, Public IP, Routing table, Internet gateway, NAT gateway (0) | 2025.01.21 |
Public Cloud(AWS) : Cloud Fundamental ( 25.01.15 ) (0) | 2025.01.21 |
Docker 정리 (0) | 2025.01.16 |