LoginSignup
18
15

More than 3 years have passed since last update.

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

Posted at

目的

  • 今までインスタンスに接続するのにレガシーにTeratermでssh接続していたが、心を入れ替えて、セキュアにSesson Managerを使うように変えていこうかなと思い、使い方を確認する。

AWS Systems Manager Session Manager とは(自分の理解)

  • AWS Systems Managerの中の一機能で、sshをせずに、AWSの機能としてLinuxにシェルアクセス(WindowsにはPowerShell)できる。

やったこと

  • 以下の環境のEC2インスタンス(Amazon linux 2)へSession Managerを用いて接続できることを確認する。
    • インターネット接続あり(IGW/EIP, NatGateway)
    • インターネット接続なし(VPCエンドポイント)
  • 接続のログが取れることを確認する。

構成図

ssm構成図.png

予習

手順

環境準備

  • VPC/Subnet の作成
    • 構成図のVPC(2個)/Subnet(3個)を作成する。
    • IGWを作成しVPC1にアタッチする。
  • インスタンスの作成
    • 構成図の通り4つのインスタンス(mksamba-ssm01~04)を作成する。今回は全てAmazon Linux 2を使用(SSM Agentがプリインストールされているため)。

Session Manager 利用の準備

  • 条件1(SSM Agent起動)
    • Amazon Linux 2の場合、プリインストールされているので追加は不要。一応動作確認を行う。(状態がActiveになっていることを確認する。)
[ec2-user@ip-10-0-0-220 ~]$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-07-18 15:21:24 UTC; 18min ago
 Main PID: 3251 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           mq3251 /usr/bin/amazon-ssm-agent
  • 条件2(適切なIAM Roleの付与)
    • Session Managerを使用するために必要とされる権限「AmazonSSMManagedInstanceCore」を含むIAM Role「mksamba_AmazonSSMManagedInstanceCore」を作成し、4つのインスタンスに割り当てる。

ssm01a.png

  • 条件3(VPC外のSSM用のAPIとの疎通)
    • IGWによる外部接続
      • インスタンス(mksamba-ssm01)にEIPを割り当てる。(比較のため、同じsubnetのインスタンス(mksamba-ssm02)にはEIPを割り当てない)
    • NatGatewayによる外部接続
      • NatGatewayを作成し、インスタンス(mksamba-ssm03)が所属するsubnetのRoutetableにNatGatewayへの経路を設定する。
    • VPCエンドポイントによる接続
      • 以下の3つのエンドポイントを作成し、エンドポイントの作成先としてインスタンス(mksamba-ssm04)が所属するsubnetを指定する。
        • com.amazonaws.ap-northeast-1.ssm
        • com.amazonaws.ap-northeast-1.ec2messages
        • com.amazonaws.ap-northeast-1.ssmmessages

ssm04a.png

接続確認

  • 「AWS Systems Manager」 - 「インスタンスとノード」 - 「マネージドインスタンス」 のメニューを開き、対象のインスタンスが「マネージドインスタンス」として表示されていることを確認する。
  • インスタンスssm01(IGW/EIPあり)、ssm03(NatGateway)、ssm04(VPCエンドポイント)は経路があるので管理対象として表示されている。ssm02(IGW/EIPなし)は経路がないので表示されない。

ssm05a.png

  • 上記の画面からインスタンスを選択し、「アクション」- 「Start Session」を選択し、ブラウザから接続する。sshして接続するのと同様にコマンド実行することができる。ローカルPCとのテキストのコピーペーストも可能。

ssm06a.png

ログの確認

  • 接続の概要(接続したIAMユーザ, 接続先インスタンス、時刻)についてはマネージメントコンソールで確認可能。

ssm09a.png

  • 接続してどんなコマンドを打ったのかの詳細をS3バケットやCloudWatch Logsに出力可能。そのためには以下の追加設定(3点)が必要。

    • Roleへの権限追加
      • インスタンスに付与しているRole「mksamba_AmazonSSMManagedInstanceCore」にS3バケット及びCloudWatchLogsへのアクセス権を追加する。(今回は検証なので「S3FullAccess」「CloudWatchLogsFullAccess」を追加。本来は必要最小限に)
    • S3エンドポイントの追加
      • インターネット接続がない場合(今回はインスタンスssm04)はS3エンドポイントの追加が必要。
      • VPCエンドポイント「com.amazonaws.ap-northeast-1.s3」を追加する。
    • セッションマネージャーでのログ出力の設定
      • 「AWS Systems Manager」 - 「インスタンスとノード」 - 「セッションマネージャー」-「設定」にて、セッションのログをS3バケット及びCloudWatch Logsに出力する設定を追加する。(S3はバケット、CloudWatch Logsはロググループを指定)

ssm10a.png

  • S3バケットの中にセッション毎にログファイルが作成される。各ファイルの中に実施したコマンドが保存される。

ssm11.png

S3のログファイル(IAMユーザ-セッションID.log)
Script started on 2020-09-02 07:06:54+0000
sh-4.2$ 
sh-4.2$ date
Wed Sep  2 07:06:51 UTC 2020
sh-4.2$ pwd
/usr/bin
sh-4.2$ exit
exit
Script done on 2020-09-02 07:06:54+0000
  • CloudWatch Logsでも同様にセッション毎にログが保存される。

ssm12.png

所感

  • 慣れればそんなに面倒ではないのかも、、
18
15
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
18
15