🏸

EC2 Instance Connect EndpointをCDKで作成する

2023/10/02に公開

背景

EC2 Instance Connect Endpoint (以下 EIC)がリリースされ数ヶ月経ちました。
踏み台インスタンスの撲滅につながる画期的なサービスですが、Cloudformation非対応なのが悲しいポイントでした。

そんななかしれっとCfn対応していた(すなわちCDK L1Constructで作れる)のでさくっとご紹介です。

実装例

import { aws_ec2 as ec2 } from 'aws-cdk-lib';

const cfnInstanceConnectEndpoint = new ec2.CfnInstanceConnectEndpoint(this, 'ec2InstanceConnectEndpoint', {
  subnetId: 'subnetId', // 必須。private, publicいずれでもOK。

  // 以下、任意の引数
  clientToken: 'clientToken', // よくわからない。誰か教えてください。
  preserveClientIp: false, // 後段のEC2へのリクエスト時に実際にリクエストを行ったアクセス元のIP情報を保持するか? default true
  securityGroupIds: ['securityGroupId'], // セキュリティグループのID
  tags: [{
    key: 'key',
    value: 'value',
  }],
});

参考リンク

公式ドキュメント

参考issue

従来の方法(カスタムリソースで作成)

最後に

EIC経由でweb socketトンネルを張ってアクセスできますが、SSH, RDP以外の通信がリリース後1週間程度で閉じられてしまったのがとてもショックでした。
ただ、まさかのDB側でlistenするポートを3389(RDP)にすると通過できるのにウケています。
参考記事

猛烈に便利ですが、いつか封じられたり(どうやって?)したら困るなあと思い、あんまり採用に至っていません。
とりあえず個人開発用途なら全然良いのではと思っています。

Discussion