18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

プリザンターを基盤としたシステムに、外部からアクセスしたい!
でも、セキュリティが心配・・・そんな声は少なくないのではないでしょうか。

外部ユーザがプリザンターを基盤としたシステムにアクセスする際、セキュリティは最重要課題の一つです。
今回は、私たちが行ったセキュリティ強化の取り組みについてご紹介します。

本記事は、プリザンターを基盤としたシステムに外部アクセスを提供する際のセキュリティ対策に焦点を当てています。

システム要件の背景

今回ご紹介するシステム構成は、以下のシステム要件を満たすために設計されました。

  • プリザンターを基盤とした業務基幹システム
  • 社内ユーザー社外ユーザーの両方からアクセス可能なシステム
    • 社内ユーザー:社内ネットワークでのIP制限およびSSOを使用し、プリザンターの標準インターフェースで提供
    • 社外ユーザー:フロントエンドはスクラッチで開発。プリザンターAPIでプリザンターと連携

kouseizu_1.png

ここで課題となったのが、社外ユーザーからのアクセスにおけるセキュリティリスクです。
具体的には以下の2点が懸念事項として挙げられました。

  1. プリザンターAPIの利用時に、APIキーが漏洩するリスクはないか?
  2. ID/パスワードのみの認証では不十分ではないか?

これらの課題に対し、以下の対策を実施しました。

セキュリティ対策のポイント

1. APIキーの隠蔽

外部ユーザーからのAPIキー漏洩を防ぐため、APIサーバを中継する構成を採用としました。
APIサーバには独自APIを設置し、フロントエンドは独自APIを通じてアクセス。APIサーバがプリザンターAPIと連携します。

kouseizu_2.png

これにより、外部から直接プリザンターのAPIキーを参照することができなくなり、APIキーの漏洩を防止します。

2. 多要素認証の導入

ID/パスワード認証だけでは不十分ではないかとの課題については、多要素認証を導入しました。
今回は「SMS認証」と「セキュリティキー」の利用を認証プロセスに追加しました。

kouseizu_3.png

これにより、認証プロセスが二重、三重の防壁となり、不正アクセスのリスクを大幅に軽減します。

システム構成の全体像

システム構成の全体像を、もう少し詳しく見ていきます。

kouseizu_4.png

AWS(EC2:Amazon Linux2023)

 今回は、Linux版でのプリザンター環境となります。
 Linux版ではWebサーバとしてNginxが必須なので、ここにAPIサーバを立てています。

プリザンター

 プリザンターへの直接アクセスは、IP制限で社内からのアクセスのみ許容としています。
 また、認証サービスのHENNGEを介してSSOでのログインとなっています。

フロントエンド

 使用言語はTypeScript(React)を採用。
 APIサーバの独自APIにアクセスします。

APIサーバ

 使用言語はPHP(Laravel)で構築しました。
 データの登録・更新はプリザンターAPIを利用してアクセスし、データ参照はパフォーマンスを考慮してDBを直接参照する形としました。
 APIサーバにはSMS認証、セキュリティキーの認証サーバ機能も有しています。

おわりに

外部から安全にアクセスしたいけどセキュリティが不安、というお悩みはありませんか?
今回ご紹介したAPIサーバの中継や多要素認証の導入以外にも、様々な方法はあるかと思いますが、要件に応じて柔軟に対応することが大切です。

本記事が、皆さんのシステム開発の参考になれば幸いです。ご質問やコメントがあれば、ぜひお寄せください!

18
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?