AWS PrivateLink 시작하기 - Amazon Virtual Private Cloud

AWS PrivateLink 시작하기

이 자습서에서는 AWS PrivateLink를 사용하여 프라이빗 서브넷의 EC2 인스턴스에서 Amazon CloudWatch로 요청을 보내는 방법을 설명합니다.

다음 다이어그램은 이 시나리오의 개요를 제공합니다. 컴퓨터에서 프라이빗 서브넷의 인스턴스에 연결하려면 먼저 퍼블릭 서브넷의 Bastion 호스트에 연결해야 합니다. Bastion 호스트와 인스턴스 모두 동일한 키 페어를 사용해야 합니다. 프라이빗 키의 .pem 파일은 Bastion 호스트가 아닌 컴퓨터에 있으므로 SSH 키 전달을 사용하게 됩니다. 그러면 ssh 명령에서 .pem 파일을 지정하지 않고 Bastion 호스트에서 인스턴스에 연결할 수 있습니다. CloudWatch에 대한 VPC 엔드포인트를 설정하면 CloudWatch로 향하는 인스턴스의 트래픽이 엔드포인트 네트워크 인터페이스로 확인된 다음 VPC 엔드포인트를 사용하여 CloudWatch로 전송됩니다.

프라이빗 서브넷의 인스턴스는 VPC 엔드포인트를 사용하여 CloudWatch에 액세스합니다.

테스트 목적으로 하나의 가용 영역을 사용할 수 있습니다. 프로덕션 환경에서는 낮은 지연 시간과 높은 가용성을 위해 적어도 두 개의 가용 영역을 사용하는 것이 좋습니다.

1단계: 서브넷이 있는 VPC 생성

다음 절차를 따라 퍼블릭 서브넷 및 프라이빗 서브넷이 있는 VPC를 생성합니다.

VPC를 생성하려면
  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. VPC 생성을 선택합니다.

  3. Resources to create(생성할 리소스)에서 VPC and more(VPC 등)를 선택합니다.

  4. Name tag auto-generation(이름 태그 자동 생성)에 VPC의 이름을 입력합니다.

  5. 서브넷을 구성하려면 다음을 수행합니다.

    1. Number of Availability Zones(가용 영역 수)에서 필요에 따라 1 또는 2를 선택합니다.

    2. Number of public subnets(퍼블릭 서브넷 수)에서 가용 영역당 하나의 퍼블릭 서브넷이 있는지 확인합니다.

    3. Number of private subnets(프라이빗 서브넷 수)에서 가용 영역당 하나의 프라이빗 서브넷이 있는지 확인합니다.

  6. VPC 생성을 선택합니다.

2단계: 인스턴스 시작

이전 단계에서 생성한 VPC를 사용하여 퍼블릭 서브넷에서 Bastion 호스트를 시작하고 프라이빗 서브넷에서 인스턴스를 시작합니다.

사전 조건
  • .pem 형식을 사용하여 키 페어를 생성합니다. Bastion 호스트와 인스턴스를 모두 시작할 때 이 키 페어를 선택해야 합니다.

  • 컴퓨터의 CIDR 블록으로부터의 인바운드 SSH 트래픽을 허용하는 Bastion 호스트의 보안 그룹을 생성합니다.

  • Bastion 호스트의 보안 그룹으로부터의 인바운드 SSH 트래픽을 허용하는 인스턴스의 보안 그룹을 생성합니다.

  • IAM 인스턴스 프로파일을 생성한 다음 CloudWatchReadOnlyAccess 정책을 연결합니다.

Bastion 호스트를 시작하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 인스턴스 시작을 선택합니다.

  3. Name(이름)에 Bastion 호스트의 이름을 입력합니다.

  4. 기본 이미지 및 인스턴스 유형을 유지합니다.

  5. Key pair(키 페어)에서 키 페어를 선택합니다.

  6. Network settings(네트워크 설정)에서 다음을 수행합니다.

    1. VPC에서 VPC를 선택합니다.

    2. Subnet(서브넷)에서 퍼블릭 서브넷을 선택합니다.

    3. Auto-assign Public IP(퍼블릭 IP 자동 할당)에서 Enable(활성화)을 선택합니다.

    4. Firewall(방화벽)에서 Select existing security group(기존 보안 그룹 선택)을 선택한 다음 Bastion 호스트의 보안 그룹을 선택합니다.

  7. 인스턴스 시작을 선택합니다.

인스턴스를 시작하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 인스턴스 시작을 선택합니다.

  3. Name(이름)에 인스턴스의 이름을 입력합니다.

  4. 기본 이미지 및 인스턴스 유형을 유지합니다.

  5. Key pair(키 페어)에서 키 페어를 선택합니다.

  6. Network settings(네트워크 설정)에서 다음을 수행합니다.

    1. VPC에서 VPC를 선택합니다.

    2. Subnet(서브넷)에서 프라이빗 서브넷을 선택합니다.

    3. Auto-assign Public IP(퍼블릭 IP 자동 할당)에서 Disable(비활성화)을 선택합니다.

    4. Firewall(방화벽)에서 Select existing security group(기존 보안 그룹 선택)을 선택한 다음 인스턴스의 보안 그룹을 선택합니다.

  7. Advanced details(고급 세부 정보)를 확장합니다. IAM instance profile(IAM 인스턴스 프로파일)에서 IAM 인스턴스 프로파일을 선택합니다.

  8. 인스턴스 시작을 선택합니다.

3단계: CloudWatch 액세스 테스트

다음 절차를 따라 인스턴스가 CloudWatch에 액세스할 수 없는지 확인합니다. CloudWatch의 읽기 전용 AWS CLI 명령을 사용하여 이 작업을 수행합니다.

CloudWatch 액세스를 테스트하려면
  1. 컴퓨터에서 다음 명령을 사용하여 SSH 에이전트에 키 페어를 추가합니다. 여기서 key.pem은 .pem 파일의 이름입니다.

    ssh-add ./key.pem

    키 페어에 대한 권한이 너무 개방되어 있다는 오류 메시지가 표시되면 다음 명령을 실행한 다음 이전 명령을 다시 시도하세요.

    chmod 400 ./key.pem
  2. 컴퓨터에서 Bastion 호스트에 연결합니다. -A 옵션, 인스턴스 사용자 이름(예:ec2-user) 및 Bastion 호스트의 퍼블릭 IP 주소를 지정해야 합니다.

    ssh -A ec2-user@bastion-public-ip-address
  3. Bastion 호스트에서 인스턴스에 연결합니다. 인스턴스 사용자 이름(예: ec2-user) 및 인스턴스의 프라이빗 IP 주소를 지정해야 합니다.

    ssh ec2-user@instance-private-ip-address
  4. 다음과 같이 인스턴스에서 CloudWatch list-metrics 명령을 실행합니다. --region 옵션에서 VPC를 생성한 리전을 지정합니다.

    aws cloudwatch list-metrics --namespace AWS/EC2 --region us-east-1
  5. 몇 분 후 명령 시간이 초과됩니다. 이는 현재 VPC 구성으로는 인스턴스에서 CloudWatch에 액세스할 수 없음을 보여 줍니다.

    Connect timeout on endpoint URL: https://monitoring.us-east-1.amazonaws.com/
  6. 인스턴스와 연결 상태를 유지합니다. VPC 엔드포인트를 생성한 후 이 list-metrics 명령을 다시 시도합니다.

4단계: CloudWatch에 액세스하기 위한 VPC 엔드포인트 생성

다음 절차를 따라 CloudWatch에 연결하는 VPC 엔드포인트를 생성합니다.

전제 조건

CloudWatch에 대한 트래픽을 허용하는 VPC 엔드포인트의 보안 그룹을 생성합니다. 예를 들어 VPC CIDR 블록의 HTTPS 트래픽을 허용하는 규칙을 추가합니다.

CloudWatch에 대한 VPC 엔드포인트를 생성하려면
  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 엔드포인트를 선택합니다.

  3. Create endpoint(엔드포인트 생성)을 선택합니다.

  4. Name tag(이름 태그)에 엔드포인트의 이름을 입력합니다.

  5. 서비스 범주(Service category)에서 AWS 서비스를 선택합니다.

  6. Service(서비스)에서 com.amazonaws.region.monitoring을 선택합니다.

  7. VPC에서 해당 VPC를 선택합니다.

  8. Subnet(서브넷)에서 가용 영역을 선택한 다음 프라이빗 서브넷을 선택합니다.

  9. Security group(보안 그룹)에서 VPC 엔드포인트의 보안 그룹을 선택합니다.

  10. 정책(Policy)에서 모든 액세스(Full access)를 선택하여 VPC 엔드포인트를 통한 모든 리소스에 대한 모든 보안 주체의 모든 작업을 허용합니다.

  11. (선택 사항) 태그를 추가하려면 새 태그 추가를 선택하고 태그 키와 태그 값을 입력합니다.

  12. Create endpoint(엔드포인트 생성)을 선택합니다. 초기 상태는 Pending(대기 중)입니다. 다음 단계로 이동하기 전에 상태가 Available(사용 가능)이 될 때까지 기다립니다. 몇 분 정도 소요될 수 있습니다.

5단계: VPC 엔드포인트 테스트

VPC 엔드포인트가 인스턴스에서 CloudWatch로 요청을 보내고 있는지 확인합니다.

VPC 엔드포인트를 테스트하려면

인스턴스에서 다음 명령을 실행합니다. --region 옵션에 VPC 엔드포인트를 생성한 리전을 지정합니다.

aws cloudwatch list-metrics --namespace AWS/EC2 --region us-east-1

결과가 비어 있는 응답이라도 응답을 받으면 AWS PrivateLink를 사용하여 CloudWatch에 연결된 것입니다.

UnauthorizedOperation 오류가 발생하는 경우 인스턴스에 CloudWatch에 대한 액세스를 허용하는 IAM 역할이 있는지 확인합니다.

요청 시간이 초과되면 다음을 확인합니다.

  • 엔드포인트의 보안 그룹이 CloudWatch에 대한 트래픽을 허용합니다.

  • --region 옵션이 VPC 엔드포인트를 생성한 리전을 지정합니다.

6단계: 정리

이 자습서용으로 생성한 Bastion 호스트 및 인스턴스가 더 이상 필요하지 않은 경우 종료할 수 있습니다.

인스턴스를 종료하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances(인스턴스)를 선택합니다.

  3. 테스트 인스턴스를 모두 선택하고 Instance state(인스턴스 상태), Terminate instance(인스턴스 종료)를 선택합니다.

  4. 확인 메시지가 나타나면 종료를 선택합니다.

VPC 엔드포인트가 더 이상 필요하지 않으면 삭제할 수 있습니다.

VPC 엔드포인트를 삭제하려면
  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 엔드포인트를 선택합니다.

  3. VPC 엔드포인트를 선택합니다.

  4. 작업(Actions), VPC 엔드포인트 삭제(Delete VPC endpoints)를 차례로 선택합니다.

  5. 확인 메시지가 나타나면 delete을 입력한 다음 삭제를 선택합니다.