やーまんぶろぐ

気が向いた時にだけ書くブログ

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へのアクセスをどのように承認し、認証しますか?

SERVSEC 2:Lambda機能がアクセスできるAWSサービスについて、どのように境界を強制していますか?

  • Lambda関数がアクセスできるものに関しては、最小特権アクセスに従うこと、指定された操作を実行するために必要なものだけを厳密に許可することが推奨される。
  • API Gateway APIキー機能はセキュリティのメカニズムではなく、メータリングのために使用される。APIキーごとの使用状況を追跡することができる。
    • https://image.slidesharecdn.com/20161116awsblackbeltapigateway-161116105747/95/aws-black-belt-online-seminar-2016-amazon-api-gateway-43-638.jpg?cb=1479431239
  • カスタムオーソライザを使用する場合、クレデンシャル情報や機密データをクエリ文字列のパラメータやヘッダーに使用することはお勧めしない。
  • 複数Lambda関数でIAMを共有することは、最低特権アクセスに違反する可能性があるので注意。

SERVSEC 3:サーバーレスのアプリケーションログをどのように分析していますか?

  • CloudWatchのメトリクスフィルタを利用すると、サーバレスアプリケーションの標準出力を、正規表現のパターンマッチングによってカスタムメトリクスに変換して件数をグラフ化することが可能です。
    • さらに、アプリケーションのカスタムメトリクスに基づいてCloudWatchアラームを作成することで、アプリケーションの動作を素早く把握できる。
  • AWS CloudTrailログは、監査とAPI呼び出しの両方に使用する必要がある。
  • トラブルシューティングの際に、ステージ全体ではなく個々のメソッドに対してAPIGatewayログを有効にすることを検討する。
  • サーバーレスアプリケーションの設計によっては、機密データが含まれている場合があるので注意する。
  • Lambda関数のコード内でCloudWatchに対するAPI呼び出しを行うと、不要なデータがログに取り込まれる可能性がある。
  • API Gatewayはリクエスト/レスポンスの全てを記録することがあり、コンプライアンス要件に違反する可能性がある。ロギングを有効にする前に、コンプライアンスチームに確認する。

SERVSEC 4:サーバーレスアプリケーション内の依存関係の脆弱性をどのように監視していますか?

  • アプリケーション依存関係の脆弱性スキャンに関しては、CI / CDパイプライン内に統合可能なOWASP Dependency Checkなどの商用ソリューションとOSSの両方が多数存在する。バージョン管理ソフトウェアリポジトリの一部として、AWS SDKを含むすべての依存関係を含めることが重要です。

SERVSEC 5:VPCアクセスの場合、AWS Lambda関数がアクセスできるネットワーク境界をどのように強制していますか?

  • Lambdaは、VPN接続を介してAWSの外部にあるリソースにアクセスするように設定できる。
  • セキュリティグループとNACLがネットワーク境界の基礎になる。コンプライアンス上の理由によりアウトバウンドトラフィックのフィルタリングが必要な場合、プロキシを配置することが考えられる。
  • コードレベルでのみネットワーク境界を実施することはお勧めしない。

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のログを有効にする前に、コンプライアンスチームと相談してください。

SERVSEC 7:入力検証に関するあなたの戦略は何ですか?