

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS PrivateLink 시작하기
<a name="getting-started"></a>

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

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

![\[프라이빗 서브넷의 인스턴스는 VPC 엔드포인트를 사용하여 CloudWatch에 액세스합니다.\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/privatelink/images/getting-started.png)


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

**Topics**
+ [1단계: 서브넷이 있는 VPC 생성](#create-vpc-subnets)
+ [2단계: 인스턴스 시작](#launch-instances)
+ [3단계: CloudWatch 액세스 테스트](#test-cloudwatch-access)
+ [4단계: CloudWatch에 액세스하기 위한 VPC 엔드포인트 생성](#create-vpc-endpoint-cloudwatch)
+ [5단계: VPC 엔드포인트 테스트](#test-vpc-endpoint)
+ [6단계: 정리](#clean-up)

## 1단계: 서브넷이 있는 VPC 생성
<a name="create-vpc-subnets"></a>

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

**VPC를 생성하려면**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. **VPC 생성**을 선택합니다.

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

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

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

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

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

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

1. **VPC 생성**을 선택합니다.

## 2단계: 인스턴스 시작
<a name="launch-instances"></a>

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

**사전 조건**
+ **.pem** 형식을 사용하여 키 페어를 생성합니다. Bastion 호스트와 인스턴스를 모두 시작할 때 이 키 페어를 선택해야 합니다.
+ 컴퓨터의 CIDR 블록으로부터의 인바운드 SSH 트래픽을 허용하는 Bastion 호스트의 보안 그룹을 생성합니다.
+ Bastion 호스트의 보안 그룹으로부터의 인바운드 SSH 트래픽을 허용하는 인스턴스의 보안 그룹을 생성합니다.
+ IAM 인스턴스 프로파일을 생성한 다음 **CloudWatchReadOnlyAccess** 정책을 연결합니다.

**Bastion 호스트를 시작하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

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

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

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

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

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

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

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

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

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

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

**인스턴스를 시작하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

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

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

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

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

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

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

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

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

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

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

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

## 3단계: CloudWatch 액세스 테스트
<a name="test-cloudwatch-access"></a>

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

**CloudWatch 액세스를 테스트하려면**

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

   ```
   ssh-add ./key.pem
   ```

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

   ```
   chmod 400 ./key.pem
   ```

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

   ```
   ssh -A ec2-user@bastion-public-ip-address
   ```

1. Bastion 호스트에서 인스턴스에 연결합니다. 인스턴스 사용자 이름(예: `ec2-user`) 및 인스턴스의 프라이빗 IP 주소를 지정해야 합니다.

   ```
   ssh ec2-user@instance-private-ip-address
   ```

1. 다음과 같이 인스턴스에서 CloudWatch [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 명령을 실행합니다. `--region` 옵션에서 VPC를 생성한 리전을 지정합니다.

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

1. 몇 분 후 명령 시간이 초과됩니다. 이는 현재 VPC 구성으로는 인스턴스에서 CloudWatch에 액세스할 수 없음을 보여 줍니다.

   ```
   Connect timeout on endpoint URL: https://monitoring.us-east-1.amazonaws.com/
   ```

1. 인스턴스와 연결 상태를 유지합니다. VPC 엔드포인트를 생성한 후 이 **list-metrics** 명령을 다시 시도합니다.

## 4단계: CloudWatch에 액세스하기 위한 VPC 엔드포인트 생성
<a name="create-vpc-endpoint-cloudwatch"></a>

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

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

**CloudWatch에 대한 VPC 엔드포인트를 생성하려면**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

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

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

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

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

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

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

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

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

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

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

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

## 5단계: VPC 엔드포인트 테스트
<a name="test-vpc-endpoint"></a>

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단계: 정리
<a name="clean-up"></a>

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

**인스턴스를 종료하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

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

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

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

**VPC 엔드포인트를 삭제하려면**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

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

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

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

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