EC2 インスタンスに Systems Manager - Session Manager を使用してログインする方法

EC2 インスタンスに Systems Manager - Session Manager を使用してログインする方法

岩佐 孝浩
岩佐 孝浩
3 min read
EC2 Session Manager Systems Manager

はじめに

AWS Systems Manager - Session Manager は、SSH 鍵、踏み台サーバー、およびポート開放を必要とせず、安全かつ効率的に EC2 インスタンスを管理する方法を提供します。この投稿では、Session Manager を設定して使用する手順を解説し、AWS 環境のセキュリティとコスト効率を向上させる方法をご紹介します。

詳細については、公式ドキュメント をご覧ください。

Session Manager を使用する理由

  • SSH 鍵不要: SSH 鍵の管理と保護が不要になります。
  • 踏み台サーバー不要: EC2 インスタンスにアクセスするための中間サーバーが不要になります。
  • ポート 22 のインバウンドルール不要: セキュリティグループの開放ポートを避けることでセキュリティが向上します。

AWS リソースの設定

Session Manager を利用するには、AmazonSSMManagedInstanceCore ポリシーがアタッチされた IAM ロールを EC2 インスタンスに割り当てる必要があります(行30)。以下は、この設定を行う CloudFormation テンプレートの例です。

AWSTemplateFormatVersion: 2010-09-09
Resources:
  EC2:
    Type: AWS::EC2::Instance
    Properties:
      IamInstanceProfile: !Ref InstanceProfile
      ImageId: ami-0f310fced6141e627
      InstanceType: t3.small
      SecurityGroups:
        - !Ref SecurityGroup

  InstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: /
      Roles:
      - !Ref IamRole

  IamRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      RoleName: ec2-role

  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Example
      GroupName: ec2-security-group
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          FromPort: 443
          IpProtocol: tcp
          ToPort: 443

以下のコマンドでスタックをデプロイします。

aws cloudformation deploy --template-file template.yaml --stack-name ec2-session-manager --capabilities CAPABILITY_NAMED_IAM

プライベートサブネット用の追加設定

EC2 インスタンスがプライベートサブネットにある場合、以下の VPC エンドポイントを設定してください。

  • com.amazonaws.region.ssm
  • com.amazonaws.region.ec2messages
  • com.amazonaws.region.ssmmessages

詳細は VPC エンドポイントのドキュメント をご参照ください。

EC2 インスタンスへのログイン

インスタンス ID を i-xxxxxxxxxxxxxxxxx に置き換え、以下のコマンドを実行します。

aws ssm start-session --target i-xxxxxxxxxxxxxxxxx

次のような出力が表示されれば、ログイン成功です。

Starting session with SessionId: your-session-id
sh-4.2$

リソースの削除

以下のコマンドを実行して、プロビジョニングされたリソースを削除します。

aws cloudformation delete-stack --stack-name ec2-session-manager

まとめ

AWS Systems Manager - Session Manager は、従来の SSH 鍵や踏み台サーバーを必要とせずに EC2 インスタンスの管理を容易にします。その安全性とコスト効率の良さから、モダンな AWS アーキテクチャにおける最適な選択肢となります。

Happy Coding! 🚀

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023