Serverless Meetup Tokyo #2 レポート(2): Serverless AWS構成でセキュアなSPAを目指す

こんにちは、エンジニアの小林です。2017年1月17日に開催されたServerless Meetup Tokyo #2に参加してきましたのでレポートしたいと思います。

Serverless AWS構成でセキュアなSPAを目指す

ハンズラボの加藤雅之さんの発表です。

発表内容レポート

  • SPAのベースとなる静的サイト
    • S3へ配置
    • CloudFrontでCDN化
    • AWS Certificate Managerで証明書作成
  • 動的な情報(WebAPI)
    • API Gateway
      • 静的サイトとドメインが異なるのでCORS有効化を忘れずに
    • Lambda
      • 実行権限は必要最低限に絞る
    • DynamoDB
      • DynamoDBをreadするLambdaにはread権限のみを、writeするLambdaにはwrite権限のみをアタッチ
    • API Gatewayをデプロイし、JavaScript SDK生成
    • 前段にAWS WAFを挟む
      • API Gatewayに直接設定できないため、CloudFrontを挟む必要あり
        • レイテンシーが気になる
  • 個別ユーザー機能
    • Cognito
      • Federated Identities
        • Custom Developer Providerを作成する
          • 拡張認証フローの採用がおすすめ
    • ユーザー登録
      • Lambda + DynamoDB
    • トークン
      • STS, CongitoToken共に有効期限が存在
        • それ以上伸ばしたければ独自実装
      • JWTを使ってみる
        • JSON Web Token
          • トークン内にJSONデータを含めることが可能
          • 改竄防止のための署名を含む
        • JWT検証LambdaはAPI GatewayのCustom Authorizerとして設定

感想

AWSでサーバレスWebサービスを構築する場合はこのアーキテクチャが基本になりそうですね。
(認証をUserPoolsではなく独自プロバイダにした理由を聞いておけばよかった。。。)
残念ながら実運用には至らなかったということですが、運用されている他の事例も聞いてみたいです。

JWT(JSON Web Token)は以前ルナルナIDを担当した際に採用しましたが、改竄ができないセキュアな状態で好きなデータをトークンに含めることができるのでとても便利です。ご存知ない方は調べてみる価値はあると思います。