はじめに
EC2 Instance ConnectがPrivate Subnetに対応したEC2 Instance Connect Endpointが出たようなので試してみた
応用すれば、ローカルとRDSをVPNなしで接続可能!!
事前準備
- AWS-CLI aws-cli/2.12.0以上をローカルにインストール
- VPCの構築
- EC2の構築とSSHのキーペア or Windowsのパスワードを控える
構築
-
マネジメントコンソールの場合
- VPCのコンソールを開く
- 左のペインからエンドポイントを選択
- エンドポイントを作成を謳歌
- EC2 Instance Connect Endpointを選択し、適当なVPCとサブネット、セキュリティグループを選択
-
CloudFormationの場合
ドキュメントはあるのに実際に試したら非対応リソースだった。悲しいね。ドキュメントリンク
AWSTemplateFormatVersion: '2010-09-09'
Resources:
EICEndPoint:
Type: AWS::EC2::InstanceConnectEndpoint
Properties:
SecurityGroupIds:
- String
SubnetId: String
接続
-
以下のコマンドを実行する
aws ec2-instance-connect open-tunnel \ --instance-connect-endpoint-id エンドポイントID \ --private-ip-address EC2のプライベートIP \ --local-port ローカルで使用するポート(今回は13389) \ --remote-port ターゲットのポート(今回はRDPなので3389を指定)
-
リモートデスクトップアプリに
127.0.0.1:ローカルで使用するポート
を入力
無事ローカルとVPCをEC2 Instance Connect Endpointを使用して繋ぐことができました
※ SSHの場合は下記のコマンドを実行する(手順1はremote-port引数を省略するor22番ポートを指定する以外変化なし)
ssh -i キーペア(pemファイル)へのパス ec2-user@localhost -p 10022
課題になりそうなところ
- WebSocketを使っているので、Proxy配下では死ぬ可能性がある
- SSHの場合、キーペアの保管がいる(マネジメントコンソールから接続する場合は不要)
- CloudFormation・CDKによる構築が未対応(カスタムリソースで対応可能 → リンク )
- AWS CloudTrailでの監視になる(別途CloudWatchやS3、Athenaと連携が必要になる)
- 接続先をIAM Policyで制御できず、セキュリティグループによる制御が必要になる(=グループ・人を限定して制御できない)
- VPC1つに付き1つのエンドポイント(=AZ障害に弱い)
良いと感じたところ
- VPCエンドポイントが不要なので安い(転送料のみ)
- SSHやRDPだけでなく、VPCのリソースにはすべてアクセスできるのでVPNのように使える(常時接続不可なので、ちょっとした作業に良い)
- 踏み台撲滅できる
- IAM Policyで接続元のIPアドレス制限が可能(=マネコンアクセスと一括管理が可能)