API Gatewayで機密データの漏洩を防ぐ方法

Wei Liu

March 3, 2023

Technology

なぜ機密データを保護する必要があるのか

機密データ、または機密情報とも呼ばれるデータは、主に漏洩した場合に企業、政府、個人に大きな問題を引き起こす可能性のあるデータを指します。これには、ビジネス運営データや個人識別情報などが含まれますが、これらに限定されません。

企業にとって、機密データは企業の情報セキュリティに直接関連しています。例えば、キーや証明書などの機密情報が漏洩すると、組織の評判に壊滅的な影響を与え、財務的損失を招き、さらには法的責任を負うことさえあります。

個人にとって、機密データの漏洩は、社会保障番号から銀行情報まで全てを暴露する可能性があります。あなたの身元を盗まれると、広告による嫌がらせを受けたり、信用を失ったり、法的問題に巻き込まれたり、あなたの名義でさまざまな詐欺行為が行われる可能性があります。

APIゲートウェイに含まれる機密データの種類

ビジネストラフィックの入り口として、APIゲートウェイには多くの機密データが含まれることがよくあります。例えば、APIキーや認証に使用されるトークンなどです。そのため、基本的な負荷分散やトラフィックルーティング機能に加えて、セキュリティを向上させ、機密データの漏洩を防ぐこともAPIゲートウェイの重要な側面です。

機密データ

APIゲートウェイが機密データを保護する方法

一般的な考え方は以下の通りです:

  1. 機密データを保護された領域に配置し、アクセス権を厳密に制御する

  2. リスク管理システムを改善し、異常な行動やビジネスコンプライアンスのリスクを管理する

  3. 機密データを非表示化または暗号化する

次に、Apache APISIXを例に、APIゲートウェイで機密データを保護する方法を紹介します。

Apache APISIXの機密データ保護の実践

Apache APISIXはApache Software Foundationのオープンソースプロジェクトであり、現在最も活発なオープンソースゲートウェイプロジェクトです。完全に動的でリアルタイム、高性能なオープンソースAPIゲートウェイとして、Apache APISIXは負荷分散、動的なアップストリーム、カナリアリリース、サーキットブレーカー、認証、可観測性などの豊富なトラフィック管理機能を提供します。

さらに、ユーザーは独自のプラグインを書くことでApache APISIXの機能をカスタマイズできます。活発なコミュニティと増え続ける開発者に支えられ、Apache APISIXのプラグインの数は日々増えていますが、その中には機密情報を含むものもあります。例えば、jwt-authプラグインの設定であるsecretprivate_keyなどです。これらのデータが不正に取得されるのを防ぐために、暗号化されたストレージを使用する必要があります。

APISIXのセキュリティを強化し、ユーザーのプライバシーをよりよく保護するために、APISIXはバージョン3.1.0でGlobal Data Encryption機能を導入しました。開発者がこの機能を使用して新しいプラグインを開発する場合、開発者はスキーマで暗号化するデータを指定するだけで、APISIXはコントロールプレーンに書き込む際に自動的に暗号化して保存し、データプレーンが読み取る際に自動的に復号化します。

グローバルデータ暗号化

具体的な例を見てみましょう。

データ暗号化が有効でない場合

  1. 設定を送信
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
     "username": "foo",
     "plugins": {
         "basic-auth": {
             "username": "foo",
             "password": "bar"
         }
     }
}'
  1. etcd内の機密データの状態
etcdctl get /apisix/consumers/foo
{"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}} }

passwordフィールドが平文で保存されており、簡単に漏洩する可能性があります

データ暗号化が有効な場合

  1. config.yamldata_encryptionを有効にする:
apisix:
     data_encryption:
     enable: true
     keyring:
         -edd1c9f0985e76a2
  1. データ暗号化をサポートするプラグインを有効にする。ここではbasic-authを例にします
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
     "username": "foo",
     "plugins": {
         "basic-auth": {
             "username": "foo",
             "password": "bar"
         }
     }
}'
  1. プラグインをテスト
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
     "methods": ["GET"],
     "uri": "/get",
     "plugins": {
         "basic-auth": {}
     },
     "upstream": {
         "type": "roundrobin",
         "nodes": {
             "httpbin.org": 1
         }
     }
}'

アクセス成功

curl -i -ufoo:bar http://127.0.0.1:9080/get
HTTP/1.1 200 OK
...

アクセス失敗、パスワードエラー

curl -i -ufoo:test http://127.0.0.1:9080/get
HTTP/1.1 401 Unauthorized
...
{"message":"Invalid user authorization"}

プラグインは正常に機能しています

  1. etcd内の機密データの状態
etcdctl get /apisix/consumers/foo
{"create_time":1674009211,"update_time":1674009211,"plugins":{"basic-auth":{"password":"+kOEVUuRc5rC5ZwvvAMLwg=","username":"foo"}},"username": "foo"}

passwordフィールドが正常に暗号化されていることがわかります。データが漏洩しても、ハッカーはそれを利用できません。

まとめ

APIゲートウェイには多くの機密データが含まれるため、データを保護するための効果的な対策を講じる必要があります。この記事では、APISIXを例に、Global Data Encryption機能を使用して機密データを保護し、平文で保存される機密データを防ぐ方法を紹介しました。これにより、etcdに保存されているすべてのデータが漏洩しても、機密データの漏洩を引き起こさず、APISIXのセキュリティを効果的に向上させることができます。

同時に、機密データを暗号化するだけでなく、APISIXは機密情報を直接サードパーティサービスに配置することもサポートしています。つまり、Secret Managerを使用することで、さらにセキュリティを向上させることができます。

この記事が、APIゲートウェイで機密データを保護し、ビジネスにおける情報セキュリティを確保する方法について理解を深めるのに役立つことを願っています。

Tags: