👻

AWS Systems Manager Session Mangerについて

2022/11/01に公開約4,300字

はじめに

AWS Systems Manager Session Mangerについて公式ドキュメント見れば分かりますが、
今まで調べてきたものを忘れないようにするために自分の備忘録として記載します。

AWS Systems Manager とは

AWSの構成管理ツールのサービスでAWS Systems Managerを利用するためにSSM AgentをEC2インスタンスへインストールする必要があります。
尚、一部のOSには既にデフォルトでインストールされているのでインストールする必要はありません。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-ssm-win.html

またオンプレミス環境にもインストールできるようですが、こちらについては機会があるときに試したら再度記載したいと思います。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-managedinstances.html

AWS Systems Managerの利用方法

AWS Systems Managerが使えるようにするためには以下を実施します。

  • SSM Agentのインストール
  • SSM AgentからSSM APIへの経路
  • IAMロールの付与

SSM Agentが導入されていないものについては上記にリンクを貼っているのでそちらを参考にしてください。
SSM Agentはインターネット経由もしくはVPCエンドポイント経由でアウトバンドでの経路が必要になります。
インターネット経由でやる場合にはパブリックサブネット上に配置するかNATゲートウェイを経由します。
VPCエンドポイント経由であればオンプレミスからDirectConnectやVPN経由で閉域網経由でのアクセスが可能になります。
IAMロール作成してEC2に適用する必要がりIAMポリシーについては、AmazonSSMManagedInstanceCoreを付与する必要があります。

AmazonSSMManagedInstanceCoreが登場する前はAmazonEC2RoleforSSMがありましたが、このポリシーは廃止予定ということなので今から利用される方は利用しないことをおすすめします。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/security_iam_service-with-iam.html

AWSに慣れている方からすれば上の操作については特段困ることはないと思いますが、
慣れていない方はAWS ConsoleにログインしてAWS Systems Managerのページにアクセスすると、左上に高速セットアップというメニューがあるので、こちらを利用すると簡単に設定することができます。

AWS Systems Manager Session Mangerとは

Session Mangerを利用することでEC2へのアクセスのためにインバウンドポート解放や踏み台サーバの用意などすることなく、
ブラウザからShellを操作することができ、かつSSHでアクセスからIAM経由でのアクセスとなり操作履歴も残すことができるようになります。

AWS Systems Manager Session Manger利用のための準備

先ほど述べたように3ステップ踏む必要がありますが、
今回はデフォルトでインストールされているAmazonLinux2を利用し、パブリックネットワークにおいてます。
またEC2を作成する前に事前にIAMロールを用意しておくほうが良いと思うのでIAM画面からロール=>ロール作成へと進み、
以下の画面のように選択して次へ進みます。

次に許可ポリシーを選択する画面がでてくるので検索画面にて、
AmazonSSMManagedInstanceCoreと入力してEnterを押すと、対象のポリシーが表示されるのでチェックを入れて次へ進みます。

最後にロール名と必要に応じてタグを付与してロール作成をします。
EC2を作成する際には今回作成したIAMロールを選択忘れしないようにしましょう。

またSessionManger経由でアクセスのみとするのであればセキュリティグループの解放やキーペアの作成も不要になるので、不要な場合は作成しないようにしましょう。

AWS Systems Manager Session Manger利用

AWS Systems Managerから左メニューのセッションマネージャーをクリックすると以下の画面が表示されるので、
セッションの開始をクリックします。

接続するターゲットインスタンスの一覧が表示されるので、接続する対象を選択しセッションの開始をクリックすると、

ブラウザShellが起動します。LinuxならShell、WindowsならPowerShellになります。

また事前に実行ログなどをCloudWatchLogやS3にも保存しておくことができます。

たまにある質問の補足

ブラウザ経由でアクセスできるのは便利なんだけどファイル転送やRDP接続してGUI操作したい時はどうすればいいの?
とたまに聞かれることがありますので補足します。

ファイル転送の場合

ファイル転送の際には接続元にAWS CLIとSession MangaerのPluginをインストールします。
※ここからはMACで実施しています。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

その後SSHするための設定を.ssh/configに追記します。

# SSH over Session Manager
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

インストールが完了したらIAMユーザでアクセスキーとシークレットキーを発行して、
aws configureを実行して認証情報をクライアント側に登録しておきます。
尚、IAMに必要なポリシーは以下を参考にしました。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html

クライアント側からSSH接続すると接続できるので、同じ容量でSCPコマンドでファイル転送することも可能になります。

% ssh ec2-user@インスタンスID -i ./鍵ファイルの名前
Last login: Thu Apr 21 15:33:00 2022 from localhost

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
16 package(s) needed for security, out of 25 available
Run "sudo yum update" to apply all updates.
[ec2-user@xxx-xxx-xxx-xxx ~]$

RDP接続の場合

RDP接続するWindowsServerとは別のインスタンスがある場合のパターンを記載します。
ファイル転送の場合で記載したようにLinuxサーバを経由してRDP接続することができます。
まずはLinuxサーバに対してSSH接続を実施します。

ssh ec2-user@インスタンスID -i ./鍵ファイルの名前 -L 任意のポート番号:[Windows EC2のIPアドレス]:3389

その後リモートデスクトップにてコンピューター欄にlocalhost:任意のポート番号と記載することでRDP接続することができます。

最後に

SessionMangerは料金は無料で利用できるサービスになります。
ここまでできれば脱SSHができそうな気がしますし、踏み台サーバが不要になるので無駄なリソースコストが発生しなくていいですよね。
慣れの問題とは思いますが、こちらの利用をすることをお勧めします。

GitHubで編集を提案

Discussion

ログインするとコメントできます