ITインフラエンジニアのおつむの整理

ITインフラエンジニア(現ニート)の頭の整理場所。ほぼ日記になる予定。

AWS CLIのDockerコンテナでSSM StartSessionを使ったポートフォワードができなかった話

背景

昨日AWS CLIのDockerコンテナを使用して、SSMを使用したインスタンスへの接続方法を色々試していました。

qiita.com

あとscpとかもできるようになったらうれしいなーと思い少し検証を進めてたのですが、ちょっと厳しそうだったのであきらめた話です。

やりたかったこと

  • AWS CLIのコンテナでssmを使用したポートフォワードのセッションを張る
  • コンテナ外から、コンテナ経由でインスタンスにscpする(いわゆるリモートフォワード?)

試したこと

上記で乗せた記事の環境です。(多少パスが違いますが) そこで以下コマンドを実行し、sshのポートフォワードのセッションが張られたコンテナが起動している状態です。

$ docker run --rm -p 6022:6022 -it -v /opt/docker/awscli/.aws:/root/.aws awscli ssm start-session --target "i-xxxxxxxxxxxxxxxxxxxxx" --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["22"],"localPortNumber":["6022"]}'

Starting session with SessionId: readonly-xxxxxxxxxxxxxxxxxxx
Port 6022 opened for sessionId readonly-xxxxxxxxxxxxxxxxxxx.
Waiting for connections...

Connection accepted for session [readonly-xxxxxxxxxxxxxxxxxxx]
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                       NAMES
5cd67455349b   awscli    "/usr/local/bin/aws …"   12 minutes ago   Up 12 minutes   0.0.0.0:6022->6022/tcp, :::6022->6022/tcp   objective_kepler

ここでリモートフォワードが設定されていたら、コンテナ外(コンテナホスト)から対象のコンテナに対してsshすればインスタンスに接続できるのかなーと思ってましたが、だめでした。

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                       NAMES
5cd67455349b   awscli    "/usr/local/bin/aws …"   17 minutes ago   Up 17 minutes   0.0.0.0:6022->6022/tcp, :::6022->6022/tcp   objective_kepler
$ ssh -i <key> ec2-user@172.17.0.2 -p 6022
ssh: connect to host 172.17.0.2 port 6022: Connection refused

コンテナにアクセスして、net-toolsをインストールしてポートを確認してみると、ローカルに対してしかListenしてないようです。それではできないのもしょうがないですね。 ちなみにコンテナにsshをインストールして、localのポートを指定したらちゃんと接続できました。

bash-4.2# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:6022          0.0.0.0:*               LISTEN
tcp       32      0 172.17.0.2:52612        52.119.219.52:443       CLOSE_WAIT
tcp        0      0 172.17.0.2:58144        52.119.220.97:443       ESTABLISHED
tcp        0      0 172.17.0.2:37508        18.65.125.52:443        TIME_WAIT

なので、もしSSMのStartSesionを使用してscpをどうしてもしたいのであればコンテナ作成時にコピーしたいファイル(orディレクトリ)をバインドマウントして、コンテナからscpする手順になるのかなーと思ってます。ただscpとかはなんとなくできたらラッキーくらいで検証していたので、いったん後回しにします。 同じ考えをした人の参考程度になれば幸いです。