こんにちは、エンジニアの小林です。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を挟む必要あり
- レイテンシーが気になる
- API Gatewayに直接設定できないため、CloudFrontを挟む必要あり
- API Gateway
- 個別ユーザー機能
- Cognito
- Federated Identities
- Custom Developer Providerを作成する
- 拡張認証フローの採用がおすすめ
- Custom Developer Providerを作成する
- Federated Identities
- ユーザー登録
- Lambda + DynamoDB
- トークン
- STS, CongitoToken共に有効期限が存在
- それ以上伸ばしたければ独自実装
- JWTを使ってみる
- JSON Web Token
- トークン内にJSONデータを含めることが可能
- 改竄防止のための署名を含む
- JWT検証LambdaはAPI GatewayのCustom Authorizerとして設定
- JSON Web Token
- STS, CongitoToken共に有効期限が存在
- Cognito
感想
AWSでサーバレスWebサービスを構築する場合はこのアーキテクチャが基本になりそうですね。
(認証をUserPoolsではなく独自プロバイダにした理由を聞いておけばよかった。。。)
残念ながら実運用には至らなかったということですが、運用されている他の事例も聞いてみたいです。
JWT(JSON Web Token)は以前ルナルナIDを担当した際に採用しましたが、改竄ができないセキュアな状態で好きなデータをトークンに含めることができるのでとても便利です。ご存知ない方は調べてみる価値はあると思います。