Infra

AWS_CLOUD_1st

elenalee 2025. 8. 22. 10:53

1. Cloud Service

1) 서비스 및 사업자 

(1) 사업자 유형

- CSP(Cloud Service Provider) : Cloud 서비스 제공자 

- MSP(Managed Service Provider) : Cloud 도입/구축/운영 등 관리서비스 제공자

AWS가 점유율 높음 ( https://www.emma.ms/blog/top-10-cloud-computing-service-providers )

 

(2) 클라우드 서비스 유형 

- IaaS : Infra서비스 대여  예) EC2

- PaaS : Platform서비스 대여  예) RDS : 완전 관리형 DB - 이중화, 백업 등의 관리기능 포함

- SaaS   

 

2) AWS 기본 설정 

(1) IAM (Identity and Access Management)

- 접근제어 서비스( 사용자, 그룹, 역할 및 권한을 관리 )

- 중앙집중식, 세분화된 접근제어, 정책기반 관리, MFA(다중 인증지원)

- 권장 설정 : 

   루트 계정이 아닌 IAM사용자 생성

   MFA필수 생성

   정책은 최소 권한원칙

   AccessKey주기적 교체

   CloudTrail로 IAM활동 로깅 및 모니터링 


① IAM 사용자  - 개별 resource에 접근할 수 있는 계정

② 그룹 - 여러 사용자를 묶는 단위

③ 역할(Role) - 특정 권한을 가진 임시권한 세트 

④ 정책 (Policy)

    - 권한을 정의한 문서

    - 누가(Principal)이 어떤 Resource에 어떤 조건(Condition)으로 어떤 작업(Action) 수행

 자격증명 (Identity)

   - 리소스 접근시 사용자 이름, 비밀번호, AccessKey등의 자격증명 필요  

 

(2) 인증과 인가 

① 인증 : 비밀번호, MFA, 엑세스 토큰 

② 인가 : 요청에 대해 정책을 평가하여 인가여부 허용/거부

 

(3) Resources 

① 리소스 생성 방법

   - Web Console, AWS SDK, AWS CLI, CloudFormation/Terraform 

 

 고가용성 ( 지역 및 가용영역 )

- Region ( 물리적으로 격리된 데이터 센터의 그룹 ) 

- AZ(Availiability Zone: 가용 영역) : 하나의 region내 독립적인 데이터 센터 ( Region별로 2~3개 )

리소스별로 리전, 가용영역 설정 규정 다름

 

3) 사용 권한 

(1) 접근보안 

① 로그인 접근

AWS Management Console에 접근

 

② IAM권한 없는 경우 

인가가 안된것임 (인증뒤에)

 보안자격증명 : MFA할당 (구글 authenticator)

 

(2) 정책 생성 

- 권한 설정 ( JSON 형태로 Custom가능, 지역별 구분 있으나 s3는 region관계 없이 가능 ) 

- Sid, Effect, Action, Resource ( 리전/버킷 이름 설정 )

- Statement 내부에 배열 형태로 여러 개의 권한 조건을 설정 ( +문 추가 )

 

(3) 권한 설정

 추가 생성한 IAM 계정에 권한주기 

 

4) EC2 

- 가상머신(VM)형태의 인스턴스를 제공하는 컴퓨팅 서비스 

- 운영체제, CPU, 메모리, 디스크 등 하드웨어 자원을 유연하게 설정 

 

CPU집약적 작업(컴퓨팅 최적화 인스턴스,C5), 메모리 집약적 작업(메모리 최적화 인스턴스,R5)

** 인코딩, 압축 풀기등이 메모리 집약적

 

(1)설정 

 AMI(EC2 실행 template) : 소프트웨어 환경을 정의한 이미지 파일 

- OS, 어플리케이션, 네트워크, 보안 설정

- AmazonLinux, MacOS, Ubuntu, Window, RedHat, .. 등등의 다양한 이미지 

 

 IP 

- 기본적으로 동적 IP할당

- Elastic IP ( 고정된 퍼블릭 IP이며 인스턴스와 독립적으로 존재, 등록하여 연결 )

** 탄력적 IP삭제 : release (삭제 없음)

 

 방화벽

- 보안그룹 : inbound규칙과 outbound 규칙을 설정하여 트래픽을 제어

- 기본구성

   inbound : 모든 traffic차단 후 특정 ip나 포트에 대해서만 허용, 

   outbound : 모든 traffic허용 후 특정 ip나 포트에 대해서만 차단 

 

 접속

- 키페어 방식으로 인스턴스 접속 (mobaxterm이나 putty등으로 접속)

 

 User data

- EC2 인스턴스 시작시 실행할 명령어/스크립트 제공 (특정 소프트웨어 설치나 설정 수행)  

   예) nginx등의 기본적인 구동을 설정

 

(2) 구동 설정

region설정  인스턴스 시작   인스턴스 이름 설정  이미지(OS)  인스턴스 유형  키페어 설정(ssh접속시 사용할 키페어 생성 후 로컬에 저장하여 사용 )   네트워크 설정 (보안그룹 생성 ,보안그룹 설정을 편집하여 이름을 변경해 줌)   스토리지   고급 설정 ( User data등을 삽입하여 초기 설정 )

 

(3) 인스턴스 접속 

 EC2 Instance Connect로 연결 (AWS EC2 페이지에서 연결 버튼으로 브라우저 로딩하여 접속) 

 Key-pair를 이용하여 SSH로 접속 

 

(4) Role 생성 (임시 권한)

- 특정 권한을 가진 임시권한 세트를 생성하여 특정한 리소스에 설정 

- 개별 리소스, 외부 계정이나 서비스의 접근에 대한 설정을 허용할수 있음  

 

 IAM에서 역할생성 (EC2에 S3의 접근가능한 역할 생성)

 

② AccessKey 활용

- AWS CLI나 SDK 같은 도구를 사용하여 AWS 리소스를 관리할 때 사용

- User - 보안 자격증명 -  accesskey생성 (access Key와 비밀 key) 

- accesskey발급 후 aws configure에서 key를 입력하고 데이터 형태 확정 

#S3 bucket 확인
aws --version
aws-cli/2.27.57 Python/3.9.23 Linux/6.1.147-172.266.amzn2023.x86_64 source/x86_64.amzn.2023
[ec2-user@ip-10-0-1-87 ~]$ aws configure
AWS Access Key ID [None]: myaccesskeyID
AWS Secret Access Key [None]: mysecretKey
Default region name [None]: 
Default output format [None]:json  

[ec2-user@ip-10-0-1-87 ~]$ aws s3 ls
2025-08-20 13:26:37 sesac.tutor.bucket

 

 

(5) 시작 template 

- Resource 기본 옵션이나 이미지로 프로비져닝 옵션을 미리 지정해둠 

- 시작 Template설정 ( OS를 비롯한 각종 옵션 설정)

- 인스턴스의 이미지로 구동중인 EC2의 이미지를 스냅샷으로 저장 

   ( template에서 (내 AMI) 에서 추가 )

 

 

5) VPC 

- AWS내에서 논리적으로 격리된 네트워크 ( 클라우드 리소스를 논리적 격리 )

- IP주소범위, 서브넷, 라우팅 테이블, 네트워크 게이트웨이 설정 필요 

- VPC는 EC2와 동일 Region, 서브넷과는 동일 가용 영역내에 위치   

 

(1) Subnet 

- VPC 내에서 격리된 네트워크 

   예) VPC_A : 10.1.0.0/16에서 2개로 구분 ---> 10.1.1.0/24, 10.1.2.0/24

 

① Public Subnet

 - 외부 Internet 접근이 가능하도록  Internet Gateway설정 

 - Routing Table에서 Internet Gateway주소를 설정  

 

② Private Subnet (Default)

- 서브넷의 기본 설정 (inbound 차단), 내부 VPC의 리소스만 접근 가능 

- Private 내부 리소스가 인터넷 사용시, NAT 게이트웨이를 활용하여 outbound설정 

  ( Private 내부 리소스 접근시 Bastion Host나 EICE활용 )

 

** 서브넷 네트워크 IP주소 범위 (CIDR) 

  예) 192.168.0.0/24 ( 32비트 중에 24비트를 네트워크 주소, 호스트 8비트 )

 

③ NACL (Network Access Control List) : 서브넷 단위로 접근제어

 - VPC의 서브넷 수준에서 Traffic 제어 

 - 명시적 설정 ( inbound와 outbound stateless ) 

 - 보안 그룹과 접근제어 대상이 다름 ( EC2 단위 접근제어, Stateful- 규칙만 설정가능, inbound허용시 outbound연동)

inbound 규칙 번호가 낮은 것부터 검사 ( 80포트, 모든 트래픽에 deny추가, public이 막힘)

 

 

(2) VPC 생성

- 기본 혹은 subnet등 기타 설정을 추가하여 생성 

 

(3) Subnet생성 

① 서브넷 생성

- VPC선택 후 private, public용 subnet 생성

   ( 기본 Routing Table자동 생성 , private )

 

② Public Subnet인 경우의 설정

- internet gateway 생성 (VPC)

- public용 routing table로 생성 (VPC) 라우팅 편집 : Internet Gateway추가 

- routing table의 서브넷 연결편집

- 보안 그룹 설정 ( 보안 규칙 설정 후 EC2에 연결 적용 ) 

 

내부와 외부 0.0.0.0(외부에 전부개방)

 

 

 

VPC의 리소스 Map에서 Route Table 연결 변동 확인

 

개별 인스턴스에 대한 보안규칙설정

 

 

6) Private Subnet의 Instance 

- Bation Host, EICE 방식으로 접근 가능 

 

(1) Bastion Host

 public 으로부터 인바운드 허용 ( private subnet에 연결된 보안그룹에서 ssh, http, icmp )

 pem.key로 public 인스턴스 접속 후 private 인스턴스에 통신 확인 (ping)

# Public Instance 접속 
ssh -i [my_key-pair].pem ubuntu@[EC2_public_ip]

# Subnet내 private instance를 IP로 연결( 10.0.1.26으로 연결 )
ubuntu@ip-10-0-1-26:~$ ping 10.0.3.75 #private instance의 vpc내 주소

# PING 가능 (Private Subnet의 보안그룹에서 Public으로 Inbound허용 후)
ubuntu@ip-10-0-1-26:~$ ping 10.0.3.75
PING 10.0.3.75 (10.0.3.75) 56(84) bytes of data.
64 bytes from 10.0.3.75: icmp_seq=1 ttl=64 time=0.207 ms
64 bytes from 10.0.3.75: icmp_seq=2 ttl=64 time=0.215 ms
64 bytes from 10.0.3.75: icmp_seq=3 ttl=64 time=0.215 ms
64 bytes from 10.0.3.75: icmp_seq=4 ttl=64 time=0.215 ms
64 bytes from 10.0.3.75: icmp_seq=5 ttl=64 time=0.212 ms
64 bytes from 10.0.3.75: icmp_seq=6 ttl=64 time=0.221 ms
64 bytes from 10.0.3.75: icmp_seq=7 ttl=64 time=0.210 ms
^C
--- 10.0.3.75 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6165ms
rtt min/avg/max/mdev = 0.207/0.213/0.221/0.004 ms

 

 private 인스턴스에 접속 ( public 인스턴스에서 )

- local의 pem.key를 복사/생성하여 ssh연결

# Public Instance에서 Key복사 생성 
ubuntu@ip-10-0-1-26:~$ mkdir key-je
ubuntu@ip-10-0-1-26:~$ cd key-je/
ubuntu@ip-10-0-1-26:~/key-je$ vim [my_key_pair].pem  # key-perm복사  
ubuntu@ip-10-0-1-26:~/key-je$ sudo chmod 400 [my_key_pair].pem #권한 조정 

# Public에서 Private 인스턴스로 접속 (내부 IP이용하여 접속)
ubuntu@ip-10-0-1-26:~/key-je$ ssh -i [my_key_pair].pem  ubuntu@10.0.3.75
... 
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.3.75' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-1029-aws x86_64)

 

④ Private Instance의 인터넷 허용 ( NAT GATEWAY 통신 )

- NAT Gateway : 연동된 Private Subnet영역의 Outbound요청 처리

   ( Outbound는 전체 트래픽 가능)

 

- VPC에서 NAT Gateway생성

   ( public subnet에 연결, 외부 접속을 위한 Elastic IP할당 )

 

- VPC의 리소스 Map에서 생성확인 후 Private Subnet의 Routing Table 추가 

  ( 인스턴스가 배치된 private.subnet이 연결된 routing 테이블에 NAT에 연결 )

 

** 인터넷 연결 

 

(2) EICE (EC2 Instance Connect Endpoint )

     - VPC 연결, EC2 연결을 설정 

 

① 보안 그룹 설정 ( EICE를 위한 별도의 보안그룹 생성 )

    - Outbound : 22번, Private 보안그룹의 Traffic 

                           22번, Todo-db 보안그룹의 Traffic 

 

 Private Security 

- Private security group의 inbound 보안 규칙에 EICE 보안그룹 설정

 

③ EICE로 Instance연결 

 

 

___________________________________________________________

Price Policy : https://instances.vantage.sh

 

** 비용 소모가 큰 Resource : NAT, EIP( Release ), EC2

     비용 소모가 적은 Resource: VPC

 

'Infra' 카테고리의 다른 글

AWS_Cloud_6th  (0) 2025.09.08
AWS_Cloud_5th  (0) 2025.09.04
AWS_CLOUD_2nd  (3) 2025.08.23
Spring Cloud MSA_1  (0) 2025.08.07