해결된 질문
23.10.31 18:53 작성
·
247
2
안녕하세요. 유익한 강의 정말 감사드립니다
강의 내용에서 조금 벗어난 질문이 될 수 있겠네요. 현재 강의 내용을 토대로 service 를 생성해보려하는데 public Ip 를 off 하였습니다.
이유는
외부에서의 접근을 막기 위함 (물론 Security guard 로 해결되는 부분입니다)
더 큰 문제는 비용문제로 off 하였습니다 (내년 2월부터 public ip 에 대한 과금 때문입니다)
public ip 를 off 한 결과 Service 에서 Task 를 정상적으로 실행못한느데 cloudFormation 을 봐도 정확한 정보가 나오지 않아 현재 2가지 문제로 예상하고 있습니다
ECR 을 pull 하지 못하는 문제
target group 을 auto detect 못하는 문제
혹시 비슷한 경험이 있으면 조언 부탁드립니다!
감사합니다
답변 1
3
2023. 11. 01. 14:19
도크님 안녕하세요~
매우 좋은 질문입니다.
일단 문제 원인은 public ip가 맞습니다. public ip를 부여 받지 못하면 private subnet에 있는 Task들이 VPC밖에 있는 외부 리소스에 요청을 할 수 없거든요. 그런데 AWS ECR은 VPC안에 존재하지 않아요. Docker Registry 특성상 외부(도크님의 컴퓨터, 깃헙 액션 CICD pipeline)에서도 접속이 되어야 하는 경우가 많아서이죠.
하지만 public ip를 여러 이유로 사용 안하고 싶을 수 있어요. 과금 문제도 있겠지만 무엇보다 보안상 취약점이 생길 수 있습니다. 강의에서는 Security Group으로 모든 외부 inbound request를 제한했어요. 하지만 public ip를 제거함으로써 더 상위 단계(subnet level)에서 접속을 차단하면 더 좋겠죠.
이에 대한 해결책은 크게 두자기가 있습니다.
NAT Gateway 활용하기: 비용은 public ip보다 더 나갈 수도 있어요. 그런데 더 안전하고 좋은 방법입니다. VPC에 public, private subnet들이 존재하는데요. 지금 돌리고 있는 태스크들은 모두 private subnet에 있을거에요. 이 경우 public ip가 없으면 외부 인터넷 접속이 안되요(보안상). public subnet에 있으면 oubound 요청이 가능해집니다! 그래서 이 문제 해결책으로 public subnet에 NAT Gateway를 설치할 수 있어요. NAT Gateway는 비록 public subnet에 있지만 private subnet에 있는 task들과 같은 VPC를 공유하기 때문에 서로 안전하게 통신이 가능해집니다. 즉, private net에 있는 task들이 외부망으로 요청을 날리고 싶으면 public net에 있는 NAT Gateway를 통해서 할 수 있게 되요. 즉, 외부 요청은 자유롭네 날리면서 외부에서 인바운드로 날리는 요청들은 모두 차단이 가능해집니다. (NAT Gateway를 쓰게 되면 public ip를 안써도 외부에 요청이 가능해지니깐요!)
VPC Endpoint: 다른 방법으로는 ECR을 VPC안으로 드러오도록 하는 방법입니다. 말 그대로 VPC endpoint (private ip)를 AWS ECR에 부착시켜주는거죠. 다른 리소스처럼 VPC 안에서 안전하게 통신할 수 있도록요. 이 방법이 아마 가장 저렴할거에요. 하지만 여러분들의 AWS가 아닌 외부 서비스에 요청을 보내야한다면 (예. aws cloudwatch 대신 Sentry같은 외부 서비스에 서버 로그 전송) public ip를 쓰거나 NAT Gateway를 사용해야 됩니다.
이 강의에서 다루기에는 중/고급 내용이라고 생각해서 포함을 안시켰는데 답변을 작성하다보니 이 내용도 강의에 포함되면 좋겠다라는 생각이 드네요. 조만간 이 부분도 녹음해서 추가 업로드 해보겠습니다!
2023. 11. 01. 16:26
답변 감사합니다!
내부구조상 비용이 조금 들더라도 NAT Gateway 가 현재 제 상황에는 맞는것 같습니다
좋은 강의 제작해 주셔서 다시한번 감사드립니다 :)