概要
-
SSMでFargateコンテナに接続できるように設定してみたが、SSMでコンテナに接続すると bash ではないため操作しづらい点や、SQLDeveloper等のSQLクライアント(GUI)を利用してDBに接続できない等の問題あったため、SSMのSSH接続ポートフォワーディングによりRDSに接続することでコンテナへのログインとSQLクライアントソフトでの操作を可能にする
-
Bastionサーバ等用意する必要なしに、Faragteコンテナのみで、コンテナおよびRDSへの接続が可能に
-
SSMを利用することで、セキュリティグループの解放、タスク定義のポートマッピングを行うことなく安全にRDSに接続することが可能
FargateでコンテナへのSSMでの接続
下記記事を参考にSSMによりFargateコンテナにshellアクセスが可能
- https://enokawa.hatenablog.jp/entry/2019/09/05/104545
- https://dev.classmethod.jp/cloud/aws/session-manager-launches-tunneling-support-for-ssh-and-scp
下記コマンドのようにSSMを利用してFargateコンテナに接続できることで、Mysqlクライアント等をインストールしておけばBastionサーバ不要で安全にDBに接続できるコンテナを用意することができる
aws ssm start-session --target mi-0d2948a092de9bf9b
ただし、SSMでコンテナに接続すると bash ではないため操作しづらい点や、SQLDeveloper等のSQLクライアント(GUI)を利用してDBに接続できない等の問題あったため、SSMのSSHポートフォワーディングによりRDSに接続する
Dockerfile作成
下記記事のDockerfileにopenssh-serverを追加し、sshを起動する
SSH接続用に鍵を生成し公開鍵をrootユーザのauthrized_keysに登録
ssh-keygen -t rsa
「Expose 22」 は記述するものの、セキュリティグループの解放や、タスク定義でのポートマッピングは行う必要はなくSSMを経由してのSSH接続が可能
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get -y install sudo \
curl \
openssh-server \
&& curl https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/amazon-ssm-agent.deb \
&& dpkg -i /tmp/amazon-ssm-agent.deb \
&& cp /etc/amazon/ssm/seelog.xml.template /etc/amazon/ssm/seelog.xml
COPY docker/ssm/keys/id_rsa_ssm.pub /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys
COPY docker/ssm/run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["bash", "run.sh"]
# !/bin/bash
sudo service ssh start # サービスを起動
amazon-ssm-agent -register -code "${SSM_AGENT_CODE}" -id "${SSM_AGENT_ID}" -region "us-east-1"
amazon-ssm-agent
SSMによるssh接続
SSMによるssh接続用に以下をssh configに設定する
Dockerイメージ作成時に登録した公開鍵のペアとなる秘密鍵で使用して接続するよう設定
Host mi-0d2948a092de9bf9b
User root
Port 22
ServerAliveInterval 300
IdentityFile ~/.ssh/id_rsa
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
sshコマンドでコンテナに接続可能にbashの了解が可能になる。ローカル環境でもFargateで起動しても動作確認が可能
ssh mi-0d2948a092de9bf9b
ポートフォワーディングしてRDSに接続
ssh config を設定
SSH接続先のhostにインスタンスIDを指定した際にProxy Commandを実行するように設定
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
RDSへのトンネル作成
ssh configでの設定により、SSMを使用してSSHトンネルを作成する
ssh -i ~/.ssh/id_rsa root@mi-02af5c92d50025844 -L 9999:[RDSのエンドポイント]:3306
RDSへ接続
作成したトンネル経由で、RDSに接続が可能。SQLクライアントソフトでも同様に接続することが可能
$ mysql -u [db接続ユーザ] -h 127.0.0.1 -p -P 9999
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 294
Server version: 5.7.26-log Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>