【AWS_21】EC2インスタンスへSSH以外の方法で接続する(AWS Systems Manager)

パブリックサブネットのEC2インスタンスに接続して作業するため「AWS SSM Default Host Management Configuration」というサービスの設定を行います。
TeratermなどでSSH接続もよいですが、この設定を有効にするとEC2インスタンスのセキュリティグループ(インバウンドルール)にルールを追加せずともコンソール画面から接続・操作を行うことが可能になるそうです。はじめて知りました。
EC2インスタンス作成後に「AWS SSM Default Host Management Configuration」を有効化した場合は、反映のためEC2インスタンスの再起動が必要となりますのでご注意ください。
2025年8月 追記
今回の設定は、EC2インスタンスのセッションマネージャーを利用する設定となります。記事作成からしばらく経過して、あらためて記事通り作業したところ、疑問に思うところが何点かありましたので追記しておきたいと思います。具体的には必要なポリシーについて追記しました。
目次
事前準備
後から検証して気付いたことですが、パブリックサブネットのEC2インスタンスへセッションマネージャーで接続するためには、以下設定も完了してないとだめでしたのでメモとして残しておきます。ルートテーブルのインターネットゲートウェイへの通信の定義を削除するとセッションマネージャーで接続できなかった(正確には、接続ボタンは押せたがプロンプトが返されず真っ暗のままだった)ので、参考にされる方は注意してください。
・インターネットゲートウェイが作成されていること
・ルートテーブルでインターネットゲートウェイへの通信が定義されていること
・セキュリティグループでSSHのポートが解放されていること
AWS SSM Default Host Management Configuration を設定
管理者権限のあるユーザーでAWSコンソールへサインインします。
AWSのコンソールで「systems manager」を検索し、「Systems Manager」をクリックします。

「AWS Systems Manager」のサイドメニューから「フリートマネージャー」をクリックします。

画面右上の「アカウント管理」から「デフォルトのホスト管理設定を設定する」を選択します。

遷移後の画面で「デフォルトのホスト管理設定を有効にする」を選択し、IAMロールに「AWSSystemsManagerDefaultEC2InstanceManagementRole」を選択し、右下の「設定」をクリックします。

今回は、先にEC2インスタンスを作成していますので反映のためEC2インスタンスを再起動します。

「AWS Systems Manager」>「フリートマネージャー」をクリックします。
対象のサーバが表示されることを確認します。

これで設定は完了しました。
【パターン1】ユーザーへ管理者権限(AdministratorAccess)を割り当てる場合
セッションマネージャーを利用したいユーザーやグループへAWS 管理ポリシーのAdministratorAccessを割り当てます。
必要な権限がないとセッションマネージャーを利用する際、以下のようなエラーが表示されます。

AWSマネジメントコンソールで「iam」を検索します。
左ペインのユーザーをクリックすると画面中央にユーザーが表示されます。
今回は「user01」がセッションマネージャーで接続できるよう設定したいのでクリックします。

「許可」タブを選択、「許可を追加」プルダウンを展開し、「許可を追加」をクリックします。

許可のオプションで「ポリシーを直接アタッチする」を選択します。
許可ポリシーで「AdministratorAccess」を検索し、チェックを入れて「次へ」をクリックします。

確認画面で内容を確認し、「許可を追加」をクリックします。

user01の「許可」タブへ「AdministratorAccess」ポリシーが追加されました。
これで「user01」でセッションマネージャーを使えるようになりました。

【パターン2】ユーザーへカスタマーポリシーを作成して割り当てる場合
管理者権限であるAWS 管理ポリシーのAdministratorAccessまで割り当てたくない場合、IAMポリシーを作成してユーザーへ直接ポリシーを割り当ててもセッションマネージャーを利用することは可能です。
ポリシーの作成
AWSマネジメントコンソールで「iam」を検索します。
左ペインのポリシーをクリックし、画面中央の「ポリシーの作成」をクリックします。

アクセス許可を指定画面で「JSON」タブを選択、ポリシーエディタへ以下コードを上書きして右下の「次へ」をクリックします。

【コード】
※インスタンスARN、インスタンスIDは自身の環境に合わせて適宜書き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:ap-northeast-1:750067409009:instance/i-03d3c9d982945fccb",
"arn:aws:ssm:ap-northeast-1:750067409009:document/SSM-SessionManagerRunShell"
]
},
{
"Effect": "Allow",
"Action": ["ssmmessages:OpenDataChannel"],
"Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
},
{
"Effect": "Allow",
"Action": [
"ssm:DescribeSessions",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceProperties",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:userid}-*"
]
},
{
"Effect": "Allow",
"Action": ["ssm:DescribeInstanceInformation"],
"Resource": ["*"]
}
]
}
確認して作成画面で任意のポリシー名を入力し、右下の「ポリシーの作成」をクリックします。

ポリシーが作成されました。

ポリシーの割り当て(アタッチ)
AWSマネジメントコンソールで「iam」を検索します。
左ペインのユーザーをクリックすると画面中央にユーザーが表示されます。
今回は「user01」がセッションマネージャーで接続できるよう設定したいのでクリックします。

「許可」タブを選択、「許可を追加」プルダウンを展開し、「許可を追加」をクリックします。

許可のオプションで「ポリシーを直接アタッチする」を選択します。
許可ポリシーで先ほど作成したポリシー「20250825-poilcy-01」を検索し、チェックを入れて「次へ」をクリックします。

確認画面で内容を確認し、「許可を追加」をクリックします。

user01の「許可」タブへ「20250825-poilcy-01」ポリシーが追加されました。
これで「user01」でセッションマネージャーを使えるようになりました。

EC2インスタンスへ接続
EC2 > インスタンス と進み、該当のサーバにチェックを入れて画面上部の「接続」をクリックします。

画面が遷移したところで「セッションマネージャー」タブを選択し、右下の「接続」をクリックします。

接続することができました!
セッション時間は最大60分で変更する方法はないそうです。
接続が切断されないようにするには、切断される前に 「セッションを更新」を選択して、継続時間タイマーをリセットできるそうです。
コピー、貼り付けもできるので操作性もよいのではと感じました。

※もし以下の画面になって「接続」が押せない時は、EC2インスタンスをもう一度再起動してみてください。私の場合、EC2再起動で接続可能となりました。
まとめ
設定して利用してみて、とても便利な機能だなと感じました。この設定があれば、どの端末PCから接続してもAWSコンソールへログインできれば利用できるので便利と思います。
以下、他の記事をまとめた一覧です。AWSもまとめています。