はじめに
プリザンターを基盤としたシステムに、外部からアクセスしたい!
でも、セキュリティが心配・・・そんな声は少なくないのではないでしょうか。
外部ユーザがプリザンターを基盤としたシステムにアクセスする際、セキュリティは最重要課題の一つです。
今回は、私たちが行ったセキュリティ強化の取り組みについてご紹介します。
本記事は、プリザンターを基盤としたシステムに外部アクセスを提供する際のセキュリティ対策に焦点を当てています。
システム要件の背景
今回ご紹介するシステム構成は、以下のシステム要件を満たすために設計されました。
- プリザンターを基盤とした業務基幹システム
-
社内ユーザーと社外ユーザーの両方からアクセス可能なシステム
- 社内ユーザー:社内ネットワークでのIP制限およびSSOを使用し、プリザンターの標準インターフェースで提供
- 社外ユーザー:フロントエンドはスクラッチで開発。プリザンターAPIでプリザンターと連携
ここで課題となったのが、社外ユーザーからのアクセスにおけるセキュリティリスクです。
具体的には以下の2点が懸念事項として挙げられました。
- プリザンターAPIの利用時に、APIキーが漏洩するリスクはないか?
- ID/パスワードのみの認証では不十分ではないか?
これらの課題に対し、以下の対策を実施しました。
セキュリティ対策のポイント
1. APIキーの隠蔽
外部ユーザーからのAPIキー漏洩を防ぐため、APIサーバを中継する構成を採用としました。
APIサーバには独自APIを設置し、フロントエンドは独自APIを通じてアクセス。APIサーバがプリザンターAPIと連携します。
これにより、外部から直接プリザンターのAPIキーを参照することができなくなり、APIキーの漏洩を防止します。
2. 多要素認証の導入
ID/パスワード認証だけでは不十分ではないかとの課題については、多要素認証を導入しました。
今回は「SMS認証」と「セキュリティキー」の利用を認証プロセスに追加しました。
- SMS認証:外部サービス(SMSLINK)を利用
- セキュリティキー:WebAuthnプロトコルを活用した認証
これにより、認証プロセスが二重、三重の防壁となり、不正アクセスのリスクを大幅に軽減します。
システム構成の全体像
システム構成の全体像を、もう少し詳しく見ていきます。
AWS(EC2:Amazon Linux2023)
今回は、Linux版でのプリザンター環境となります。
Linux版ではWebサーバとしてNginxが必須なので、ここにAPIサーバを立てています。
プリザンター
プリザンターへの直接アクセスは、IP制限で社内からのアクセスのみ許容としています。
また、認証サービスのHENNGEを介してSSOでのログインとなっています。
フロントエンド
使用言語はTypeScript(React)を採用。
APIサーバの独自APIにアクセスします。
APIサーバ
使用言語はPHP(Laravel)で構築しました。
データの登録・更新はプリザンターAPIを利用してアクセスし、データ参照はパフォーマンスを考慮してDBを直接参照する形としました。
APIサーバにはSMS認証、セキュリティキーの認証サーバ機能も有しています。
おわりに
外部から安全にアクセスしたいけどセキュリティが不安、というお悩みはありませんか?
今回ご紹介したAPIサーバの中継や多要素認証の導入以外にも、様々な方法はあるかと思いますが、要件に応じて柔軟に対応することが大切です。
本記事が、皆さんのシステム開発の参考になれば幸いです。ご質問やコメントがあれば、ぜひお寄せください!