はじめに
AWS Systems Manager Session Manager(以下SSMセッションマネージャー)でEC2インスタンスにコンソールから接続してみたので、接続手順や詰まったところなどを、簡単に紹介します。
動機
SSMセッションマネージャーを利用した動機が2点あります。
1つ目はEC2インスタンスにSSH接続するアプリをインストールする手間を省きたかったためです。
2つ目は資格勉強で気になったためです。
AWS Certified SysOps - Associateの勉強中にSSMセッションマネージャーに関する問題がよく出題されており、サービスの説明にあったEC2インスタンスに接続するときに鍵の管理やセキュリティグループにSSH接続のためのポートを開く必要がないというメリットがいいなと思い、一回利用してみたいと考えました。
AWS Systems Manager Session Manager とは
AWS Systems Managerの機能の一つで、EC2インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン等を管理することできます。
最大の特徴としては、EC2インスタンスに接続する場合ではないでしょうか。
SSMセッションマネージャーは接続するときにセキュリティグループのインバウンドポートを開く必要がなく、かつ認証をIAMポリシー(に紐づくIAMユーザーやIAMロール)で行えるためSSHキー等の管理が必要ありません。
そのためセキュリティ面や運用面で有用と考えられます。
専用のアプリをインストールする必要がなく、ブラウザから手軽にEC2インスタンスに接続できるというのもいいですね。
ここからは実際にEC2インスタンスからSSMセッションマネージャーを利用してコンソールからアクセスする手順を紹介します!
作成手順
始める前に
- VPC・サブネット・セキュリティグループなどの作成手順は本筋ではないため、今回は省略させていただきます。
- 今回はパブリックサブネットへ接続を行います。そのため、プライベートサブネットに接続する場合と接続方法が異なります。
(プライベートサブネットから行う場合はVPCエンドポイント等を利用することになり、パブリックサブネットの場合よりも手順が複雑です。)
必要になる権限
IAMユーザー:EC2の操作、IAMロールの作成、SSMセッションマネージャーの操作 などなど(詳細は省略)
IAMロール:EC2インスタンスからSSMセッションマネージャーに接続
手順一覧
- EC2インスタンスからSSMセッションマネージャーに接続するためのIAMロールの作成
- EC2インスタンスの作成
- SSMセッションマネージャーとEC2が接続できていることを確認
(1)EC2側から確認
(2)SSMセッションマネージャー側から確認 - EC2インスタンスにコンソールから接続
1. EC2インスタンスからSSMセッションマネージャーに接続するためのIAMロールの作成
2.EC2インタンスの作成
以下作成したときの設定値です。
- インスタンス名:test-ssm-instance
- OS:Amazon Linux2
- サブネット:パブリックサブネット
- IAMロール:AmazonSSMManagedInstanceCore
- セキュリティグループ:インバウンド・アウトバウンドともにポートをすべて閉じたものを使用
補足
本来EC2インスタンスからAWS Systems Manager(セッションマネージャー含む)に接続するためにはIAMロールのほかに、インスタンスにAWS Systems Manager Agent(通称SSMエージェント)をインストールする必要があります。
しかしAmazon Linux2など一部のAMIにはあらかじめインストールしてあるため、今回はSSMエージェントのインストールは不要です。
参考:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ami-preinstalled-agent.html
3. SSMセッションマネージャーとEC2が接続できていることを確認
(1)EC2側から確認
(2)SSMセッションマネージャー側から確認
無事EC2インスタンスとSSMセッションマネージャーが接続できたことを確認できました!
4. EC2インスタンスにコンソールから接続
sh-4.2$ whoami
ssm-user
sh-4.2$ pwd
/usr/bin
sh-4.2$ cd
sh-4.2$ pwd
/home/ssm-user
sh-4.2$ dir
sh-4.2$
下記のことが確認できました!
ユーザー名:ssm-user
最初に接続する階層:/usr/bin
ホームディレクトリ:/home/ssm-user
詰まったところ
実際に初めて作成したとき、詰まった部分を紹介します。
・新規にIAMロールを作成する必要がある!
初めて接続したときは、AWS側でIAMロールがすでに用意されているものと思っていました。
そのため既存のIAMロールをアタッチしようとして見つからず、探し回ったのはいい思い出です。
・EC2インスタンス作成後にIAMロールをアタッチした場合は、EC2インスタンスの再起動が必要になる!
一番最初に接続を行ったときは、EC2インスタンス作成後、かつ起動中にIAMロールのアタッチを行いました。
それからいくら待っても接続される様子がなく、おかしいなと思って試しにEC2インスタンスを再起動してみたら、接続されました。
そう、IAMロールをEC2インスタンスに後付けする場合はEC2インスタンスの停止中にアタッチして起動するか、EC2インスタンスの再起動を行わなくては、IAMロールが適用されなかったのです・・・。
AWSの資格勉強中にも出てきた知識だったので、見事に引っかかったのは悔しかったです。
IAMロールにつけるIAMポリシー
今回はEC2インスタンスからSSMセッションマネージャーに接続するために、IAMポリシーは「AmazonSSMManagedInstanceCore」を利用しました。
一番オーソドックスなデフォルトポリシーですね。
内容は以下になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeAssociation",
"ssm:GetDeployablePatchSnapshotForInstance",
"ssm:GetDocument",
"ssm:DescribeDocument",
"ssm:GetManifest",
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:ListAssociations",
"ssm:ListInstanceAssociations",
"ssm:PutInventory",
"ssm:PutComplianceItems",
"ssm:PutConfigurePackageResult",
"ssm:UpdateAssociationStatus",
"ssm:UpdateInstanceAssociationStatus",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2messages:AcknowledgeMessage",
"ec2messages:DeleteMessage",
"ec2messages:FailMessage",
"ec2messages:GetEndpoint",
"ec2messages:GetMessages",
"ec2messages:SendReply"
],
"Resource": "*"
}
]
}
しかし利用用途によってはこのデフォルトポリシーは権限が強すぎることや、ほかのIAMポリシーと組み合わせたいこともあると思います。
その場合は自身でカスタムしてIAMポリシー作成することも可能です。
以下公式サイトなどぜひ参考にしてみてください。
- 既存のIAMロールに許可を追加
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-add-permissions-to-existing-profile.html - カスタムIAMロールの作成
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-create-iam-instance-profile.html
ぜひAWSのベストプラクティスに従って、最小の権限で運用していきましょう!
SSMセッションマネージャーを使ってみた感想
メリットであるセキュリティグループを全閉じでもEC2インスタンスに接続できるという点が、実際に行ってとても感動しました。手軽かつセキュリティ面でも管理が減ることはとても良いと思います。
デメリットは個人的には操作感が悪かったことです。
設定でどうにかできるのかもしれませんが、コピー&ペーストでショートカットキーを使えなかったり、キーボード操作の反映が遅いという点で、ほかのツールでSSH接続するほうが動かしやすいと思いました。
おわりに
今回はEC2インスタンスにコンソールから接続するだけの簡単な紹介でしたが、実際接続してみるとメリットを自身で感じることができ、楽しいと思います。
ぜひみなさんもSSMセッションマネージャーをつかってみてください!