

# Amazon EC2 インスタンスのキーペアを作成する
<a name="create-key-pairs"></a>

Amazon EC2 を使用してキーペアを作成できます。またはサードパーティー製のツールを使用して、キーペアを作成してから、Amazon EC2 にインポートすることもできます。

Amazon EC2 はLinux および Windows インスタンスで 2048-bit 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. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインの [**Network & Security**] で、[**Key Pairs**] を選択してください。

1. [**キーペアの作成**] を選択してください。

1. [**Name (名前)**] に、キーペアのわかりやすい名前を入力してください。Amazon EC2 はキー名として指定した名前にパブリックキーを関連付けます。キー名には最大 255 文字の ASCII 文字を含めることができます。先頭または末尾にスペースを含めることはできません。

1. 使用しているオペレーティングシステムに適したキーペアのタイプを選択してください。

   (Linux インスタンス) **[キーペアのタイプ]**で **[RSA]** または **[ED25519]** を選択してください。

   (Windows インスタンス) **[キーペアのタイプ]** で **[RSA]** を選択してください。Windows インスタンスでは **ED25519** キーはサポートされていません。

1. [**Private key ファイル形式**] に、プライベートキーを保存する形式を選択してください。OpenSSH で使用できる形式でプライベートキーを保存するには[**pem**] を選択してください。プライベートキーを PuTTY で使用できる形式で保存するには[**ppk**] を選択してください。

1. タグを追加するには[タグの追加] ページで **[タグの追加]** をクリックし、タグのキーと値を入力してください。各タグについて、これを繰り返します。

1. [**キーペアの作成**] を選択してください。

1. ブラウザによって秘密キーファイルが自動的にダウンロードされます。ベースファイル名はキーペアの名前として指定した名前で、ファイル名拡張子は選択したファイル形式によって決まります。ダウンロードしたプライベートキーのファイルを安全な場所に保存します。
**重要**  
プライベートキーのファイルを保存できるのはこのタイミングだけです。

1. macOS または Linux コンピュータの SSH クライアントを使用して Linux インスタンスに接続する予定がある場合は自分以外のユーザーが読み込むことができないように、次のコマンドを使用してプライベートキーファイルの許可を設定します。

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

   これらのアクセス権限を設定しないと、このキーペアを使用してインスタンスに接続できません。詳細については「[エラー: Unprotected Private キー ファイル (保護されていないプライベートキーファイル)](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` オプションは指定されたファイルにプライベートキーのマテリアルを保存します。拡張子は、キー形式に応じて`.ppk` または `.pem` のいずれかである必要があります。プライベートキーには公開キーの名前とは異なる名前を指定できますが、使いやすくするために、同じ名前を使用してください。

   ```
   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
   ```

   これらのアクセス権限を設定しないと、このキーペアを使用してインスタンスに接続できません。詳細については「[エラー: Unprotected Private キー ファイル (保護されていないプライベートキーファイル)](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) コマンドレットを使用してキーを生成し、`.pem` または `.ppk` ファイルに保存します。**Out-File** コマンドレットは、プライベートキーのマテリアルを拡張機能とともにファイルに保存します。拡張子は、キー形式に応じて`.ppk` または `.pem` のいずれかである必要があります。プライベートキーには公開キーの名前とは異なる名前を指定できますが、使いやすくするために、同じ名前を使用してください。

```
(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 パラメータストア](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. キーペアの ID を取得するには次のように [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 --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 がユーザーに代わって Parameter Store パラメータを管理できるようにするには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
**注記**  
Windows インスタンスでは ED25519 キーはサポートされていません。
  + Amazon EC2 は DSA キーを受け付けません。
+ サポートされる形式:
  + OpenSSH パブリックキー形式 (Linux の場合、`~/.ssh/authorized_keys` の形式)
  + (Linux のみ) EC2 Instance Connect API の使用中に SSH を使用して接続する場合はSSH2 形式もサポートされます。
  + SSH プライベートキーファイル形式は PEM または PPK である必要があります
  + (RSA のみ)Base64 でエンコードされた DER 形式
  + SSH パブリックキーファイル形式 [[RFC4716](https://www.ietf.org/rfc/rfc4716.txt)] で指定
+ サポートされている長さ:
  + 1024、2048、および 4096。
  + (Linux のみ) EC2 Instance Connect API の使用中に SSH を使用して接続する場合は長さ 2048 および 4096 がサポートされます。

**サードパーティーツールを使用してキーペアを作成するには**

1. 選択したサードパーティ製のツールでキーペアを生成します。例えば、**ssh-keygen** (標準 OpenSSH インストールで提供されるツール) を使用しできます。また、Java、Ruby、Python などのさまざまなプログラミング言語ではキーペアの作成に使用できる標準ライブラリが提供されています。
**重要**  
プライベートキーはPEM または PPK 形式である必要があります。例えば、`ssh-keygen -m PEM` を使用して OpenSSH キーを PEM 形式で生成します。

1. ローカルファイルにパブリックキーを保存します。例えば、`~/.ssh/my-key-pair.pub` (Linux、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. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**キーペア**] を選択してください。

1. [**Import Key Pair (キーペアのインポート)**] を選択してください。

1. [**Name (名前)**] に、パブリックキーのわかりやすい名前を入力してください。名前には最大 255 文字の ASCII 文字を含めることができます。先頭または末尾にスペースを含めることはできません。
**注記**  
EC2 コンソールからインスタンスに接続すると、コンソールはプライベートキーファイルの名前としてこの名前が提示します。

1. [**Browse (参照)**] を選択してパブリックキーに移動して選択するか、パブリックキーのコンテンツを [**Public key contents (パブリックキーのコンテンツ)**] フィールドに貼り付けます。

1. [**Import Key Pair (キーペアのインポート)**] を選択してください。

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) コマンドレットを使用します。

```
$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) コマンドレットを使用します。

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

------