SessionManager(SSM)
を使うと、AWSコンソール上から
鍵ストレス無くPrivate subnetにあるEC2インスタンスにアクセスできます
加えてローカル環境からのSSH接続も可能になります
今回はローカル環境からSSHしてRDSにアクセスする方法を記事にします
前提
- AWS上でVPC、EC2、RDS, SSMなどの構築は済んでいる想定
- 環境 MacOS
- AWS CLIがインストール済み
- SSMの鍵(pemファイル)を持っている
- EC2インスタンス linux
- RDBエンジン Postgresql
❶SessionManagerプラグインのインストール
sessionmanager-bundle
が必要になるので下記コマンドでインストールします
公式docはこちら
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
❷aws configureを実行する
基本的なことですがハマったポイントです。忘れちゃいけない
aws configure
色々聞かれるので答えます
AWS Access Key ID : Hoge・・・・・・・・・・・・・・・・・・・・・・・
AWS Secret Access Key : Huga・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Default region name : YOUR-REGION
DEfault output format : JSON
AWS Access key ID
AWS Secret Access Key
は、
AWSコンソールのスタートページから確認できます
ちなみに、上記スタートページの
Run the following commands in your terminal.
の部分をクリックすると環境変数がコピーされるので
ターミナル上にペーストして実行すれば、aws configure
しなくてすみます
※こっちの方が早い
export AWS_ACCESS_KEY_ID="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
export AWS_SECRET_ACCESS_KEY="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
export AWS_SESSION_TOKEN="・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
❸ sshのconfigファイルを工夫する
このステップは工夫なので必須ではないです
ssm-agent経由でログインする場合、指定するのがipではなくインスタンスIDなのですが、
インスタンスIDを実行したときはこのコマンドをプロキシして実行する設定らしいです。
※考えた人すごい
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
❹sshで接続する
いよいよ接続します!コマンドはこんな感じです
ssh -i YOUR_PEM_FILE_PATH ec2-user@YOUR_INSTANCE_ID
ステップ3でconfigをいじったので
こんな感じで接続できます
ssh -i ~/key/my-key.pem ec2-user@i-○○○○○○○○○○○○○○○
【めんどくさがりの人へ】 もっと楽に接続する
正直これだと結構めんどいので、できるだけ楽にします
❶zshrcファイルにエイリアスを登録する
.zshrc
を開きます
vi ~/.zshrc
下記のようなエイリアスを追記します
今回はDev環境のインスタンスへのSSM接続と言う体で、ssmdev
という名前にします
記述したらescキー
→:we
で保存してviを抜けます
alias ssmdev="ssh -i YOUR_PEM_KEYS_PATH ec2-user@YOUR_INSTANCE_ID"
.zshrcを読み込む
source ~./zshrc
これで、エイリアスを使ってSSH接続できるようになります!
上記のConfigureのところで説明した環境変数群をターミナルで叩いてから
エイリアスを実行しないと上手くいきません
ssmdev
❷EC2インスタンス内にもエイリアスを仕込む(Linuxの場合)
EC2インスタンスにSSH接続した状態で、
直下のファイル構成を見るとこのようになっているはずです
.bashrc
をいじって、またもやエイリアスを登録します
vi .bashrc
Postgresqlの場合はこのようになります。適宜DBの情報を入力してください
今回はRDSへの接続なのでsession
という名前にします
記述したらescキー
→:we
で保存してviを抜けます
alias session="psql --host=YOUR_HOST --port=5432 --dbname=YOUR_DB_NAME --username=YOUR_USER_NAME --password"
.bashrc
を読み込む
source ~./bashrc
準備はできたので、繋ぎます!
登録したエイリアスを実行
session
各環境ごとにEC2インスタンスがある方はssmstage
とかssmprod
とか
同じように作ればいいと思います
おわりに
本当はTablePlusでSSH接続したいんですけどパブリックIPがないと無理なので
とりあえずこれで我慢。