EC2 Instance Connect の特徴や注意点についてまとめてみる

## はじめに
2019/6/27 に EC2 に SSH するための新しい機能 である
**Amazon EC2 Instance Connect** が利用できるようになりました

**Introducing Amazon EC2 Instance Connect**
https://aws.amazon.com/jp/about-aws/whats-new/2019/06/introducing-amazon-ec2-instance-connect/

軽く触った程度ではありますが、気になった点などをまとめてみました。

## Session Manager との違い
ブラウザやAWS CLIベースのシェルアクセスを提供する機能として
[AWS Systems Manager Session Manager](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html) が以前から利用できました。

### Session Manager の特徴
セッションマネージャーは SSM Agentを介してシェルを利用するため、SSH接続ではありません。
そのためOS観点ではユーザーログインの履歴が残らないなどのデメリットもあります。
もちろんセッションマネージャーのログとしてAWS側には残りますし、
SSH自体使う必要がないのも大きなメリットです。

また2019/7/9 にはSession Manager側でSSHおよびSCPをトンネリングして
EC2に接続できる機能も追加されています。

**Session Manager launches tunneling support for SSH and SCP**
https://aws.amazon.com/about-aws/whats-new/2019/07/session-manager-launches-tunneling-support-for-ssh-and-scp/

### Instance Connect の特徴
EC2 Instance Connect は 通常のSSHを利用しながらも AWS側の API を利用するので
CloudTrailに接続記録が残ったりIAMでログインできる人を制御できるのが特徴です。
また接続の仕組みとして Instance Connect のAPIは1回限り(60秒間)有効な使い捨ての
SSHキーをセットアップするため、よりセキュアなSSH接続を実現するすることができます。

またコンソールや専用のCLI（EC2 Instance Connect CLI）だけでなく、
PuTTY や TeraTerm など 任意のSSHクライアントを利用して接続することができます。

どちらが良い悪いではなく、どのような管理を行いたいかによって
利用者がより柔軟に接続方法を選択できるようになったと感じています。

## セキュリティグループの設定
コンソールやCLIで Instance Connect で接続するには対象のEC2が
パブリックに接続できる必要があります。
特にコンソールから接続する際にはセキュリティグループの考慮が必要で、
EC2 Instance Connectが利用するIPアドレス範囲に絞るべきです。

使用されるIPのレンジは [公開されており](https://ip-ranges.amazonaws.com/ip-ranges.json),
2019/6/28 時点で東京リージョンは3.112.23.0/29 となっています。

```json
    {
      "ip_prefix": "13.209.1.56/29",
      "region": "ap-northeast-2",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "13.233.177.0/29",
      "region": "ap-south-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "13.239.158.0/29",
      "region": "ap-southeast-2",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "13.52.6.112/29",
      "region": "us-west-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "18.202.216.48/29",
      "region": "eu-west-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "18.206.107.24/29",
      "region": "us-east-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "18.228.70.32/29",
      "region": "sa-east-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "18.237.140.160/29",
      "region": "us-west-2",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "3.0.5.32/29",
      "region": "ap-southeast-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "3.112.23.0/29",
      "region": "ap-northeast-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "3.120.181.40/29",
      "region": "eu-central-1",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "3.16.146.0/29",
      "region": "us-east-2",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "3.8.37.24/29",
      "region": "eu-west-2",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "35.180.112.80/29",
      "region": "eu-west-3",
      "service": "EC2_INSTANCE_CONNECT"
    },
    {
      "ip_prefix": "35.183.92.176/29",
      "region": "ca-central-1",
      "service": "EC2_INSTANCE_CONNECT"
    }
```

**AWS IP アドレスの範囲**
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html

ただしAWSが使用するIPレンジは、変更される可能性があるため、
必要に応じて変更のチェックと設定の変更を行うという運用も必要になってくるのではと思います。

以上です。
参考になれば幸いです。

## 参考
**Connecting to Your Linux Instance Using EC2 Instance Connect**
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect.html