목록DevOps/[AWS] (35)
민프

ECS에서 서비스를 운영할 때, Task를 어떤 서브넷에 배치해야 할까요?처음에는 “Public Subnet에 배포하면 더 간단하잖아?“라는 생각이 들 수 있지만,운영 환경에서는 보안성과 안정성을 위해 Private Subnet을 사용하는 것이 권장됩니다. 이번 글에서는 왜 ECS Task를 Private Subnet에 배포해야 하는지,그리고 Private Subnet에서도 인터넷을 사용할 수 있게 하는 NAT Gateway 구성 방법을 정리해보겠습니다.왜 Public Subnet이 아닌 Private Subnet에 ECS를 배포해야 할까?1. 보안성 강화Public Subnet에 배포된 ECS Task는 퍼블릭 IP가 부여되며 외부 인터넷에서 접근이 가능합니다.이는 해킹, 취약점 공격 등 보안 위협에 ..

Bastion Host에 대해서 알아보도록 하겠습니다.1. Bastion Host란?Bastion [ˈbæstiən]. "요새", "보루"를 뜻하는 영어 단어이다. 특히 성형 요새를 의미하는 모양이다. 그러나 자주 사용되지는 않고 이러한 의미로는 Fortress가 압도적으로 많이 쓰인다.- 나무위키, 위키백과, 네이버 사전 Bastion Host는 Private Subnet에 위치한 리소스에 접근할 수 있도록 중간에 배치하는 ‘관문 서버’입니다.외부 네트워크와 내부 네트워크 사이에서 SSH 또는 터널링을 통해 보안된 접근 경로를 제공합니다.2. 왜 Bastion Host가 필요한가?항목일반적인 접근Bastion Host 사용 시RDS 보안퍼블릭 IP 노출됨퍼블릭 IP 없이 내부만 노출보안그룹 설정IP 기..

서비스 운영을 하다 보면 JWT_SECRET, DB_PASS, REDIS_HOST 같은 민감한 설정값을 안전하게 관리해야 합니다.예전에는 .env 파일로 로컬에 숨겨두곤 했지만, 클라우드 인프라에서는 AWS Systems Manager Parameter Store(SSM) 또는 AWS Secrets Manager를 활용하는 것이 안전하고 효율적인 방법입니다. 특히 저는 ECS로 배포를 하면서 .env.dev, .env.prod 등등.. 환경변수와 관련 된 것들을 컨테이너와 같이 올릴 수 없기에 SSM을 선택하여 진행하였습니다. Git Actions CICD를 이용해서 배포를 하고 있어서 Git Actions의 Actions secrets and variables를 사용하여 해보려고 했지만 dev, pr..

1. 도메인 구입 (가비아) 2. Route 53 호스팅 영역 생성AWS > Route 53 > 호스팅 영역 생성도메인 이름: 가비아 도메인 넣기 (ex. example.co.kr)타입: 퍼블릭 호스팅 영역생성 후 -> NS 레코드 4개가 나옴 (ns-xxxx.awsdns-xx.com 등) 3.가비아 도메인에서 네임서버 변경가비아 > 내 도메인 > 네임서버 변경기본 네임서버 -> “사용자 지정 네임서버” 선택Route53이 보여준 NS 레코드 4개 복붙 (마지막 '.'을 제거해주셔야 합니다.)이걸로 가비아 -> Route 53 연결 완료! 주의사항현재 가비아에서 구매한 도메인에서 이미 레코드들이 있었는데 네임 서버를 바꾸게 되면 더이상 가비아의 네임서버에서는 동작하지 않고, Route53을 통해서 동..

“Lambda에서 발생하는 6MB 초과 오류? Presigned URL로 해결하자!” 문제상황최근 OCR 분석 기능을 Lambda + S3 + SQS 조합으로 구현하던 중 다음과 같은 에러를 마주하게 되었습니다:Request must be smaller than 6291456 bytes for the InvokeFunction operation Lambda invocation failed with status: 413이 문제는 이미지 파일의 크기가 Lambda가 허용하는 최대 요청 바이트 수(6MB) 를 초과한 경우 발생합니다.그렇다면, Lambda를 거치지 않고 S3로 직접 업로드하면 해결됩니다. 이 글에서는 Presigned URL을 사용하여 클라이언트에서 직접 S3로 파일을 업로드하는 방법을 소개..

이번 글에서는 API Gateway + Lambda + S3를 활용하여 사용자가 이미지를 업로드하면 Lambda가 이를 S3 버킷에 저장하는 아키텍쳐를 구축한 과정을 알려드리겠습니다 실습 과정클라이언트가 multipart/form-data 형식으로 이미지를 POST로 전송API Gateway가 요청을 받아 Lambda를 호출Lambda는 S3 버킷에 이미지를 저장저장 후 결과를 반환 (성공/실패 여부)구현 과정1. S3 버킷 생성2. Lambda 함수 구성 (Python 3.11) python에서 multipart/form-data를 받기 위하여 toolbelt-layer를 계층으로 삽입하였습니다.// Python디렉토리 생성 및 패키지 설치mkdir -p pythonpip install requests..

이전 포스팅에서는 CICD를 하지 않고 nestjs를 배포하는 것을 해보았습니다.https://minf.tistory.com/entry/AWSEC2-EC2%EC%97%90-Nestjs-ECR%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0#google_vignette [AWS][EC2] EC2 + Docker + ECR로 Nestjs 어플리케이션 배포하기 (feat. WARNING: The requested image's platform (linux/ar준비물 - Docker- nestjs Docker Image- IAM (AccessKey, Secret Accesskey)- ECR - EC2 과정- 로컬에서 Nestjs Docker image 생성- ECR에 PUSH- ..

준비물 - Docker- nestjs Docker Image- IAM (AccessKey, Secret Accesskey)- ECR - EC2 과정- 로컬에서 Nestjs Docker image 생성- ECR에 PUSH- EC2(ubuntu)에 적용 1. EC2(ubuntu) - Docker 설치 (SSH) sudo apt update -y sudo apt install -y docker.io sudo systemctl start docker sudo usermod -aG docker $USER 설치확인 docker --version2. EC2 - AWS CLI 설치순차적으로 진행curl "https://awscli.amazonaws.com/awscli-exe-linux-x8..

1. AWS의 구조AWS의 예시 구조를 보면 아래와 같은 구성이 되어있을 것 입니다.우리가 Github, Naver, Netflex를 이용할 때는 다양한 노드를 통해서 Public Internet을 이용해서 접근을 하게 됩니다. AWS 클라우드도 마찬가지 입니다. 이렇게 Public Internet을 이용해서 사용할 수 있는데 예외적인게 있습니다.그게바로 VPC입니다. VPC는 원칙적으로 Public Internet에서 접근이 불가능합니다.그래서 다른 AWS서비스들은 Public을 Endpoint로 접근을 하고 있습니다. 예를 들어서)EC2로 S3로 접근을 하려고 할때AWS내부에 있다고 하더라도 원칙적으로는 바로 접근이 불가능합니다.그럼 어떻게 되느냐?EC2 -> Internet Gateway -..

1. 사설 IP (Private IP)한정된 IP주소를 최대한 활용하기 위해 IP주소를 분할하고자 만든 개념IPv4기준으로 최대 IP갯수는 43억개인데, 요즘 인터넷을 사용하는 인구 대비 턱없이 부족하다.따라서 '사설망'을 구축한다.사설망사설망 내부에는 외부 인터넷 망으로 통신이 불가능한 사설 IP로 구성외부로 통신할 때는 통신 가능한 공인 IP로 나누어 사용보통 하나의 망에는 사설 IP를 부여받은 기기들과 NAT기능을 갖춘 Gateway로 구성참고로 IPv6 최대 IP의 개수는 V4의 48억개보다 많은 2^128개 이다. (2^96)배 더 많다. 2. NAT(Network Address Translation)사설 IP가 공용 IP가 통신할 수 있도록 주소를 변환해 주는 방법3가지 종류Dynamic N..