概要
弊社では、主に病院検索・予約システムを展開する事業会社様向けに、Amazon Cognitoを活用した認証の一元管理と、Amazon QuickSightを用いたデータ分析・可視化を自動で連携するSales Force Automation(SFA)システムを新たに開発いたしました。本システムは、ユーザー管理の効率化を図るとともに、営業活動に必要なデータをリアルタイムで可視化し、意思決定をスピードアップします。さらに、クロスアカウント構成を活用して複数のAWSアカウントを横断するシングルサインオン(SSO)を実現しており、セキュリティ面と運用面の両立を図っています。
システム開発の背景と目的
近年、医療関連サービスでもデジタルトランスフォーメーション(DX)の加速が求められており、オンラインでの予約や問い合わせ対応が急速に普及しています。その結果、営業活動においても多様なチャネルからのユーザー情報管理や複雑化するデータ分析のニーズが高まりました。しかし、複数のシステムを並行して利用していると、ユーザー認証の仕組みが分散し、同時にデータも分散してしまいがちです。そこで弊社は、1つの認証基盤でユーザー管理を一元化し、取得した営業データをリアルタイムかつ包括的に可視化できるプラットフォームが必要であると判断しました。具体的には、以下のポイントを重視しています。
- セキュアで拡張性の高い認証基盤の構築:柔軟なユーザー管理・権限設定に加え、多要素認証(MFA)やパスワードポリシーにも容易に対応。
- ダウンタイムゼロでのユーザー移行:業務停止を最小限に抑えつつ、既存システムからスムーズに移行できる仕組み。
- QuickSightとの自動連携による運用効率化:SFAにログインするだけでQuickSightのダッシュボードを利用できる仕組みを実現。
- クロスアカウント構成による柔軟な運用:CognitoとQuickSightを別々のAWSアカウントで運用しつつ、ロール設定やAWS STSでSSOを実現。
システムの特徴
1. Amazon Cognitoによる認証管理
- ユーザー登録・認証フローの標準化:Eメールや電話番号を用いた認証だけでなく、MFAやパスワードポリシーなどの高度なセキュリティ要件にも対応。
- 既存ユーザー情報の移行:既存システムのユーザー情報をダウンタイムなしでCognito User Poolに移行できるよう、CSV一括インポートやパスワードリセットメールの自動送信を実装。
- 柔軟な認可ロジックへの対応:ユーザープール属性やカスタムアトリビュートを活用し、医療機関や担当領域などの追加情報も付与可能。
2. Amazon QuickSightによるデータ視覚化
- リアルタイム分析と自動更新:Amazon RDS上のデータをQuickSightデータセットとして設定し、自動更新スケジュールでダッシュボードを常に最新に。営業担当者はSFAにログインするだけで最新の販売状況や成約率を確認できます。
- ユーザーグループ別の表示切り替え:QuickSightのユーザーグループ機能とCognito連携により、担当者ごとに異なるダッシュボード表示や閲覧権限の制御が可能。
3. クロスアカウントでのシングルサインオン(SSO)
Cognito Identity PoolとAWS STS(Security Token Service)を組み合わせ、クロスアカウント環境におけるシングルサインオンを実現しています。CognitoとQuickSightが異なるAWSアカウントの場合でも、Identity Pool側でフェデレーティッドアイデンティティを設定し、QuickSight側で役割の信頼ポリシー(AssumeRole)を構成することで、一時的に権限を委譲します。将来的に別のBIツールやSaaSと連動したい場合にもスケーラブルに拡張できます。
システム構成
AWSアカウントAにCognito(User Pool / Identity Pool)とSFAシステム(Laravel)およびRDSが存在し、AWSアカウントBにQuickSightが配置されています。処理の流れは以下の通りです。
- ユーザーがSFAシステムにアクセスすると、Cognito User Poolによる認証が実行されます。
- 認証成功後、JWTトークンがユーザー側に返され、それをSFAシステムへ送付します。
- SFAシステムはCognito Identity Poolを利用し、AWS STSを介してQuickSightのあるアカウントに対して一時的な権限を取得します。
- その結果、ユーザーは追加の認証操作なしに、QuickSightのダッシュボードにアクセスできるようになります。
シーケンスのポイント
- ユーザー認証(Cognito User Pool):入力されたID/パスワードをCognito User Poolが検証し、認証成功でJWTトークン(IDトークン、アクセストークンなど)をSFAに返却。
- クロスアカウントの認可(Identity Pool + STS):Identity PoolのGetId/GetOpenIdToken APIでフェデレーティッドアイデンティティを取得し、STSのAssumeRoleWithWebIdentityで別アカウントのQuickSightへアクセスするための一時認証情報を取得。
- QuickSightダッシュボード表示:SFAシステムがQuickSight APIをコールしてダッシュボード埋め込みURLを取得。QuickSight上にユーザーが存在しない場合はCognitoユーザー情報から自動作成されるケースもあります。
- データ更新と自動反映:営業活動で発生した顧客情報や案件データは随時RDSに書き込まれ、QuickSightのデータセットもスケジュール設定で自動更新されます。
開発の流れ
1. Amazon Cognitoの設定
- ユーザープールの作成:属性(Email、Phone Numberなど)や認証フロー、パスワードポリシー・MFAを設定。
- アプリクライアントの設定:SFAシステム用のクライアントID・シークレットを発行し、JWTトークン受け取り用のリダイレクトURLを登録。
- カスタムアトリビュートの活用:医療機関専用の属性や組織階層、担当エリアを追加し、最小限の顧客管理データベースとしても利用。
- Cognito Identity Poolの設定:クロスアカウントでQuickSightを利用するため、AWS STS経由で別アカウントのリソースにアクセスできるロールを設定。
2. SFAシステムの構築
SFAシステムはLaravel 10でバックエンドを実装し、データベースにはMySQL(Amazon RDS)を採用。フロントエンドにはLaravel BreezeとTailwind CSSを活用しました。Laravelの認証ガードをカスタム実装してCognito発行のJWTトークンを検証し、JWTのクレームとLaravelのポリシーを連動させて権限管理を制御。医療機関を中心とした顧客情報や商談テーブルを設計し、マイグレーションでRDSにデプロイ。アカウント発行やパスワードリセット用の通知機能も用意しました。
3. QuickSightとの連携
- データソースの作成:QuickSightでAmazon RDS(MySQL)を接続し、必要なテーブルやビューをデータセット化。頻度の高いクエリはビュー化しパフォーマンスチューニング。
- ダッシュボードの構築:案件ステータス別の棒グラフ、地域別売上推移の折れ線グラフ、医療機関属性ごとの案件数円グラフなどを配置。ドリルダウンやフィルターも設定。
- ユーザーグループ設定:SFAと同じ階層構造(マネージャー、営業担当者など)をQuickSightのグループに反映し、Cognitoのグループ情報と同期して権限設定を自動化。
4. 自動連携の設定
- JWTトークンの利用:SFAへのログイン時に受け取ったJWTを検証し、Cognito Identity Pool経由でAWS STSを呼び出して一時的なアクセス権限を取得。
- QuickSightユーザー管理:QuickSight APIでCognitoのユーザー名とQuickSightユーザーを紐付け、同一ユーザーとして認可。
- ダッシュボード表示:SFAのメイン画面にQuickSightダッシュボードを埋め込み、追加ログインなしでデータ分析を実現。
5. ユーザー移行
- 既存ユーザーデータのdump取得:従来システムからユーザー情報をエクスポートし、重複や欠損値を確認。
- CSVファイルを作成して一括インポート:Cognito User Pool対応のCSV形式に整形し一括移行。
- パスワードリセットメールの送信:既存パスワードは移行できないため、リセットメールを一斉送信し初回ログイン手続きへ誘導。
導入後の成果
- セキュアなユーザー管理:MFAやパスワードポリシーが標準で利用可能になり、不正アクセス防止や情報漏えいリスクの低減につながっています。
- リアルタイムなデータ分析:QuickSight連携により営業パフォーマンスをリアルタイムで可視化。従来Excelでのレポート作成に要していた業務が、ダッシュボードで即座に把握できる環境へ変わりました。
- 運用効率の向上:SFAにログインしたユーザーをそのままQuickSightに認可することで別々のログインが不要に。STSによるロール切り替えの自動化で管理コストも削減。
- ユーザビリティの向上:認証とダッシュボードアクセスが一つのフローに統合され、ITリテラシーに差があるユーザー層にも大きな価値をもたらしています。
まとめと今後の展望
本システムは、Amazon Cognitoを中心としたセキュアな認証基盤とAmazon QuickSightによる自動連携を融合させることで、営業活動全般の最適化を実現しました。ユーザープールとアイデンティティプールの組み合わせによりクロスアカウント環境でもシームレスなSSOを実現し、リアルタイム更新のダッシュボードと属性別権限管理でデータドリブンな営業支援を可能に。ダウンタイムなしのユーザー移行も完了しました。今後は、機械学習による需要予測や営業成約率の分析など、集約されたユーザー情報とQuickSightの分析基盤を活用した高度なデータ活用にも取り組んでまいります。

