Save 37% off PRO during our Black Friday Sale! »

Amplifyでいろんな機能拡張をしていったお話

 Amplifyでいろんな機能拡張をしていったお話

1年ほど前にAmplifyでリリースしたサービスを、この1年間でいろんな機能を実装していったお話です
ベストプラクティスではありませんが、一つの事例としてご覧ください

AuthenticationとAdmin Queries APIによる利用企業様アカウント管理
APIの@Authによる個人情報の閲覧制限
Storageによるファイル共有とファイルへのアクセスとその制限

B65b0db51a1dd7883e3e60d620b97d5a?s=128

Kentaro Takata

July 30, 2021
Tweet

Transcript

  1. Amplifyでいろんな機能拡張を
 していったお話
 
 Amplify Boost Up #01
 ゲバラ
 1


  2. 自己紹介
 2
 高田 健太郎 ENGINEER あだ名:ゲバラ 中小ソフトハウスSE(5年)→POLのエンジニア(2019/6〜) 現在は、新規事業でいろんなプロダクトを模索中 技術領域:フロント、バック、インフラなど広く浅く

  3. 3
 約一年前にLabBase Nowをリリースしました
 学生によるイベント申込や管理者によるイベント管理


  4. 本日はこのLabBase Nowが
 どのような機能拡張していったかお話します
 4


  5. この1年間で増えた機能
 • 企業アカウント発行
 • 学生個人情報の閲覧制限
 • ファイル共有
 
 
 5


  6. この1年間で増えた機能
 • 企業アカウント発行
 • 学生個人情報の閲覧制限
 • ファイル共有
 
 6


  7. 企業アカウント発行-改善前業務フロー
 7
 LabBaseNow イベント管理画面 企業様宛参加学生リスト 企業ご担当者様 イベント管理者 CSVダウンロード メール送信

  8. 企業アカウント発行-改善前業務フロー
 8
 LabBaseNow イベント管理画面 企業様宛参加学生リスト 企業ご担当者様 イベント管理者 CSVダウンロード メール送信 メール送信の手間

    セキュリティチェックの手間 など工数がかかったり 精神的にも負担
  9. 企業アカウント発行-改善後業務フロー
 9
 アカウント発行 (初回のみ) 企業ご担当者様 ログインして 参加学生リストが閲覧で きる LabBaseNow イベント管理画面

    LabBaseNow 企業様向け管理画面
  10. 企業アカウント発行
 • 認証周りはAmplifyのAuthentication
 • Admin Queries API
 ◦ Cognitoを操作するための管理者向けAPI
 ◦

    functionが自動生成される。楽々です。
 ◦ アカウントの無効/有効化が可能
 ◦ ユーザグループも登録。後ほど出てくるAPIの@auth用
 ◦ ただアカウント作成ができない
 • Amplify Librariesで別途サインアップ用のAPIを使う
 10

  11. 懺悔
 • 管理者でアカウント発行するので、この際にパスワードを控えないとい けない
 • 生成されるfunctionを修正すれば、管理者が操作するアカウント発行が できる
 
 
 11


  12. この1年間で増えた機能
 • 企業アカウント発行
 • 学生個人情報の閲覧制限
 • ファイル共有
 
 
 12


  13. 学生個人閲覧情報の制限-要件
 13
 • 企業アカウントで学生の個人情報を閲覧できるようにするため、APIでア クセス制御できるようにしたい
 
 
 


  14. APIと@auth
 • 情報取得はAmplifyのAPI(GraphQL)
 • @authで認可ルール指定できる
 ◦ ownerを指定:対象レコードを操作できるユーザを制限
 ◦ groupsを指定:対象レコードを操作できるユーザグループを制限
 •

    操作種類
 ◦ create,read,update,delete
 
 14

  15. スキーマ定義
 15
 イベント情報と学生の申込情報にそれぞれ認可ルールを設定
 


  16. 学生個人閲覧情報の制限-実装方法
 16
 • ownerにCognitoのUserNameを設定
 ◦ アカウント作成時にUserNameは取得
 • groupsは管理者グループを設定
 • イベント情報作成・更新時にownerをセット


    • 学生の申し込みレコードに対してもownerをセットしてアクセス制御
 ◦ すでに存在するレコードに対してもownerをセット

  17. 懺悔
 • レコードごとにownerを設定するので大量に学生がいると更新に時間が かかってしまう。
 ◦ @connectionしてたらイベントのowner設定だけで絞れるとかできて欲しい。(調 べたけどできなかった)
 • この方法でマルチテナント方式にしだすとしぬ
 


    17

  18. 実際作った機能・要件
 • 企業アカウント発行
 • 学生個人情報の閲覧制限
 • ファイル共有
 
 
 18


  19. ファイル共有-要件
 19
 • ファイル共有を管理者から各企業ごとにできるようにしたい
 ◦ イベント運用のための資料やイベント後のアンケート結果の共有
 • もちろんセキュアに管理したい
 ◦ 共有したファイルは共有対象のアカウントのみアクセスできるようにしたい


  20. Storage
 • ファイル関連はAmplifyのStorage
 • 認証済みユーザがファイルディレクトリにアクセスできる。
 • ファイルの公開範囲
 ◦ public:全員アクセス、操作可能
 ◦

    protected:全員アクセス可能、操作はアップロードしたユーザのみ
 ◦ private:アップロードしたユーザのみアクセス、操作可能
 
 20

  21. Storageのライブラリ
 これだと管理者から企業へのファイル共有ができない
 21
 上げるとしたらここだが private/{user_identity_id}/ の配下にしかあげられない user_identity_id はCognitoのフェ デレーティッドID


  22. 管理者から企業へのファイル共有
 • 自前でS3を操作するためのfunctionを作成
 ◦ CLIでfunction作成時にアクセス可能のリソースを指定。
 ◦ functionそのものへのアクセスはAPIのスキーマ定義で設定。もちろん@authも OK
 ◦ Pathにuser_identity_idが必要なので、ログイン時に保存するように。


    ◦ 主な機能
 ▪ 署名付きURLの発行。これでアップロードもダウンロードも
 ▪ ファイル一覧
 ▪ ファイル削除
 • 企業アカウントからはStorageライブラリで操作
 22

  23. 1年間の感想
 • 開発自体は非常に楽
 ◦ 認証まわりは特に。
 ◦ 拡張性も高い。
 ◦ 困ったらfunctionで頑張る。
 


    
 
 23

  24. 最後に宣伝
 • 弊社POLでは、Wantedlyで採用募集や、月1で公開雑談という名の勉強 会やってますので興味ありましたら是非!
 
 
 24


  25. ご静聴ありがとうございました
 25