LoginSignup
18
17

More than 3 years have passed since last update.

FargateコンテナにSSH ~SSMで接続&RDSにSSHポートフォワーディング~

Last updated at Posted at 2019-12-25

概要

  • SSMでFargateコンテナに接続できるように設定してみたが、SSMでコンテナに接続すると bash ではないため操作しづらい点や、SQLDeveloper等のSQLクライアント(GUI)を利用してDBに接続できない等の問題あったため、SSMのSSH接続ポートフォワーディングによりRDSに接続することでコンテナへのログインとSQLクライアントソフトでの操作を可能にする

  • Bastionサーバ等用意する必要なしに、Faragteコンテナのみで、コンテナおよびRDSへの接続が可能に

  • SSMを利用することで、セキュリティグループの解放、タスク定義のポートマッピングを行うことなく安全にRDSに接続することが可能

FargateでコンテナへのSSMでの接続

下記記事を参考にSSMによりFargateコンテナにshellアクセスが可能

下記コマンドのように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接続が可能

Dockerfile
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"]
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> 

参考

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17