Beanstalkで使用されるEC2のSGの設定を変更するには?


背景

Beanstalk を使用してWindowsサーバーを構築し、 RDP 接続も行えるようにしたい。

RDP 接続を行うためには EC2 のキーペア(秘密鍵)がログインパスワードを取得するのに必要になる。

Beanstalk の設定画面で「 EC2 キーペア」を有効にすると、 Beanstalk (正確に言うと CloudFormation )によって自動生成されるセキュリティグループに22番ポートが 0.0.0.0/0 で許可される。

やりたかったこと

Beanstalk によって自動で作成されるセキュリティグループだと22番ポートがフル解放されるため、これを使わずに予め自分で作成しておいたセキュリティグループのみ使って構築したい。

試したこと

Beanstalk の設定画面にある「インタンスの変更」の「インスタンスセキュリティグループ」で、既存のセキュリティグループを選択すれば自動でセキュリティグループは作成されないと考えていた。

結果

「インタンスの変更」で選択した既存のセキュリティグループと、Beanstalk によって自動で作成されたセキュリティグループが使用された。

次に試したこと

Beanstalk はアプリケーションをデプロイする際に ebextensions を追加することで、Beanstalk のコンソール画面からでは設定できない項目もカスタマイズすることができる。

ebextensions に既存のセキュリティグループのみを使って構築するような設定を記載すれば、やりたいことが実現できると考えていたが、これはどうやらできないらしい。

22番ポートをフル解放させないためには

Beanstalk の仕様上セキュリティグループが必ず作成されてしまい、キーペア使用すると22番ポートがデフォルトではフル解放される。

作成されたセキュリティグループは必ず使用されてしまうので、 22番ポートが許可されたセキュリティグループを使わないという考えから、22番ポートの許可設定を変更しセキュリティリスクを下げるという考えにシフトする必要がある

下記 ebextensions を追加することで22番ポートの許可設定を変更することができる。

option_settings:
  - namespace:  aws:autoscaling:launchconfiguration
    option_name: SSHSourceRestriction
    value: tcp, 22, 22, 127.0.0.1/32

この ebextensions を追加してデプロイすると、 Beanstalk の設定画面で「 EC2 キーペア」を有効にしても22番ポートが 127.0.0.1/32 の IP のみ、つまり自分自身の IP のみ通信を許可するような設定にすることができる。

これにより、不用意に22番ポートをフル解放せずに構築を行うことができる。

結論

EC2 で使用されるセキュリティグループは Beanstalk によって自動で作成される、予め自分で用意したセキュリティグループのみ使って構築するということはできない。

自動で作成されるセキュリティグループの中身は Beanstalk の設定画面で「 EC2 キーペア」を選択すると22番ポートが 0.0.0.0/0 で許可される。

作成されたセキュリティグループは必ず使用されてしまうので、22番ポートの許可設定をオーバライドするような ebextensions を追加する必要がある。

そもそも、インスタンスにログインしないように構築することがベストではあるが、お客様の要件によっては必要になるケースも存在すると思い記事を投稿した。

因みに ELB であれば Beanstalk によって自動で作成されるセキュリティグループを使わずに、既存のセキュリティグループを使用するような設定を行うことができる。
参考:https://aws.amazon.com/jp/premiumsupport/knowledge-center/security-group-elastic-beanstalk/