[AWS]VPC Endpoint란?(feat.bastion(바스티온) 접속)

2022년 02월 28일 by Xion

    [AWS]VPC Endpoint란?(feat.bastion(바스티온) 접속) 목차

| VPC Endpoint를 알아보겠습니다.

 

 

VPC 밖(인터넷을 통해)에서 들어오는 트래픽에는 과금이 되기 때문에 비용을 줄이기 위해

AWS 네트워크 안에서 통신할 수 있도록 하는 것이 좋습니다.

 

VPC EndpointEC2 인스턴스를 VPC 외부 서비스(AWS서비스 중 S3 등)private연결을 하기 위해 사용됩니다.

 

즉, AWS 서비스를 전용 연결할 수 있도록 해주죠.

따라서 어떤 트래픽도 AWS 네트워크에서 벗어나지 않기 때문에 비용을 절약할 수 있습니다.

 

이 경우 퍼블릭으로 해당 서비스를 노출하지 않더라도 연동할 수 있습니다.

IGW, VPN, NAT, proxy 등 사용할 일이 전혀 없죠.

 

위 그림과 같이 private subnet이 존재할 때, 이 서브넷과 S3를 연결하고 싶다면,

바로 Endpoint를 통해 연결할 수 있습니다.

 

하지만 VPC 밖에서 들어오는 트래픽에는 과금이 되기 때문에 비용을 줄이기 위해 AWS 네트워크 안에서 통신할 수 있도록 하는 것이 좋다.

특징

- 인터넷을 통해 연결할 필요가 없습니다.

- 동일한 region에 있어야 합니다.

- VPC내에서 Gateway처럼 Route Tables에 등록하는 형식으로 간편하게 사용가능합니다.

- 가용성이 높고 중복적이며 수평적입니다.

 

 

 

먼저 S3에 접근하기 위해서는 IAM에 들어가서 권한을 부여해야 합니다.

 

IAM -> 액세스 관리 tab -> 역할 -> 역할 만들기 -> AWS, EC2 선택

S3 검색 후 추가

S3 fullAccess 권한 추가

 

EC2 tab으로 돌아와서 새로운 ec2를 만들어줍니다.

 

보안그룹에서 private 보안 그룹을 선택해보면 소스에서 public-sg로 선택되어 있는 것을 볼 수 있습니다.

여기서 저는 보안그룹을 private가 public 보안 그룹에서 들어오는 것(inbound)만 허용했기 때문에 다음과 같이 나타나는 것입니다.

설정하지 않으신 분들은 VPC를 만들어 public과 private 보안그룹을 만들어주셔야 합니다.

 

 

그 후 인스턴스를 만들면

S3에 접근하려면 bastion을 만들어줘야 합니다.

왜냐하면 private instance에 접근하려면 당연히 public instance가 필요하기 때문이죠.

즉, public instance를 통해 private를 접속할 것 이기 때문입니다.

 

public instance 생성

 

 

보안그룹에서는 아래 사진과 같이 public sg를 선택하셔야 합니다.

이유는 public sg 안에 private sg가 포함되어 있기 때문입니다.

 

 

그 후 console창에서 public instance로 접근해 보겠습니다.

 

 

S3가 있다는 가정하에, 여기에서 S3에 접근하기 위해서는 어떻게 해야 할까요?

 

 

aws 계정에 있는 s3 bucket 목록 출력

 

aws s3 ls --region ap-notheast-2

 

하지만 입력을 해도 출력이 되지 않습니다.

 

이유는 private subnet에 endpoint를 설정해주지 않았기 때문인데요.

VPC tab에서 private subnet에 대한 앤드포인트를 만들어줍시다.

 

 

그럼 다음과 같이 endpoint의 라우팅 테이블에서 프라이빗 서브넷이 설정된 것을 볼 수 있는데요.

 

이 엔드포인트의 역할은 S3에 관련된 작업만 해줍니다.

왜냐하면 엔드포인트를 만들 때 설정에서 s3관련된 작업만 추가하였기 때문에

s3 트래픽에 관련된 모든 것들은 해당 엔드포인트를 타고 나머지는 타지 않기 때문이죠.

 

private subnet에 연결이 잘 되어있나 확인

 

라이팅에서 pl-로 시작하는 부분이 있습니다.

보통 2~3분 뒤 생기니 착오 없으시길 바랍니다.

 

그러면 해당 라이팅에 추가된 pl로 시작하는 부분은 뭘까요?

대상에 vpce를 클릭해보면, 엔드포인트로 연결됩니다.

그럼 이 엔드포인트가 바로 저희가 방금 설정한 s3관련 엔드포인트가 되는 것 입니다.

 

따라서 이제는 private subnet이 해당 endpoint를 갖고 s3에 접근할 수 있게 되는것이죠.

 

그럼 이제 public ec2로 접근해여 private ec2를 다시 접근하겠습니다.

 

1.public ec2 bastion 접근

 

 

2. bastion(바스티온) 내부에서 private ec2 접근

 

주의!!

간혹 Mac에서 서버(Linux)로 파일이나 디렉토리 전체를 업로드해야 할 때가 있습니다.

 

여기에서는 bastion publick-ec2 내부에서 접근해야 하기 때문에 해당 리눅스에서 pem key가 존재하야한다.

따라서 local에서 pem 파일을 ec2 내부로 업로드 해주자.

이 부분에서 진짜 삽질을 많이 했다 ㅜㅜ .

 

scp -i "pem key" 업로드 하는 pem 키 파일 위치 ec2-user@업로드당하는 곳의 ip:"업로드 당하는 곳의 경로"

요약

 

-i : identity file : 인증서 파일 과 함께 간다.


결과

bastion 내 private key 확인 

성공,,, 감격 publick key가 아닌 private 키

 

3. private ec2에서 aws s3 list 접근

 

이제 private key가 bastion ec2에 업로드 했으니, bastion ec2에서는 private ec2로 접속할 수 있다.

 

접속해보자.

반응이 없다... 왜 이럴까?

뭔가 라우팅 테이블을 잘 못 설정해준 거 같아서 다시 삽질을 해보자!