【要約】Lambda関数にcurl/openssl/ncが無い問題を、Python標準ライブラリだけで乗り切った話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がAWS Lambda上で脆弱性診断ツールを構築した際、実行環境の制約に直面した。LambdaのPython環境には、診断に不可欠なCLIツールが標準で備わっていない。具体的には以下の課題が発生した。
- ・
curlやopensslなどのバイナリが存在しない。 - ・
subprocessによるシェル実行は、コマンドインジェクションの脆弱性を招く。 - ・Lambda Layerによる依存追加は、管理コストと環境の複雑性を増大させる。
// Approach
開発者は依存関係を最小化するため、Pythonの標準ライブラリによる代替を試みた。各CLIツールの機能を、以下の手法でコードレベルに落とし込んだ。
- ・HTTPリダイレクト確認:
requestsを用い、allow_redirects=Falseでヘッダーを直接取得。 - ・TLSバージョン判定:
sslモジュールを使用。OpenSSL 3.xの制限をcontext.set_ciphers('DEFAULT@SECLEVEL=1')で回避。 - ・SSHバナー取得:
socketモジュールで生ソケットを開き、recv()で直接受信。 - ・ICMP(ping)対応:Lambdaの権限制約を考慮し、実行環境をEC2へ分離して役割分担を実施。
// Result
開発者は、Lambdaの制約を回避しつつ、セキュアな診断ロジックを実現した。単なる代替に留まらず、アーキテクチャの最適化にも成功している。
- ・依存関係の削減:Lambda Layerを使わず、軽量な実行環境を維持。
- ・セキュリティ向上:シェル経由の実行を排除し、攻撃対象領域を縮小。
- ・設計の健全化:できないことは別環境(EC2)に任せる役割分担を確立。
Senior Engineer Insight
> サーバーレス環境における「脱CLI」は、運用とセキュリティの両面で極めて合理的だ。バイナリ依存を減らすことは、コールドスタート抑制や管理コスト低減に直結する。特に、ICMPを無理にLambdaで実現せず、EC2へ役割を分散させた判断は実戦的だ。「環境の制約をコードで無理に突破する」のではなく、「設計で解決する」姿勢が重要である。これが堅牢なシステム構築には不可欠だ。