AWS Well-Architected Lens – Serverless Applications まとめ セキュリティ編
アーキテクチャを検討する上で、とても役に立つフレームワークであるAWS Well Archtected Framework。
サーバーレス版が公開されたのでベストプラクティスについてまとめておきます。
https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf
運用編、セキュリティ編、信頼性編、パフォーマンス編、コスト編の5回に分けてメモしていきます。
解釈が間違っているかもしれないので、ご注意ください。
SERVSEC 1:サーバーレスAPIへのアクセスをどのように承認し、認証しますか?
- 認証/認可の観点からは、APIゲートウェイ内でAPI呼び出しを認可する3つのメカニズムがある
- 一時認証を使用したIAM認可を活用し、それぞれのIAMユーザ、グループ、ロールに最低限の権限を追加することで安全にAPIを呼び出す。
- 既存のIDプロバイダ(IDP)を所有している場合、API Gatewayのカスタムオーソライザーを利用して、IdPに対して特定のユーザーを認証/検証するためのLambda関数を呼び出すことができる。
- IdPを持っていない場合、Amazon Cognitoのユーザープールを活用するか、Facebook、Twitter、Google +、Amazonなどの外部IDプロバイダーと統合することができる。
SERVSEC 2:Lambda機能がアクセスできるAWSサービスについて、どのように境界を強制していますか?
SERVSEC 3:サーバーレスのアプリケーションログをどのように分析していますか?
- CloudWatchのメトリクスフィルタを利用すると、サーバレスアプリケーションの標準出力を、正規表現のパターンマッチングによってカスタムメトリクスに変換して件数をグラフ化することが可能です。
- さらに、アプリケーションのカスタムメトリクスに基づいてCloudWatchアラームを作成することで、アプリケーションの動作を素早く把握できる。
- AWS CloudTrailログは、監査とAPI呼び出しの両方に使用する必要がある。
- トラブルシューティングの際に、ステージ全体ではなく個々のメソッドに対してAPIGatewayログを有効にすることを検討する。
- サーバーレスアプリケーションの設計によっては、機密データが含まれている場合があるので注意する。
- Lambda関数のコード内でCloudWatchに対するAPI呼び出しを行うと、不要なデータがログに取り込まれる可能性がある。
- API Gatewayはリクエスト/レスポンスの全てを記録することがあり、コンプライアンス要件に違反する可能性がある。ロギングを有効にする前に、コンプライアンスチームに確認する。
SERVSEC 4:サーバーレスアプリケーション内の依存関係の脆弱性をどのように監視していますか?
SERVSEC 6:サーバレスアプリケーションで機密データをどのように保護していますか?
- API Gatewayは、すべての通信でSSL/TLSを使用する。URLの一部であるリクエストパスとクエリ文字列は暗号化されないので注意が必要です。
- 暗号化されたHTTPペイロードはAPI GatewayやLambdaから受信すると複合されるので、標準出力に出力された場合、機密データがCloudWatchログを介して誤って公開される可能性があるので注意。(ここ自信なし)
- 不正な入力や傍受された入力は、システムへのアクセスを得るか、誤動作させる攻撃として使用することができる。
- 機密データは、すべてのレイヤーで常に保護される必要がある。
- API Gateway, Lambdaに関して、機密データはデータ操作前にクライアント側で暗号化されるか、HTTP POST要求の一部として送信される必要がある。ヘッダを暗号化することも含まれる。
- これにより、CloudWatchログのデータが公開された場合のデータ漏洩が防止される。
- 暗号化されたデータはDynamoDB、Amazon ES、またはAmazon S3のいずれかに永続させる。
- 機密データが暗号化されていないAPI Gatewayでのログ記録を有効にすることもお勧めしない。API Gatewayのログを有効にする前に、コンプライアンスチームと相談してください。