【AWS Summit Tokyo 2019 セッションレポート】サーバーレスアプリケーションのためのセキュリティアーキテクチャ #AWSSummit

AWS Summit Tokyo 2019 Day3 (本日6/14)のセッション、「サーバーレスアプリケーションのためのセキュリティアーキテクチャ」をレポートします。

ライブストリーミングでのセッション参加のレポートです。

セッション概要

サーバーレスコンピューティング環境では、サーバー管理の手間から解放され、可用性や拡張性が高いインフラをいつでも利用することができます。アプリケーション開発者が自身のコア業務とビジネス価値に集中するために、サーバーレスコンピューティングはますます広がってきています。本セッションでは、このようなサーバーレスコンピューティング環境において考えておくべきセキュリティの要点をご紹介し、開発者がAWS上でセキュアなアプリケーションを実現するアーキテクチャを紹介します。

スピーカー

アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 ソリューションアーキテクト 桐山 隼人

セッションレポート

目的

  • サーバレス アプリケーションの構成要素を知る
  • サーバレス アプリケーションをセキュアに設計する

サーバレス アプリケーションの構成要素を知る

サーバレス アプリケーションの特徴

  • サーバ管理不要
  • 柔軟なスケーリング
  • アイドル時リソース確保不要
  • 高可用性

開発者とAWSの役割分担

  • オンプレミスでは開発者が全て担当
  • 独自構築onEC2ではOSの導入まではAWSが担当
  • サーバレス アーキテクチャではアプリケーション作成のみを開発者が担当

サーバレス アプリケーションモデル

  • イベントソース
    • S3にオブジェクトが作られる
    • Kinesisにデータストリームが保存
    • HTTPSリクエスト
  • 関数が実行される
    • Python
    • Node.js
    • Java
    • Ruby
    • Go
    • C#
    • PowerShell
  • サービス呼び出し
    • データベース読み書き
    • ファイル操作
    • 通知

最も基本的なAWSサーバレス アーキテクチャ

Client - API Gateway - Lambda - DynamoDB

Lambda

  • サーバーを気にすることのないアプリケーション開発・実行
    • インフラ管理不要
      • ビジネスロジックだけにフォーカスできる
    • 高いコスト効率
      • 使った分だけ100ms単位で課金
    • 標準的な言語のコードを実行

API Gateway

  • どんな規模であっても簡単にAPIの作成、配布、保守、監視、保護ができる
    • API定義とホスティング
      • 統一化されたAPIの作成と管理
    • ネットワークトラフィック管理
      • DDoS対策
      • スロットリング機能
    • AWS認証の仕組みを活用

サーバレス アプリケーションのユースケース

  • Webアプリ
  • モバイルバックエンド
  • Data Processing
  • チャットボット
  • Alexa
  • 自律的なIT環境

モバイルバックエンドの例

  • 端末
  • 認証はCognito
  • 静的コンテンツはS3とCloudFront
  • HTTPアクセスはAPI GatewayとLambdaとDynamoDB

Data Processing

  • IoT機器
  • Kinesis
  • Lambda Function
  • DynamoDB

構成要素

  • システム監視とデプロイ
    • CloudWatch
    • X-Ray
  • エッジ
    • CloudFront
  • メッセージング、ストリーミング
    • SNS
    • Kinesis
  • コンピュート
    • API Gateway
    • Lambda
    • Step Functions
  • データ
    • DynamoDB
    • S3
    • Elastic Search Service
  • ユーザー管理とアイデンティティ
    • Cognito

サーバレス アプリケーションをセキュアに設計する

Well-Architected Framework Serverless Application Lens

  • クラウドにおけるシステム設計・運用のベストプラクティス集
  • ワークロード固有の考え方やベストプラクティスにフォーカスを当てたレンズ
  • ここからはサーバーレスアプケーションのレンズのエッセンスを紹介
  • リンク

セキュリティの柱

ビジネスにおける価値を生み出しながら、リスクアセスメントと防御戦略により、情報、システム、資産を守る能力

  • IDとアクセス管理
  • 発見的統制
  • インフラストラクチャー保護
  • データ保護
  • インシデントレスポンス

IDとアクセス管理の考慮事項

  • APIアクセスの認証認可をどのようにしていますか?
  • LambdaファンクションがアクセスできるAWSサービスをどのように保護していますか?

  • 考え方例

    • ユーザー管理とアイデンティティ管理
    • IAM活用
    • 既存IdP活用
    • 最小権限の原則

Cognito User Pool

  • ウェブ/モバイルアプリケーションの認可、許可、ユーザー管理をサポート
    • ユーザー管理を簡単に
      • サインアップ/サインイン機能をアプリに簡単に追加
    • マネージド型ユーザーディレクトリ
      • 数億のユーザーまでスケールするユーザーディレクトリを作成・管理するフルマネージドなサービス
    • 拡張されたサキュリティ機能
      • 電話番号やEmailアドレスの検証と多要素認証の提供

API Gateway アクセス認可の方法

  1. Cognito User Pools Authorizer
    • User Poolsに認証リクエスト
    • JWTトークンを返す
    • APIGatewayにアクセス
    • トークン検証
    • Lambda関数起動
    • DynamoDBにデータ保存(AWSリソースにアクセス)
  2. AWS IAM Authorization
    • User Poolsに認証リクエスト
    • JWTトークンを返す
    • AWSクレデンシャルリクエスト
    • Cognito Identity PoolsがAWSクレデンシャルを返す
    • API Gatewayにアクセス
    • IAMポリシー確認
    • Lambda関数起動
    • DynamoDBにデータ保存(AWSリソースにアクセス)
  3. Lambda Authorizers
    • 認証リクエスト(OpenID)
    • カスタムIdPトークン
    • API Gatewayにアクセス
    • ポリシーキャッシュ確認
    • トークン検証
    • IAMポリシー生成
    • IAMパーミッション検証
    • Lambda関数起動
    • DynamoDBにデータ保存(AWSリソースにアクセス)

発見的統制の考慮事項

  • サーバレス アプリケーションのログをどのように分析していますか?
  • アプリケーションの依存関係や脆弱性をどのように監視していますか?

  • 考え方例

    • アプリケーションログはCloudWatchLogsの利用
    • AWSサービスAPI呼び出しはCloudTrailの利用
    • ログに機微な情報が含まれる場合の配慮
    • 脆弱性やアプリケーション依存関係の追跡

API Gatewayアクセスログの設定

  • カスタムアクセスログの設定は注意
    • 個人情報など機密性の高いものは残さない方が良い場合も

X-Rayを使ったトラブルシューティング

  • サービス間のイベント遷移を可視化
  • Lambdaファンクションから他のサービスに対する呼び出しと時間をトレース
  • 消えたイベントやスロットル状態の確認、診断が簡単に

インフラストラクチャー保護の考慮事項

  • LambdaファンクションがアクセスできるVPC内のAWSリソースに関してどのようにネットワーク境界を保護していますか?

Firewallによるネットワーク境界保護

  • AWS WAFをAPI Gatewayに設定 
    • Rate Limit、正規表現など
  • Security GroupをDynamoDBに
    • IPアドレス、ポート保護など

データ保護の考慮事項

  • サーバレス アプケーション内の機微な情報をどのように保護していますか?
  • どのように入力値をチェックしますか?

  • 考え方例

    • 通信データ暗号化
    • クライアントサイド暗号化
    • ログに機微な情報が含まれる場合の配慮
    • JSONスキーマやURIパラメータ、クエリ文字列、ヘッダー妥当性検証
    • アプリケーションレベルの入力値検証

保護すべきデータの外部化

  • Parameter Store
  • Secrets Manager
    • DB認証情報を格納する
    • アプリでSecrets Manager呼び出し
    • DB認証情報返却
    • コネクション確立
    • 安全なローテーション(自動的)

インシデントレスポンスの考慮事項

  • セキュリティインシデントについて調査や対応ができるようにどのような準備をしていますか?

  • 考え方例

    • 人、ツール、プロセスの定義
    • インシデント対応訓練の実施
    • セキュリティ・オートメーション

侵入テスト

  • 最近テストのポリシーが更新された
  • テストが許可される(事前申請不要)AWSリソース
    • EC2
    • NAT Gateway
    • ELB
    • Lambda
    • API Gateway
    • など
  • 申請が必要なイベント
    • セキュリティシミュレーション
    • レッドチームテスト
    • ブルーチームテスト
    • 災害対策シミュレーション
    • など

WAF セキュリティオートメーション

  • WAFフルログをKinesis Data Firehoseに
  • S3バケットに格納
  • Athenaで分析
  • LambdaでWAFルールを更新

まとめ

  • サーバレス アプリケーションを構成する要素
    • IDアクセスと管理
    • 発見的統制
    • インフラの保護
    • データ保護

セキュアな設計のための考慮事項まとめ

  1. APIアクセスの認証認可をどのようにしていますか?
  2. LambdaファンクションがアクセスできるAWSサービスをどのように保護していますか?
  3. サーバレス アプリケーションのログをどのように分析していますか?
  4. アプリケーションの依存関係や脆弱性をどのように監視していますか?
  5. LambdaファンクションがアクセスできるVPC内のAWSリソースに関してどのようにネットワーク境界を保護していますか?
  6. サーバレス アプケーション内の機微な情報をどのように保護していますか?
  7. どのように入力値をチェックしますか?
  8. セキュリティインシデントについて調査や対応ができるようにどのような準備をしていますか?

感想

サーバーレスのセキュリティについて深く調べたり考えたりしたことがなかったのでとても勉強になりました。インフラ管理が不要になったとはいえそれでも色々考慮しないといけない点はありますね。しかしAWSの各サービスをフル活用していけばセキュリティ要件のための作業時間を大幅に短縮できそうに感じました。