Private S3구성과 NGINX를 이용한 웹사이트 구성

Donghoon Nam
원티드랩 기술 블로그
4 min readSep 6, 2023

안녕하세요. Inflow팀 프론트엔드 개발을 하고 있는 남동훈 입니다.

배경

ISMS를 진행하면서 개인정보를 다루고 있는 어드민 사이트등에 대한 보안을 강화해야 하는 이슈가 있었습니다.
기존 어드민 사이트는 SPA로 구현되어 있고 Public S3로 배포하여 Static 웹 사이트로 운영하고 있었습니다.

이 부분에 대하여 ISMS에 맞추기 위해 보안을 강화하는 작업을 어떻게 진행했는지 남겨보려고 합니다.

AS-IS

public s3

ISMS 대응 전 기존 어드민 페이지 접근하는 순서는 다음과 같습니다.

  • 유저가 도메인 접근 시 route 53을 접근한다.
  • route53에 연결된 s3로 접속한다.

위와 같은 방식으로는 외부의 누구나 어드민 url 혹은 s3 url 만 알 수 있다면 접근할 수 있어 보안적으로 이슈가 발생할 수 있었습니다.
이 부분을 해결하고자 하였습니다.

TO-BE

위와 같이 어디서나 접근이 가능한 보안 문제를 해결하고자 다음과 같이 구성하였습니다.

Private S3
  • Public Subnet과 Private Subnet을 설정한다.(10.0.0.0/16)
  • Private S3를 위한 VPC Endpoint를 설정한다.
  • ECS Fargate에 NGINX를 사용하여 S3 웹 호스팅으로 Foward Proxy를 설정한다.

Private S3 Bucket Policy 설정

{
"Version": "2008-10-15",
"Id": "PolicyForPrivateContent",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::static-s3/*",
"Condition": {
"StringEquals": {
"aws:sourceVpce": "vpce-0dlfksass33d"
}
}
}
]
}

NGINX 설정

location / {
rewrite ^ /static-s3/index.html break;
proxy_pass https://s3.ap-northeast-2.amazonaws.com;

}

VPC망에 접근 가능한 허용된 ip만 접근이 가능하도록 설정하였습니다.
S3 또한 Public 형태가 아닌 Private하게 허용된 VPC망에서만 접근이 가능하도록 변경하였습니다.

--

--