いつもの公開鍵でアクセスできるEC2を立ち上げる

**いつも使っている公開鍵** でアクセスできる Amazon EC2 インスタンスを立ち上げる方法について解説します。

いつも使っている公開鍵とは GitHub に登録しているものを想定しています。
また、 使用する AMI は ubuntu 18.04 のもの想定しています。
AWS コンソールのダッシュボードは 2020/05/22 に私がアクセスした時のものを想定しています。

EC2 インスタンスへのアクセスにいつもの公開鍵を使うようにすることで、AWS のダッシュボードで生成したキーペアを管理する手間を省くことができます。

## GitHub に登録している公開鍵について

GitHub に登録している公開鍵は、 `https://github.com/ユーザー名.keys`という URL で　`text/plain` でアクセスできます。複数の公開鍵を登録している人は複数行で出力されます。

```shell
$ curl https://github.com/kamataryo.keys
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFd05sWXhWHfY2ciIkghahLY+YLJKvPuRYWUVm4buBrKvDhIgYV6pj5g/M5jTwSr7lS9nx7DV/B+fGh92dOmj/7HAGaByWXTsIHdBsQnCO0Qbu8xbzTbewIYsClfVf5XWagbIHQx02PQv9mlUsBlCaJxr0ZS8gudCRDgOPil/AdlSj4RQ==
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDeivU3S06V2FFYU1a6ekotDU1jeB5F9F3Nd9XD5OSg6pSFSZVcEticSFqSadRmhvTzIKfFihLVlX3aGkEbuj9U705+TSViiSm5xz0R/00UxQMq/iY9by7r8W1oqgCkbupEdHo6ltfEAjFmrYiVKcAuWooIvKb+0DYJBUX9+xCDvaVHynifw586G/TnzBLkwpS93BcDNYYagu1u1Aaik5lXC1tSyzzKqpGaER5ZDVlMSSSa82at2mGIJsGXb/u4D7gPrmX3zgCSviCcCfyTIbk+m9nKg2FAi4uy2yJAvao4y+GpHQk+KIvcKS/os6z/KJi09CA7eTAtYyawffcijfR7
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCgz7nsId0wHKy5qL3CL9qVuiAoP7INZJ1QPvYzkhGLPhZF8DxPcmdb046kWQFYcLUixKDCVByXvv60UDBq56cNGcFxnKSkfSfyBoEXqLY4V4gMlq+gA21D0ddhK7/3kc+HHf8jaEU5wBs2K3oG9KiDnRvHvXvCjanzjDZYS6CrywLjkLKO+0KzS3NwLk2CTH+cDOoR4Vlo5q4PdlANU+XcwIYQzRC8ieiOq8zycH0m60bMCJ+5AY+xqzjrWcsKy/aAHym/Jlp1iyZEbBKV22MivTlb/hGSpaATmSJ0Hdv0D8dTLgRmoj4/nf1hjAEAjsmBPzG39ue6+dJnrV/6BBAH
```

## 起動テンプレートの作成

今回は Amazon EC2 の起動テンプレートという機能を使い、インスタンス起動時に GitHub から公開鍵を取得して登録します。

[https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#CreateTemplate:](https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#CreateTemplate:)

EC2のダッシュボードまたは上記のリンクから起動テンプレートの作成画面に移動して、必要な情報を埋めてください。必須の項目は *起動テンプレート名* のみです。

<img width="1342" alt="Screenshot 2020-05-22 11.07.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125062/4ab2eebf-98ad-86bd-389f-ace12f3f6e85.png">


**キーペア** の項目は、`起動テンプレートに含めないでください` という値を選んでおくと使い回しの秘密鍵を使わせないで済むのでセキュアですね。

<img width="826" alt="Screenshot 2020-05-22 11.10.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125062/9f90f0b4-2941-c708-113a-97d8c44b5ada.png">

### ユーザーデータの設定

**高度な設定** という見出しをクリックしてトグルを開くと、**ユーザーデータ**という項目があります。EC2 の起動時に実行されるされるスクリプトをここに記述することができます。
GitHub から公開鍵を取得して認可済みの公開鍵として登録するスクリプトを記述します。

<img width="842" alt="Screenshot 2020-05-22 11.17.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125062/12e3af73-9d9c-bb06-4c28-efb9e15fdd1e.png">

```shell
#!/bin/bash
mkdir -p /home/ubuntu/.ssh
# 以下の URL はあなたのGitHub のユーザー名に置き換えてください
curl https://github.com/ユーザー名.keys >> /home/ubuntu/.ssh/authorized_keys
chmod 700 /home/ubuntu/.ssh
chmod 600 /home/ubuntu/.ssh/authorized_keys
```

シェバン（`#!/bin/bash`）がないと正しく実行されないので注意してください。
これでテンプレートの設定は終了です。

## テンプレートから EC2 を起動する

[テンプレートの起動画面](https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#LaunchTemplates:) から作成したテンプレートを選択できます。

<img width="1392" alt="Screenshot 2020-05-22 11.32.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125062/f61fcf83-79f2-c3af-013c-d23a5e9f56bf.png">

テンプレートからインスタンスを起動すると、いつもの公開鍵でSSH接続できるものが立ち上がるはずです。

```shell
# <IPアドレス>はEC2インスタンスのものに置き換えてください
$ ssh ubuntu@<IPアドレス>
```