[レポート] SRV319:Security & Compliance for Modern Serverless Applications #reinvent

re:invent2018のSRV319 「Security & Compliance for Modern Serverless Applications」のレポートです
2018.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

サーバーレス開発部@大阪の岩田です。 現在ラスベガスで開催されているre:Invent2018に初参戦しています! これから4日間どんどんレポートしていきたいと思います。

この記事はSRV319 Security & Compliance for Modern Serverless Applicationsのレポートになります。

概要

以下が公式の概要となります。

Serverless architecture and a microservices approach has changed the way we develop applications. Increased composability doesn't have to mean decreased auditability or security. In this talk, we discuss the security model for applications based on AWS Lambda functions and Amazon API Gateway. Learn about the security and compliance that comes with Lambda right out of the box and with no extra charge or management. We also cover services like AWS Config, AWS Identity and Access Management (IAM), Amazon Cognito, and AWS Secrets Manager available on the platform to help manage application security.

サーバーレスアーキテクチャで構築したシステムにおけるセキュリティ対策について、AWSの様々なサービスのユースケースを交えながら丁寧に説明してくれました。

レポート

Introduction

サーバーレスアーキテクチャにおけるセキュリティ対策についての簡単な導入

AWSの各種サービスとユースケースの紹介

  • Amazon Cognito
    • Cognitoの機能について(サインアップ、サインイン、フェデレーション)
    • Cognitoのシナリオ
      • モバイルAPPとソーシャルプロバイダー
      • BtoBのサービスとActiveDirectory
      • CognitoユーザープールとIDフェデレーションの違いとそれぞれの利用シーン
    • AWS SystemSystems Manager Parameter Store
      • アプリのパラメータ管理に利用できる
      • Lambda間で設定を共有 環境変数との違い
    • AWS WAF
      • CloudWatchと統合したモニタリングとチューニングについて
      • API GWとの統合
    • AWS CloudTrail
      • ユーザーのアクティビティを追跡
      • オペレーションのトラブルシューティング
    • AWS Config
      • AWSリソースの設定変更をキャプチャ
      • change streamをトリガーに起動

Protecting the front door

脅威について

  • 簡単なパスワード、使い回し
    • Cognitoで認証する
    • Cognitoのadvanced セキュリティ機能を有効化する
    • Cognitoオーソライザーよりも複雑なロジックはLambdaオーソライザーで対応する
  • 有効期間の長いクレデンシャル
    • Cognitoを使えば漏洩時のリスクを減らせる

Securing your resources

  • 未検証の入力値による脅威
    • フィルタ、エスケープ、サニタイズを適切に
    • 入力値のサイズに上限を
    • SQLインジェクション対策にプリペアードステートメントを使う
    • WAFで対策を
  • Lambda実行ロールには必要最小限の権限を設定するように
    • Dynamoの特定のテーブルにアクセスする際の例
  • 機密情報のハードコード
    • 環境変数はDBのパスワードのようなセンシティブな情報の格納に使わない!!

Misbehaving Clients

  • 不正なクライアントへの対策
    • API GWの利用料プランを設定
    • WAFやAPI GWのDDOSプロテクションを使う
  • 並列性の高い設定
    • キューを使ってスロットリングを回避する
    • レイテンシが問題にならないならDynamoDBのAutoScallingを
    • 下流のサービスのリミットに合わせて上流のサービスのリミットを設定する
  • 3rdパーティの脆弱性チェカー
    • OWASP

Keeping a paper trail

  • リクエストIDをログに残して追跡できるように
  • X-rayを有効化しておく

  • 認証されていないリソースへのアクセス

    • MFAを有効化する
    • IAMユーザーを分割する
    • Cloud Ttailを有効化してユーザーのアクティビティを追跡できるように

Ensuring complience

  • イギリスHSBC銀行での事例
  • HSBCでのセキュリティコンプライアンスの決定フローについて
    • 3つのコントロール
    • コンプライアンスフレームワークについて

まとめ

英語のセッションを生で受講するのは初めての経験でしたが、紹介されていたAWSのサービスや機能については既に知識を有している領域だったので、スムーズに聞くことができました。

実際の開発においては、ベストプラクティスをそのまま適用するのではなく、費用対効果を踏まえた上でどこまでガチガチに固めるかといった取捨選択も重要になってくると思います。本セッションで紹介されていた手法をしっかりと身につけた上で、案件に応じた適切なアーキテクチャを提案できるようになっていきたいと思います。