特定 EC2 インスタンスには、SSM セッションログインさせたくないんや
先日の update で、SSM のセッションマネージャがリリースされたことで、SSH を使用せず簡単に EC2 にログインすることが可能になりました。簡単にログインできることは嬉しい反面、これまで SSH キーペアや、ソース IP アドレスなどの限られた接続元からのアクセスに限定することでセキュリティを担保されていた管理者の中には、「何してくれとんじゃー!」という気持ちも少なからずあるのではないでしょか、、。
そんな方に、SSM セッションマネージャを簡単に制限する方法について紹介します。
セッションマネージャだけ制限する
簡単に制限するならば、EC2 や IAM ユーザに、SSM の権限を渡さなければよいのですが、SSM は非常に便利なツールなので SSM すべての機能を制限したくはないですよね。SSM は使いつつ、セッションマネージャだけを制限したい。そのような場合は、以下のような IAM ポリシーで対応が可能です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": "*" } ] }
この IAM ポリシーを制限したい IAM ユーザにアタッチすると、以下のように接続エラーになります。
セッションマネージャのみの制限なので、他の SSM 機能は利用できます。この状態で、RunCommand で hostname
を実行すると、正常に動作しています。もちろん、要求されるセキュリティレベルに応じて、セッションマネージャ以外にも RunCommand を制限したい場合もあるかと思いますので、そこは適宜対応ください。
特定インスタンスのみセッションマネージャを制限する
すべてのインスタンスで制限したい場合は先述のとおりですが、環境によっては、「開発環境は別にいいけど、本番環境だけ制限したい」というような要望もあるのではないでしょか。その場合は、EC2 タグを使って、セッションマネージャを使える環境、使えない環境を分けることが可能です。
たとえば、EC2 インスタンスに以下のように環境識別用のタグ Env
をつけておきます。値は、本番環境が Prd
、開発環境が Dev
とします。
次に、先程の IAM ポリシーを以下のように編集します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/Env": [ "Prd" ] } } } ] }
Condition
で Tag:Env
の値が、Prd
の場合のみ、セッションマネージャの制限が効くようになります。では、Dev
が付与された、別の EC2 インスタンスに接続してみます。
こちらは問題なくログインできるようになりましたね!
さいごに
いかがだったでしょうか?既に IAM で細かく制限されている方は心配ないかと思いますが、これまで SSH キーペアファイルと、ソース IP で EC2 へのリモートログインを制限されていた方にとっては、SSM セッションマネージャのリリースは、ちょっと厄介だったかもしれません。「SSM は使いたい」「でも環境によっては、セッションマネージャは制限させたい」 という場合、今回の記事を参考にいただければと思います。
ただし、あくまで簡易的な制限に過ぎない点はご注意ください。(EC2 タグを編集されたら、もちろん接続可能になります) ですので、あわせて、以下の記事を参考にセッションマネージャのログイン検知も実装いただくのがオススメかと思います。
それでは、良い SSM ライフを! 以上!大阪オフィスの丸毛(@marumo1981)でした!