22
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者】AWS Systems Manager Session Managerを使ってみた

Posted at

はじめに

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セッションマネージャーに接続

手順一覧

  1. EC2インスタンスからSSMセッションマネージャーに接続するためのIAMロールの作成
  2. EC2インスタンスの作成
  3. SSMセッションマネージャーとEC2が接続できていることを確認
    (1)EC2側から確認
    (2)SSMセッションマネージャー側から確認
  4. EC2インスタンスにコンソールから接続

1. EC2インスタンスからSSMセッションマネージャーに接続するためのIAMロールの作成

  • IAM>ロールから「ロールを作成」を選択
    IAMロール①.png

  • 下記の設定を選択
    IAMロール②.png

  • 許可ポリシーで「AmazonSSMManagedInstanceCore」を検索して選択
    IAMロール③.png

  • ロール名を設定
    今回は「AmazonSSMManagedInstanceCore」にしました。
    ロール名を設定したら「作成する」を選択して作成完了です。
    IAMロール④.png

  • IAMロールが完成しました!
    IAMロール⑤.png

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

  • EC2インスタンスの設定値
    EC2①.png
    EC2②.png

  • セキュリティグループ
    EC2③.png

3. SSMセッションマネージャーとEC2が接続できていることを確認

(1)EC2側から確認

  • 対象のEC2インスタンスを選択して、「接続」を選択
    EC2接続①.png

  • 「セッションマネージャー」のタブを選択して、「接続」
    EC2接続②.png

(2)SSMセッションマネージャー側から確認

  • 「AWS Systems Manager」 を検索
    SSM接続①.png

  • 「セッションマネージャー」を選択
    SSM接続②.png

  • 「ターゲットインスタンス」に作成した「インスタンス名」が表示され、接続できることを確認
    SSM接続④.png

無事EC2インスタンスとSSMセッションマネージャーが接続できたことを確認できました!

4. EC2インスタンスにコンソールから接続

実際に接続してみます。
接続結果.png

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ポリシー作成することも可能です。
以下公式サイトなどぜひ参考にしてみてください。

ぜひAWSのベストプラクティスに従って、最小の権限で運用していきましょう!

SSMセッションマネージャーを使ってみた感想

メリットであるセキュリティグループを全閉じでもEC2インスタンスに接続できるという点が、実際に行ってとても感動しました。手軽かつセキュリティ面でも管理が減ることはとても良いと思います。
デメリットは個人的には操作感が悪かったことです。
設定でどうにかできるのかもしれませんが、コピー&ペーストでショートカットキーを使えなかったり、キーボード操作の反映が遅いという点で、ほかのツールでSSH接続するほうが動かしやすいと思いました。

おわりに

今回はEC2インスタンスにコンソールから接続するだけの簡単な紹介でしたが、実際接続してみるとメリットを自身で感じることができ、楽しいと思います。
ぜひみなさんもSSMセッションマネージャーをつかってみてください!

22
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?