Session Manager で EC2 に接続する(SSH 不要)
Systems Manager の Session Manager を使い、SSH キーも踏み台サーバーもポート 22 の開放も不要な状態で EC2 インスタンスにシェルアクセスする方法を解説します。
AWS Systems Manager Session Manager を使うと、SSH を使わずに EC2 インスタンスへシェルアクセスできます。
- SSH キー不要: SSH キーの管理やセキュリティ確保が不要になります。
- 踏み台ホスト不要: EC2 インスタンスへアクセスするための中継サーバーが不要になります。
- ポート 22 のインバウンドルール不要: セキュリティグループでポートを開放する必要がなくなり、セキュリティが向上します。
構築
Session Manager を利用するには、AmazonSSMManagedInstanceCore ポリシーを含む IAM ロールを EC2 インスタンスにアタッチします(30 行目)。
AWSTemplateFormatVersion: 2010-09-09Resources: 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: 443EC2 インスタンスがプライベートサブネットにある場合は、以下の VPC エンドポイントを設定してください。
com.amazonaws.region.ssmcom.amazonaws.region.ec2messagescom.amazonaws.region.ssmmessages
詳細は AWS re:Post の Knowledge Center 記事を参照してください。
スタックをデプロイします。
aws cloudformation deploy \ --template-file template.yaml \ --stack-name ec2-session-manager \ --capabilities CAPABILITY_NAMED_IAMテスト
以下のコマンドでインスタンスとのセッションを開始します。
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx以下のような出力が表示されればログイン成功です。
Starting session with SessionId: your-session-idsh-4.2$後片付け
作成したリソースを削除するには、スタックを削除します。
aws cloudformation delete-stack --stack-name ec2-session-managerまとめ
EC2 インスタンスの IAM ロールに AmazonSSMManagedInstanceCore マネージドポリシーをアタッチすると、SSH キーペアや踏み台ホストを使わずに、aws ssm start-session でシェルセッションを開始できます。ポート 22 のインバウンドルールも不要なため、従来の SSH 接続よりも、管理する認証情報とネットワーク経路を減らせます。
インスタンスから ssm、ec2messages、ssmmessages の各エンドポイントへ到達できることも必要です。インターネットへ接続できないインスタンスでは、セッションを開始する前に対応する VPC エンドポイントを用意します。
Related posts
PhpStorm と Xdebug で AWS EC2 上の PHP をリモートデバッグする
PhpStorm と Xdebug を使って EC2 上の PHP アプリケーションをリモートデバッグする方法を、サーバー側の php.ini の設定から IDE のパスマッピングまで解説します。
SSH ポートフォワーディングで EC2 Windows インスタンスに安全にアクセスする
プライベートサブネット内の EC2 Windows インスタンスに SSH 踏み台ホスト経由でアクセスし、RDP をパブリックインターネットに公開しない方法を解説します。
EC2 上で Proxy.py を軽量 HTTP プロキシとして動かす
認証機構を持たない Proxy.py を EC2 インスタンス上で動かし、SSH トンネル経由で安全にアクセスします。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
