AWS Systems Manager、活用の工夫で運用をよりスムーズに
AWS Systems Managerではさまざまな支援機能が提供されていますが、SSHレス構成の実現に役立つのがセッションマネージャです。サーバー内にアクセスして任意のコマンドを実行できる管理機能ですが、サーバーとの通信にはSSHではなくAWS Systems Manager(SSM)エージェントを経由します。
セッションマネージャでインスタンスに接続する際は、接続先インスタンスのID指定が必要です。インスタンスは随時入れ替わるため毎度確認していると手間が掛かってしまいます。
そこでKyashでは、「起動中のインスタンスを一覧表示し、接続先を選択するとセッションが開始される」シェルスクリプト関数を配布しています。ターミナル上で関数を呼び出し、インスタンスを選択する、といった2ステップだけでサーバーにアクセスすることが可能です。各インスタンスには規約に基づいたタグ(環境名・サービス名など)を付与してあるため、任意の情報で接続先を絞り込むこともできます。
また、セッションマネージャ経由ではSCPコマンドが利用できません。通常運用時には滅多に発生しないものの、サーバーとファイルを送受信する場面が稀にあります。多くのインスタンスではすでにSSHデーモン自体を停止しているため、ファイル送受信用のS3バケットを用意することで対応しました。
RDSなどサーバーインスタンス以外への接続には、踏み台(Bastion)インスタンスを用いています。Bastionもプライベートサブネットに配置しており、SSHを含めてポートは一切開放していません。Bastionまではセッションマネージャで接続、その上にSSHポートフォワードを通すことで、VPC内の任意のエンドポイントへ接続可能です。
AWS Systems Managerにより得られた効果
前述の通り、セッションマネージャではSSHを使用しません。SSHのポート開放が不要となることに加え、ユーザーや鍵の管理コスト・sshdやセキュリティグループの設定を削減できた点が大きなメリットでした。
アクセス制御にはAWS IAMを用いるため、IAMロールやポリシーと紐付けて一元管理できるのも便利な点です。KyashではOneLoginのSAML認証でAWSへアクセスしているため、異動や入社・退職に伴う権限変更は自動反映されるようになっています。
証跡管理の面では、セッションマネージャ経由の操作履歴がAmazon S3やAmazon CloudWatchへすべて記録されるため、自前でロガーを仕込んだり、ログの保管先を気にしたりする必要もなくなりました。
また、内部的にはAWSのAPIをコールしているため、Amazon GuardDutyによる異常検知を組み合わせることが可能です。単純なSSH接続よりも幅広いイベントソースから異常検出を行えるため、よりセキュアでありながらも運用負荷の低い構成を実現できています。
まとめ
今回は、KyashにおけるAWS Systems Managerの活用事例について紹介しました。
AWS Systems Manager、特にセッションマネージャを用いることでSSHの管理をなくし、証跡管理や異常検知もマネージドサービス化することで運用コストを低減できています。
PCI DSSなど厳しいセキュリティ基準を満たしつつも、スピード感を持って開発を進めるためにはマネージドサービスの活用が欠かせません。今後もAWSの各種サービスを適宜取り入れながら運用負荷の低減とセキュリティの強化を両立させ、Kyashをより進化させていきたいと考えています。
AWSソリューションアーキテクトより一言
KyashのAWSサービス活用のここがポイント!
まさにAWS Systems Managerを正しく使ってメリットを享受されており、ベストプラクティスを実践されていると思います。
SSH接続をなくすことができただけでなく、アカウント管理のAWS IAMへの一本化、Amazon GuardDutyによる異常検知やAmazon CloudWatchなどによる証跡管理の恩恵もしっかり活用されており、素晴らしい事例です。
そして何より、KyashさんではAWSのサービスを適切に使うことで、厳しいPCI DSSなどビジネスの根幹に関わる要件へのシビアな対応とスピード感を持った開発の両立ができているとのこと。
第1回で述べたようにスタートアップにおいては常にスピードが非常に重要です。少しでもAWSがそのお手伝いをできているのであれば、大変うれしく思います。今回は特にセキュリティ、AWS Systems Managerにフォーカスした話でしたが、ぜひこれ以外の話も伺いたくなりますね!