「インターネットがあれば外出先からでもコンソール画面が開ける」というのがパブリッククラウドの利点の一つです。
外出先だろうが、自宅だろうがインターネットにつながるPCがあれば問題なし。
これがオンプレミス環境との大きな違いの一つですよね。
ですが、サーバーにSSH接続することにはハードルがあがりませんか?
まず、接続先がLinuxサーバーであればMacなら”ターミナル”がありますが、
WindowsからならTeratermやPuTTYといったクライアントソフトをインストールする必要があります。
SSH接続するために、サーバーの秘密鍵を持っておく必要があるかもしれません。
このような理由から、外出先からAWSマネジメントコンソールにはログインできても、
LinuxサーバーへのSSH接続はできないというケースが多いのではないでしょうか。
AWSマネジメントコンソールから直接サーバーにコマンドを打つことができれば、
この問題は解決しそうです。
そこで登場するのが、AWS Systems Manager(SSM) のセッションマネージャーです!
今回は、SSMのセッションマネージャーについて詳しくご紹介いたします。
セッションマネージャーとは?
上記でも少し触れましたが、セッションマネージャーとはAWS Systems Managerの機能の一つです。
SSH接続、またはRDS(リモートデスクトップ)接続せずとも、ブラウザまたはAWS CLIを介してEC2インスタンスのコマンドラインによる操作ができる機能です。
対象OSは、EC2であればLinux、Windows両方に対応しております。
※詳しい対応OSにつきましては、AWSドキュメントのSystems Manager の前提条件をご確認ください。
ただし基本的にコマンドラインによる操作ですのでWidowsのEC2の場合は、GUI操作ではなくPowerShellによるコマンド操作となります。
EC2に外部接続許可は不要!
「どうせ外部(インターネット)接続できるEC2でなきゃ使えないんじゃないの?」
と思われるかもしれませんが、そんなことはありません。
セッションマネージャーは、必ずしも外部から接続ができる環境である必要はありません。
内部接続しかできないプライベートサブネットに配置されているEC2であっても、
セッションマネージャーを使うことによってによってAWSマネジメントコンソールから指定のコマンドを送ることが可能です。
その場合、キモとなるのがVPCエンドポイントの使用です。
VPCエンドポイントとは、外部(インターネット)を経由せずにVPC外のAWSサービスと接続するための、いわばAWS内部ルートです。
このVPCエンドポイントを利用することで、プライベートサブネットからインターネットを経由することなく、VPC外のサービスであるSSMへアクセスすることが可能となります。
VPCエンドポイントを使用する場合、以下の4つのVPCエンドポイントを作成する必要があります。
(もちろん、外部接続が可能なEC2の場合はVPCエンドポイントの作成は必要ありません!)
- com.amazonaws.”リージョン”.ec2messages
- com.amazonaws.”リージョン”.ssm
- com.amazonaws.”リージョン”.ssmmessages
- com.amazonaws.”リージョン”.s3
※”リージョン”部分には、対象となるEC2が配置されているリージョン名が入ります。
VPCエンドポイントには、Interface型とGateway型の2種類があります。
上記1〜3はInterface型、4はGateway型となります。
それぞれの違いは別の機会にご紹介させていただきますが、エンドポイントの作成方法が若干異なるということを押さえておきましょう!
VPCエンドポイントの作成方法 (外部接続できないEC2のケース)
では、どのようにVPCエンドポイントを作成すればよいのでしょうか?
まずはセッションマネージャーを使用する場合のVPCエンドポイントの作成方法について、
ご紹介をさせていただきます。
上記でも述べたように、VPCエンドポイントには2種類あります。
種類ごとに作成方法が若干異なりますので、それぞれご紹介させていただきます。
尚、同じ種類のエンドポイントであっても一括で作成することはできません。
必要なエンドポイントを一つ一つ作成することとなりますのでご注意くださいませ。
<インターフェースVPCエンドポイントの場合>
(1)VPCコンソール画面を開きます
(2)左ナビゲーションペインより、[エンドポイント]をクリックし、[エンドポイントの作成]をクリックします
(3)サービスカテゴリ欄は、”AWSサービス”を選択します
(4)サービス名を選択します
(5)VPCは対象のEC2が配置されているVPCを選択します
(6)サブネット欄は、VPCエンドポイントを配置する任意のサブネットを設定します
※対象のEC2が配置されているサブネットでなくても問題ありません。EC2から接続できるサブネットを設定しましょう。
(7)セキュリティグループ欄は、VPCエンドポイントに割り当てるセキュリティグループを指定します。
※対象のEC2からHTTPS(443)を受け取れるセキュリティグループとするのが基本です。
例えばEC2のプライベートIPが”172.31.139.2″であれば、VPCエンドポイントに割り当てるセキュリティグループには、インバウンドに以下の設定が入っていることが必要です。
タイプ:HTTPS
プロトコル:TCP
ポート:443
ソース:172.31.139.2/32
(8)すべての設定が完了しましたら[エンドポイントの作成]をクリックします
この手順をそれぞれのインターフェイスVPCエンドポイントごとに行いましょう。
<ゲートウェイVPCエンドポイントの場合>
(1)VPCコンソール画面を開きます
(2)左ナビゲーションペインより、[エンドポイント]をクリックし、[エンドポイントの作成]をクリックします
(3)サービスカテゴリ欄は、”AWSサービス”を選択します
(4)サービス名を選択します
※今回作成するのはS3のVPCエンドポイントです
(5)VPCは対象のEC2が配置されているVPCを選択します
(6)ルートテーブルの設定です。
設定されたルートテーブルにS3までのルーティングが追加されます。
ここでは、EC2が配置されているサブネットが適用されているルートテーブルを選択しましょう。
(7)ポリシーの設定です。
S3へアクセスするための制限を加える部分となります。
例えば、S3の読み取りアクセスは通すけど、書き込みアクセスは通さないといったことです。
今回はテストのためフルアクセスを選択します。
(8)すべての設定が完了しましたら[エンドポイントの作成]をクリックします
セッションマネージャーを使うための前提条件
セッションマネージャーを使うためには、上記でお話しした通信手段の他、
以下の2点の権限に関する前提条件があります。
- 対象となるEC2にAmazonEC2RoleforSSMというポリシーが付与されたIAMロールが割り当てられていること
- セッションマネージャーを使ってコマンドを実行しようとしているIAMユーザーアカウントに、セッションマネージャーの利用権限があること
※2については、細かい内容となりますので、詳細はAWSドキュメントのこちらをご確認ください。
AWSマネジメントコンソールからコマンドをたたいてみた
それでは、実際にセッションマネージャーを利用して、対象のEC2へAWSマネジメントコンソール上からコマンドをたたきたいと思います。
(1)AWS Systems Manager コンソール画面を開きます
(2)左ナビゲーションペインより[セッションマネージャー]をクリックし、[セッションの開始]をクリックします
(3)ターゲットインスタンスを選択して、[セッションの開始]をクリックします
(4)黒の画面が登場し、”sh-4.2″というコマンドプロンプトのようなものが表示されたら成功です
※SSH接続に慣れている人は「なんだこれ?」と思われるかもしれませんが、sudo su – でユーザーを切り替えれば利用が可能です。
いかがでしたでしょうか?
セッションマネージャーを利用すれば、わざわざTeraterm等を使わずともAWSマネジメントコンソールへログインするだけで対象のEC2にSSH接続した場合とほとんど同じようなCLI操作が可能となります。
効率の良い開発や運用が行えること間違いなしですね!
以上、hidesanでした!