SSMセッションマネージャーでKMS暗号化を有効化したらつながらなくなった話
以前、
プライベートなEC2にSSMセッションマネージャーで接続してみた
という記事を書き、その延長線上の検証として、KMS暗号化を有効化しました。
ところが、有効化したらアクセスしてもエラーになってしまったので、原因と解決法を紹介します。
結論
原因は、KMS用のVPCエンドポイントがなかったこと。またはNAT Gatewayを使用していなかったこと。
解決法は、KMS用のVPCエンドポイントを作ること、またはNAT Gatewayを作ることです。
詳細
初期構成図
・プライベートサブネットにEC2インスタンスを構築
・VPCエンドポイント経由でSSMセッションマネージャーを使用
・KMS暗号化は無効
エラー時の構成図
・SSMのKMS暗号化を有効化
この状態では、EC2がプライベートサブネットにあるため、インターネットアクセスもできず、VPCエンドポイントもないので、KMSに到達することができず、エラーになりました。
セッションが次の理由で終了されました。 ----------ERROR------- Encountered error while initiating handshake. Handshake timed out. Please ensure that you have the latest version of the session manager plugin.
解決策1 KMS用VPCエンドポイントを作成
SSMへのプライベート接続同様に、KMS用のVPCエンドポイントがあるので、それを使用します。エンドポイントを1つ作成するだけなので、簡単にできます。
解決策2 パブリックサブネットにNAT Gatewayを作成
インターネットアクセスできない問題をNAT Gatewayで解決します。
NAT Gatewayはパブリックサブネットに作成する必要があるため、パブリックサブネットに設定が必要です。
NAT Gatewayの別パターン
NAT Gatewayがあればインターネット経由でSSMにもアクセスできるので、VPCエンドポイントは不要になります。
VPCエンドポイントとNAT Gatewayの簡単な比較
冗長性
両者ともAZごとに作成できます。
設定方法
・NAT Gatewayは一度作れば、今回のKMSとSSMのように複数の接続に使用できます。
・VPCエンドポイントは接続したいサービスごとに作成が必要です。
料金
計算ツールでの概算です。
NAT Gatewayを3AZに作成すると、98.55USD
VPCエンドポイント4つを3AZに作成すると、87.60USD
VPCエンドポイント5つを3AZに作成すると、109.50USD
データ量は考慮していませんが、3AZに分散させる場合、VPCエンドポイントが5つを超える場合は、NAT Gatewayの方が安くなりそうです。
インターネット接続の要件
そもそもインターネット接続が必要なのか、AWSサービスとの通信だけで良いのかなどの要件にもよると思いますので、使い分けが重要かと思います。
以下の記事も参考になると思います。
そのトラフィック、NATゲートウェイを通す必要ありますか?適切な経路で不要なデータ処理料金は削減しましょう
まとめ
SSMセッションマネージャーでKMS暗号化を有効化したらつながらなくなった話の原因と解決策を紹介しました。
意外なところでハマってしまったので、どなたかの参考になれば幸いです。
参考資料
・プライベートなEC2にSSMセッションマネージャーで接続してみた
・そのトラフィック、NATゲートウェイを通す必要ありますか?適切な経路で不要なデータ処理料金は削減しましょう
Discussion