

# Amazon EC2 인스턴스에 대한 키 페어 생성
<a name="create-key-pairs"></a>

Amazon EC2를 사용하여 키 페어를 생성하거나 서드 파티 도구를 사용하여 키 페어를 생성한 후에 Amazon EC2로 가져올 수 있습니다.

Amazon EC2는 Linux 및 Windows 인스턴스에 대해 2048비트 SSH-2 RSA 키를 지원합니다. Amazon EC2는 Linux 인스턴스에 대한 ED25519 키도 지원합니다.

키 페어를 생성한 후 인스턴스에 연결하는 방법에 대한 지침은 [SSH를 사용하여 Linux 인스턴스에 연결](connect-to-linux-instance.md) 및 [RDP를 사용하여 Windows 인스턴스에 연결](connecting_to_windows_instance.md) 섹션을 참조하세요.

**Topics**
+ [Amazon EC2를 사용하여 키 페어 생성](#having-ec2-create-your-key-pair)
+ [AWS CloudFormation을 사용하여 키 페어 생성](#create-key-pair-cloudformation)
+ [서드 파티 도구를 사용하여 키 페어를 생성하고 Amazon EC2로 퍼블릭 키 가져오기](#how-to-generate-your-own-key-and-import-it-to-aws)

## Amazon EC2를 사용하여 키 페어 생성
<a name="having-ec2-create-your-key-pair"></a>

Amazon EC2 사용하여 키 페어를 생성할 때 퍼블릭 키는 Amazon EC2에 저장되며 프라이빗 키는 사용자가 저장합니다.

리전당 최대 5,000개의 키 페어를 생성할 수 있습니다. 증가를 요청하려면 지원 케이스를 생성합니다. 자세한 내용을 알아보려면 [지원 사용 설명서](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)의 *지원 사례 만들기*를 참조하세요.

------
#### [ Console ]

**Amazon EC2를 사용하여 키 페어를 생성하려면**

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

1. 탐색 창의 [**Network & Security**]에서 [**Key Pairs**]를 선택합니다.

1. **Create key pair(키 페어 생성)**를 선택합니다.

1. **이름**에 키 페어를 설명하는 이름을 입력합니다. Amazon EC2는 사용자가 키 이름으로 지정한 이름에 퍼블릭 키를 연결합니다. 키 이름에는 최대 255자의 ASCII 문자를 포함할 수 있습니다. 선행 또는 후행 공백을 포함할 수 없습니다.

1. 운영 체제에 적합한 키 페어 유형을 선택합니다.

   (Linux 인스턴스)**키 페어 유형**에서 **RSA** 또는 **ED25519**를 선택합니다.

   (Windows 인스턴스) **키 페어 유형**에서 **RSA**를 선택합니다. **ED25519** 키는 Windows 인스턴스에서 지원되지 않습니다.

1. **프라이빗 키 파일 형식(Private key file format)**에서 프라이빗 키를 저장할 형식을 선택합니다. OpenSSH에서 사용할 수 있는 형식으로 프라이빗 키를 저장하려면 **pem**을 선택합니다. PuTTY에서 사용할 수 있는 형식으로 프라이빗 키를 저장하려면 **ppk**를 선택합니다.

1. 퍼블릭 키에 태그를 추가하려면 **태그 추가(Add tag)**를 선택하고 해당 태그의 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

1. **키 페어 생성(Create key pair)**를 선택합니다.

1. 브라우저에서 프라이빗 키 파일이 자동으로 다운로드됩니다. 기본 파일 이름은 키 페어의 이름으로 지정한 이름이며, 파일 이름 확장자는 선택한 파일 형식에 따라 결정됩니다. 안전한 장소에 프라이빗 키 파일을 저장합니다.
**중요**  
이때가 사용자가 프라이빗 키 파일을 저장할 수 있는 유일한 기회입니다.

1. macOS 또는 Linux 컴퓨터에서 SSH 클라이언트를 사용하여 Linux 인스턴스에 연결할 계획이면 사용자만 프라이빗 키 파일을 읽을 수 있도록 다음 명령으로 해당 권한을 설정합니다.

   ```
   chmod 400 key-pair-name.pem
   ```

   이러한 권한을 설정하지 않으면 이 키 페어를 사용하여 인스턴스에 연결할 수 없습니다. 자세한 내용은 [오류: 보호되지 않는 프라이빗 키 파일](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key) 섹션을 참조하세요.

------
#### [ AWS CLI ]

**Amazon EC2를 사용하여 키 페어를 생성하려면**

1. 다음과 같이 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html) 명령을 사용하여 키 페어를 생성하고 프라이빗 키를 `.pem` 파일에 저장합니다. `--query` 옵션은 프라이빗 키 구성 요소를 출력에 인쇄합니다. `--output` 옵션은 지정된 파일에 프라이빗 키 구성 요소를 저장합니다. 확장명은 키 형식에 따라 `.pem` 또는 `.ppk`여야 합니다. 프라이빗 키 이름은 퍼블릭 키 이름과 다를 수 있지만, 사용상 편의를 위해 동일한 이름을 사용합니다.

   ```
   aws ec2 create-key-pair \
       --key-name my-key-pair \
       --key-type rsa \
       --key-format pem \
       --query "KeyMaterial" \
       --output text > my-key-pair.pem
   ```

1. macOS 또는 Linux 컴퓨터에서 SSH 클라이언트를 사용하여 Linux 인스턴스에 연결할 계획이면 사용자만 프라이빗 키 파일을 읽을 수 있도록 다음 명령으로 해당 권한을 설정합니다.

   ```
   chmod 400 key-pair-name.pem
   ```

   이러한 권한을 설정하지 않으면 이 키 페어를 사용하여 인스턴스에 연결할 수 없습니다. 자세한 내용은 [오류: 보호되지 않는 프라이빗 키 파일](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key) 섹션을 참조하세요.

------
#### [ PowerShell ]

**Amazon EC2를 사용하여 키 페어를 생성하려면**  
다음과 같이 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html) cmdlet을 사용하여 키를 생성하고 생성한 키를 `.pem` 또는 `.ppk` 파일에 저장합니다. **Out-File** cmdlet은 특정 확장자가 있는 파일에 프라이빗 키 구성 요소를 저장합니다. 확장명은 키 형식에 따라 `.pem` 또는 `.ppk`여야 합니다. 프라이빗 키 이름은 퍼블릭 키 이름과 다를 수 있지만, 사용상 편의를 위해 동일한 이름을 사용합니다.

```
(New-EC2KeyPair `
    -KeyName "my-key-pair" `
    -KeyType "rsa" `
    -KeyFormat "pem").KeyMaterial | Out-File -Encoding ascii -FilePath C:\path\my-key-pair.pem
```

------

## AWS CloudFormation을 사용하여 키 페어 생성
<a name="create-key-pair-cloudformation"></a>

CloudFormation을 사용하여 새 키 페어를 생성하면 프라이빗 키가 AWS Systems Manager 파라미터 스토어에 저장됩니다. 다음은 파라미터 이름의 형식입니다.

```
/ec2/keypair/key_pair_id
```

자세한 내용을 알아보려면 *AWS Systems Manager 사용 설명서*의 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)를 참조하세요.

**CloudFormation을 사용하여 키 페어를 생성하려면**

1. 템플릿에서 [AWS::EC2::KeyPair](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html) 리소스를 사용합니다.

   ```
   Resources:
     NewKeyPair:
       Type: 'AWS::EC2::KeyPair'
       Properties: 
         KeyName: new-key-pair
   ```

1. 다음과 같이 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 명령을 사용하여 키 페어의 ID를 가져옵니다.

   ```
   aws ec2 describe-key-pairs --filters Name=key-name,Values=new-key-pair --query KeyPairs[*].KeyPairId --output text
   ```

   다음은 예제 출력입니다.

   ```
   key-05abb699beEXAMPLE
   ```

1. 다음과 같이 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 명령을 사용하여 키의 파라미터를 가져오고 키 구성 요소를 `.pem` 파일에 저장합니다.

   ```
   aws ssm get-parameter --name /ec2/keypair/key-05abb699beEXAMPLE --with-decryption --query Parameter.Value --output text > new-key-pair.pem
   ```

**필수 IAM 권한**

CloudFormation이 사용자를 대신하여 파라미터 스토어 파라미터를 관리할 수 있도록 하려면 CloudFormation 또는 사용자가 수임하는 IAM 역할에 다음 권한이 있어야 합니다.
+ `ssm:PutParameter` - 이 프라이빗 키 구성 요소에 대한 파라미터를 생성할 수 있는 권한을 부여합니다.
+ `ssm:DeleteParameter` - 프라이빗 키 구성 요소를 저장하는 데 사용된 파라미터를 삭제할 권한을 부여합니다. 이 권한은 CloudFormation에서 키 페어를 가져왔거나 생성했는지에 관계없이 필요합니다.

CloudFormation은 키 페어를 생성할 때만 파라미터를 생성하고 키 페어를 가져올 때는 파라미터를 생성하지 않지만, 스택에 의해 생성되거나 가져온 키 페어를 삭제할 때 CloudFormation은 권한 확인을 수행하여 사용자에게 파라미터를 삭제할 권한이 있는지 확인합니다. CloudFormation은 사용자 계정의 파라미터와 일치하지 않는 조작된 파라미터 이름을 사용하여 필요한 권한을 테스트합니다. 따라서 `AccessDeniedException` 오류 메시지에 조작된 파라미터 이름이 표시될 수 있습니다.

## 서드 파티 도구를 사용하여 키 페어를 생성하고 Amazon EC2로 퍼블릭 키 가져오기
<a name="how-to-generate-your-own-key-and-import-it-to-aws"></a>

Amazon EC2를 사용하여 키 페어를 생성하는 대신에 서드 파티 도구를 사용하여 RSA 또는 ED25519 키 페어를 생성한 다음에 Amazon EC2로 퍼블릭 키를 가져올 수 있습니다.

**키 페어에 대한 요구 사항**
+ 지원되는 유형:
  + (Linux 및 Windows) RSA
  + (Linux만 해당) ED25519
**참고**  
ED25519 키는 Windows 인스턴스에서 지원되지 않습니다.
  + Amazon EC2는 DSA 키를 허용하지 않습니다.
+ 지원되는 형식:
  + OpenSSH 퍼블릭 키 형식(Linux의 경우 `~/.ssh/authorized_keys`의 형식)
  + (Linux만 해당) EC2 Instance Connect API를 사용하는 동안 SSH를 사용하여 연결하는 경우 SSH2 형식도 지원됩니다.
  + SSH 프라이빗 키 파일 형식은 PEM 또는 PPK이어야 함
  + (RSA만 해당) Base64 인코딩 DER 형식
  + (RSA만 해당) [RFC 4716](https://www.ietf.org/rfc/rfc4716.txt)에 지정된 SSH 퍼블릭 키 파일 형식
+ 지원되는 길이:
  + 1024, 2048, 4096.
  + (Linux만 해당) EC2 Instance Connect API를 사용하는 동안 SSH를 사용하여 연결하는 경우 지원되는 길이는 2048 및 4096입니다.

**타사 도구를 이용한 키 페어 만들기**

1. 타사 도구로 원하는 키 페어를 생성합니다. 예를 들어 **ssh-keygen**(표준 OpenSSH 설치 시 제공되는 도구)을 사용할 수 있습니다. 또는 Java, Ruby, Python 등 각종 프로그래밍 언어에서 제공하는 표준 라이브러리를 사용하여 키 페어를 생성해도 됩니다.
**중요**  
프라이빗 키는 PEM 또는 PPK 형식이어야 합니다. 예를 들어 `ssh-keygen -m PEM`을 사용하여 PEM 형식으로 OpenSSH 키를 생성합니다.

1. 퍼블릭 키는 로컬 파일에 저장합니다. 예: `~/.ssh/my-key-pair.pub`(Windows, macOS) 또는 `C:\keys\my-key-pair.pub`(Windows). 이 파일의 파일 이름 확장자는 중요하지 않습니다.

1. 프라이빗 키를 확장자가 `.pem` 또는 `.ppk`인 로컬 파일에 저장합니다. 예: `~/.ssh/my-key-pair.pem` `~/.ssh/my-key-pair.ppk`(Linux, macOS) 또는 `C:\keys\my-key-pair.pem` `C:\keys\my-key-pair.ppk`(Windows). 파일 확장자는 인스턴스에 연결하는 데 사용하는 도구에 따라 특정 파일 형식이 필요하므로 중요합니다. OpenSSH에는 `.pem` 파일이 필요한 반면, PuTTY에는 `.ppk` 파일이 필요합니다.
**중요**  
프라이빗 키 파일을 안전한 장소에 저장합니다. 인스턴스를 시작할 때 퍼블릭 키의 이름을 제공하고, 인스턴스에 연결할 때마다 해당 프라이빗 키를 제공해야 합니다.

키 페어를 만든 후 다음 방법 중 하나를 사용하여 퍼블릭 키를 Amazon EC2로 가져옵니다.

------
#### [ Console ]

**Amazon EC2로 퍼블릭 키를 가져오려면**

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

1. 탐색 창에서 [**Key Pairs**]를 선택합니다.

1. **키 페어 가져오기**를 선택합니다.

1. [**이름(Name)**]에 퍼블릭 키를 설명하는 이름을 입력합니다. 이름에는 최대 255자의 ASCII 문자를 포함할 수 있습니다. 선행 또는 후행 공백을 포함할 수 없습니다.
**참고**  
EC2 콘솔에서 인스턴스에 연결할 때 콘솔은 프라이빗 키 파일의 이름으로 이 이름을 제안합니다.

1. **찾아보기**를 선택하여 퍼블릭 키를 탐색하고 선택하거나 퍼블릭 키의 내용을 **퍼블릭 키 내용** 필드에 붙여 넣습니다.

1. **키 페어 가져오기**를 선택합니다.

1. 가져온 퍼블릭 키가 키 페어 목록에 나타나는지 확인합니다.

------
#### [ AWS CLI ]

**Amazon EC2로 퍼블릭 키를 가져오려면**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html) 명령을 사용합니다.

```
aws ec2 import-key-pair \
    --key-name my-key-pair \
    --public-key-material fileb://path/my-key-pair.pub
```

**키 페어를 성공적으로 가져왔는지 확인하려면**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 명령을 사용합니다.

```
aws ec2 describe-key-pairs --key-names my-key-pair
```

------
#### [ PowerShell ]

**Amazon EC2로 퍼블릭 키를 가져오려면**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html) cmdlet을 사용하세요.

```
$publickey=[Io.File]::ReadAllText("C:\Users\TestUser\.ssh\id_rsa.pub")
Import-EC2KeyPair `
    -KeyName my-key-pair `
    -PublicKey $publickey
```

**키 페어를 성공적으로 가져왔는지 확인하려면**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html) cmdlet을 사용하세요.

```
Get-EC2KeyPair -KeyName my-key-pair
```

------