LINEで送る
Pocket

今までECS/Fargateの場合、「コンテナにSSHする」という概念がそもそもNGと言われていましたが、私の経験上デバッグするのに結局SSHでログインしないと原因不明といったことがありました。なのでわざわざDockerfileにopenssh-serverをインストールして、鍵の設定をしてなどと…(以下ブログより)

さらにセッションマネージャーを用いることでログインすることはできますが、非公式ということもあり、結局SSHを開けてデバッグをするという流れになりました。

というわけで待望のECS Execがリリースしまして、AWS Systems Managerのセッションマネージャーを使い、SSMエージェント経由でコンテナへのアクセスが可能になりました。これでSSHのポートも開ける必要がなくなったのでセキュアにもなります。というわけで試してみました!

[Amazon ECS]AWS FargateでSSHコンテナを動かしてみた


ECS Execとは

https://aws.amazon.com/jp/about-aws/whats-new/2021/03/amazon-ecs-now-allows-you-to-execute-commands-in-a-container-running-on-amazon-ec2-or-aws-fargate/

ECS Exec では、ホストインスタンスとやり取りしたり、インバウンドポートを開いたり、SSH キーを管理したりすることなく、実行中のコンテナと直接やり取りができるため、コンテナインスタンスのセキュリティ体制が向上します。この機能を ECS タスクやサービスなどのきめ細かいレベルで有効にして、より厳密なセキュリティを維持するのに役立てることができます。AWS Identity and Access Management (IAM) ポリシーを使用すると、きめ細かいポリシーを作成して、クラスター、タスク、コンテナに対してコマンドを実行できるユーザーを制御することができます。アクセスが提供されると、AWS CloudTrail を使用してコンテナにアクセスしたユーザーを監査し、Amazon Simple Storage Service (Amazon S3) または Amazon CloudWatch Logs に出力して各コマンドをログに記録することができます。これにより、ECS ユーザーは、開発中に発生したバグやシステムの問題を安全にトラブルシューティングでき、コンテナ化されたアプリケーションの本番環境でのブレークグラス手順のデバッグツールを利用できます


AppコンテナにECS Execログインするまで

  • Fargateのバージョンは1.4.0必須
  • 事前にクレデンシャル(ECS系ポリシー)を作成する
  • ecs-exec用のIAMポリシーを作成し、ecsTaskExecutionRoleに追加

iam.tf

adachin-ecs-exec.json

今回Terraform化していますが、実際に既存で動作しているAppコンテナのRoleに対して、ecs-exec用のIAMポリシーを新たに追加しました。

  • AWS CLI v2とsession-manager-pluginのインストール

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-linux

今回はAmazon Linux 2で上記インストールしてみました。MacやWindowsでもSession Manager pluginはインストールできます。

  • 対象のAppコンテナへECS Execを有効化

対象のAppコンテナへECS Execを有効化しないとログインできないので注意!

  • Terraformの aws_ecs_service resourceに以下を追加

差分が出るので追加しましょう。

  • Appコンテナをデプロイする

ECS Execを有効化しただけではログインできません。必ずコンテナをデプロイ/タスク定義の更新をしてローリングアップデートしましょう。私はここでくそハマりました… 以下助けてくれてありがとう!!

  • ログインしてみる


シェルスクリプトで簡単ログイン

  • ecs-exec.sh

  • login

タスクIDを抽出してsedで削るという非常にシェル芸ですが、もっと簡単にログインできる方法あれば教えて下さい!!


※追記

https://github.com/kayac/ecspresso

https://github.com/peco/peco

カヤックの藤原さんが作られた ecspresso で、結構前にv1.5.0でexecコマンドが対応したのでこれを使うのがベストです!pecoと連携もできるし、シェル芸する労力ないのと各yamlファイルでコンテナの管理ができるので最高です!

  • クレデンシャルの環境変数追加

  • config.yaml作成

  • コンテナログイン


まとめ

素晴らしい!!これでSSH開けることなくコンテナにログインすることができるようになりました!それにログ等はCloudTrailやCloudWatch Logsに管理されるので、踏み台サーバーも今後は必要なさそうな…懸念点としてはオートスケール時に、コンテナデバッグ中で古いコンテナから消えるのでセッションが切れたらログインし直すことになるのだろうけど、基本ログインしないからいいか…

LINEで送る
Pocket


adachin

1989年生まれのLancers SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守やMENTAで未経験者にインフラをコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、ECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください