[AWS]パブリックサブネットのEC2にSSM接続しようとしてみた
本記事では、「パブリックサブネットに置かれたEC2にSSM接続したいときの具体的な設定の仕方」、「沼ったポイント」を自戒も込めて記録します。
やろうとしたこと
「パブリックなサブネットに置かれているらしいEC2に対して、SSM接続してフリートマネージャを使ってコンソールからEC2をいじろう!(/・ω・)/」
SSM接続の仕組みを理解
はじめにSSM接続の仕組みについて説明します。
参考にしたURLは以下です。SSM接続についてとても詳しく書かれており、EC2がプライベートサブネットにある場合のやり方も書いてあるので、とても参考になりました。
①まずEC2から、AWS上のSSMに接続し行く形で、EC2-SSM間で通信。
OS起動時にEC2の中にあるSSMAgentが、SSMに接続しに行きます。
プライベート環境であれば、VPCエンドポイントを介してAWSPrivateNetwork経由で接続します。
パブリック環境でも、AWSPrivateNetwork経由接続で接続します(←ここ大事、インターネット経由接続ではない。)
このために、EC2にはSSMへの権限が必要になります。
また、EC2セキュリティグループのアウトバウンド開放も必要になります。(通信はステートフルのため、インバウンドは不要)
②ユーザーがSSMコンソールからフリートマネージャでEC2を操作
通常のRDP接続とは異なり、SSMがEC2との通信を代行しているので、私たちのPCはWEBコンソールに接続でき、使用しているユーザにSSMアクセス権限があれば問題ないということになります。

私はどうしてもPCから右へ一直線にEC2に接続するのをイメージしがちですが、EC2~SSM間。SSM~ユーザー間。WEBコンソール~PC間
と接続が疎結合になっているんですね。
(AWSの人がやってる研修を受けた時に、
「クラウドは、疎結合の概念が一番大事。これを知らんやつは終わり」みたいなことを言われたので、積極的に疎結合の概念を思い出していこうと思います。)
必要な設定
・SSMAgentのインストールORプリインストールの確認
・セキュリティグループのアウトバウンド全開放
・AmazonSSMManagementinstanceCoreRoleの作成とEC2への割り当て
・SSMFullポリシーのユーザーへの割り当て
設定をおこなうが。。。?
以上を踏まえて、設定を行いました。
・AmazonSSMManagementinstanceCoreRoleの作成とEC2への割り当て
・SSMFullポリシーのユーザーへの割り当て
・アウトバウンド全開放セキュリティグループをEC2にアタッチ
・SSMAgentのインストールもしくはプリインストール確認
⇒
⇒
⇒
結果、いつまでたってもフリートマネージャにノードとしてEC2が表示されないT^T
⇒
⇒
⇒
状態的にEC2がSSMと接続できていないことと、パブリックサブネットらしい!くらいの情報しかないまま構築したので、ネットワークらへん問題があるとみて調査しました。
犯人
犯人は、ネットワークを精査し、いろいろ調べたのちわりとすぐ判明しました。
EC2環境はパブリックサブネットだと思っていて、
確認したところIGWが0.0.0/0にルーティングされていたので、セキュリティグループを開放すればVPC外のAWSサービスとも通信できるぞ!と思っていましたが、
・NACLによってアウトバウンドとインバウンドが制限されていました。
また、
・たてたEC2にパブリックIPアドレス付与してませんでした。
さらに
・SSMAgentがプリインストールされてると思ったらされてませんでした。
ぜんぜんだめだった、、、、
書かれていたことだけやっていても、うまくいかないものですねT^T
対処したこと
まず、
・NACLによってアウトバウンドとインバウンドが制限されていました。
これに関しては、セキュリティグループでアウトバウンドを許可していても、そもそもNACLでサブネットごと制御されていたらSSMと通信できないよね、ということなので、
NACLのインバウンドアウトバウンドを解放しました。(NACLはセキュリティグループと違って、ステートレスなのでインバウンドアウトバウンド両方あけないと意味ない。これも忘れがち!)
・たてたEC2にパブリックIPアドレス付与してませんでした。
付与しました。あとからもできてよかった。
・SSMAgentがプリインストールされてると思ったらされてませんでした。
に関しては、さきにssm接続できたEC2を踏み台にして接続し、インストールしました。
反省
ネットワークの設定を確認するとか、通信の通り道を確保するとかで、セキュリティグループについてはよく言及さますが、意外とそもそもNACLで制限をかけていたことを忘却していたりするので、何かあった時にNACLの設定を確認するのを忘れないようにしたいとおもいます。
OSバージョンが最新ならAMIにSSMAgentは当たり前にプリインストールされているだろうと思っていたら、プリインストール対象外が余裕でありました、、、使用するAMIにSSMAgentがインストールされているか、きちんと確認したいと思います。
EC2をたてるとき、パブリックIP付与をオフにしてもいいか確認する。(課金があるのですぐオフにしたくなる)
➕α
今回、NACL全解放じゃなくてSSM agentの通信だけ特定して許可できないの?と聞かれたので
調べてみました。
結論としては、
無理でした。
EC2は、SSMagentにhttps通信で通信しに行っているようですが、帰りの通信がなにかはわからないからです。
セキュリティグループだけだったら、アウトバウンドを443開放だけでいけるかもです。