1. ローカル準備

0-1. AWS CLI / Session Manager Plugin macOS

brew install awscli
brew install --cask session-manager-plugin  # or: brew install session-manager-plugin
aws --version
session-manager-plugin --version

  1. AWS CLI 認証設定(2パターン)

アクセスキー方式(すでに実施済の形)

aws configure

AWS Access Key ID: AKIA....
AWS Secret Access Key: ********
Default region name: ap-northeast-1
Default output format: json

検証

aws sts get-caller-identity --output json

ベストプラクティス • ~/.aws/credentials と ~/.aws/config の権限は 600 推奨 • 鍵は定期ローテーション、MFA必須ルールがあるなら従う • 公開場所に絶対貼らない(貼ってしまったら即削除&再発行)

  1. EC2 側の前提 • IAMロール:インスタンスに AmazonSSMManagedInstanceCore 付与 • SSM Agent:Amazon Linux 2023 は標準搭載。稼働確認
sudo systemctl status amazon-ssm-agent
sudo systemctl enable --now amazon-ssm-agent

•ネットワーク:NATありならそのままOK

完全プライベートにするなら VPCエンドポイント (ssm, ssmmessages, ec2messages / 監査なら logs)を後で追加

SSM 接続テスト

aws ssm describe-instance-information --region ap-northeast-1 \
--query "InstanceInformationList[].{Id:InstanceId,Ping:PingStatus}"
aws ssm start-session --region ap-northeast-1 --target i-xxxxxxxxxxxxxxxxx

  1. SSH over SSM(踏み台→SSM置き換え)

~/.ssh/config(動作済みの最終形)

SSMで直接プライベートEC2に接続する設定

Host private1-ssm
  HostName i-06038da6332891790
  User ec2-user
  IdentityFile ~/.ssh/closet-search.pem
  IdentitiesOnly yes
  ProxyCommand /bin/sh -lc 'aws ssm start-session --region ap-northeast-1 --target %h --document-name AWS-StartSSHSession --parameters "portNumber=%p"'

Host private2-ssm
  HostName i-0442d66d290cc9f1c
  User ec2-user
  IdentityFile ~/.ssh/closet-search.pem
  IdentitiesOnly yes
  ProxyCommand /bin/sh -lc 'aws ssm start-session --region ap-northeast-1 --target %h --document-name AWS-StartSSHSession --parameters "portNumber=%p"'

接続