Mais conteúdo relacionado Semelhante a FIWARE IoTデバイスを保護する方法 (20) FIWARE IoTデバイスを保護する方法1. FIWARE IoTデバイスを保護する方法
(How to Secure FIWARE IoT Devices)
Jason Fox, Senior Technical Evangelist
FIWARE Foundation
Translated to Japanese by Kazuhito Suda, FIWARE Evangelist
3. 前提条件
▪ Docker
▪ Docker Compose
▪ Git
▪ Postman
▪ Cygwin for Windows
2
git clone https://github.com/FIWARE/tutorials.Step-
by-Step.git
cd tutorials.Step-by-Step/
git submodule update --init --recursive
▪ https://www.docker.com/
▪ https://docs.docker.com/compose/install/
▪ https://git-scm.com/downloads
▪ https://www.getpostman.com/downloads/
▪ https://www.cygwin.com/install.html
4. FIWARE Catalogue
33
Data/APIManagement
PublicationMonetization
Core Context Management
(Context Broker)
Context
Processing, Analysis, Visualization
Interface to
IoT, Robotics and third party systems
Deploymenttools
3
Development of
Context-aware applications
(Orion, Orion-LD, Scorpio,
STH-Comet, Cygnus,
QuantumLeap, Draco)
Connection to the
Internet of Things
(IDAS, OpenMTC)
Real-time
processing of
context events
(Perseo)
Handling authorization
and access control to
APIs
(Keyrock, Wilma,
AuthZForce, APInf )
Publication and
Monetization of Context
Information
(CKAN extensions, Data/API
Biz Framework, IDRA)
Creation of
Application Dashboards
(Wirecloud)
Real-time
Processing of media
streams
(Kurento)
Business Intelligence
(Knowage)
Connection to robots
(FIROS, Fast RTPS,Micro XRCE-DDS)
Big Data
Context Analysis
(Cosmos)
Cloud Edge
(FogFlow)
Documents exchange
(Domibus)
5. 復習 – HTTP マイクロサービスの保護
4
PEP Proxy を使用した安全なサービス
● 承認された HTTP トラフィックのみを許可
するには、クライアント・アプリケーション
(スーパーマーケット・アプリなど) と
Context Broker の間にセキュリティ・
コンポーネントを挿入する必要があります
● ユーザ・アカウントを提供し、パスワードを
確認するには、Identity Manager が必要で
す
安全でない HTTP トラフィックをブロックするよ
うに Web server を設定します
● 301 - Moved Permanently に転送命令を含
めます
● 詳細情報 : https://www.digicert.com/ssl/
6. HTTPS の構成例 : NGINX
▪ ドメイン証明書を作成する必要があります
• 信頼の連鎖 - あなたは(一連の)プロバイダによっ
て承認されています
▪ 秘密鍵を提供する必要があります
▪ 多くのチュートリアル - 詳細は使用する
Webサーバに依存します
• 例 Digital Ocean: Let‘s Encryptで Nginx を
保護する方法
• https://www.digitalocean.com/community
/tutorial_collections/22
5
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
7. PEP Proxy 構成の例 : Wilma
▪ どこでリッスンしていますか?
• PEP_PROXY_PORT
▪ 何を保護していますか? どこに転送しますか?
• PEP_PROXY_APP_HOST, PEP_PROXY_APP_PORT
▪ 誰がアクセス・トークンをチェックする責任がありますか?
• PEP_PROXY_IDM_PORT, PEP_PROXY_IDM_HOST
▪ IDM はどのように私を認識しますか?
• PEP_PROXY_APP_ID, PEP_PROXY_USERNAME,PEP_PASSWORD
詳細情報 : https://hub.docker.com/r/fiware/pep-proxy
6
8. HTTP トラフィックの保護: IoT デバイス
7
● デバイスは HTTP を使用して通信するため、クライア
ント・アプリケーション(デバイスなど)と IoT Agent の
間に PEP proxy を含めることができます
● ユーザ・アカウントを提供し、パスワードを確認するに
は、 Identity Manager が必要です
● PEP Proxy は、次の設定を使用して定義されます:
○ PEP_PROXY_APP_HOST
○ PEP_PROXY_APP_PORT
○ PEP_PROXY_PORT
● もちろん以前に示したように、HTTPS を使用して
マイクロサービス間の通信を保護することもできます
マイクロサービスのユースケースと同様の設定ですが、
現在、各 IoT device はそれ自体が(制限された)ユーザです
● DUMMY_DEVICES_USER, DUMMY_DEVICES_PASSWORD
9. HTTPトラフィックの保護: IoT Agent
8
IoT Agent が (制限された) ユーザになりました - Context broker と
IoT Agent の間のトラフィックが保護されます
● 永続的なトークンを保持する追加の信頼属性 (trust attribute) を使用してデバイスを
プロビジョニングします
● HTTPS も必要になる場合があります。これは、使用するアーキテクチャと、 IoT devices が IoT Agent
と通信するプロトコルによって異なります
curl -iX POST
'http://localhost:4041/iot/services'
-H 'Content-Type: application/json'
-H 'fiware-service: openiot'
-H 'fiware-servicepath: /'
-d '{
"services": [ {
"apikey": "4jggokgpepnvsb2uv4s40d59ov",
"cbroker": "http://orion:1026",
"entity_type": "Motion",
"resource": "/iot/d",
"trust": "e37aeef5d48c9c1a3d4adf72626a8745918d4355"
} ]
}'
10. MQTTトラフィックの保護: IoT デバイス
9
MQTT 接続でユーザ名とパスワードを入力します
MQTTブローカーのユーザ名/パスワードのハッシュ・ファイルを
作成します 例: /etc/mosquitto/passwd
例. Hackaday の例: https://hackaday.io/project/12482-
garage-door-opener/log/43367-using-a-username-and-
password-for-mqtt
● IOTA_MQTT_USERNAME,IOTA_MQTT_PASSWORD
MQTT over SSL を使用します
証明書を作成し、MQTT ブローカーを適切に設定する必要があります
例. ThingsBoard ドキュメント: https://thingsboard.io/docs/user-guide/mqtt-over-ssl/
● IOTA_MQTT_CA, IOTA_MQTT_CERT, IOTA_MQTT_KEY
11. 安全な MQTT を使用して IoT デバイスを接続する方法
10
const mqtt = require('mqtt');
const options = {
protocol: 'mqtt',
host: 'localhost',
port: 1883,
key: <key>,
ca: <certificate-authority>,
cert: <certificate>,
rejectUnauthorized: true,
username: <device-username>,
password: <device-password>,
keepalive: 0,
connectTimeout: 60 * 60 * 1000
};
const mqttClient = mqtt.connect(
options.protocol + '://' + <host> + ':' + <port>,
options
);
IoT Agent と IoT デバイスの両方が同じ方法で
MQTT ブローカーに接続します
豊富な MQTT クライアントライブラリが利用可能
● https://github.com/mqtt/mqtt.github.io/wiki/libraries
IoT Agent は共通の Node.js ライブラリを使用します
● https://github.com/mqttjs/MQTT.js
詳細については :
● http://mqtt.org/
12. サマリ: FIWARE ベースのシステムの保護
▪ 製品とデータの整合性を確保するための安全なシステムが必要です:
• 信頼できる読み取りだけを受け入れます
• 認識できるユーザにのみデータを提供します
▪ システムを保護するための最初のステップ:
• アクターを特定するために可能な限りユーザ名とパスワードを使用します
• SSLを使用します - メッセージと構成でプレーン・テキストを使用してはいけません
• ユーザ・アクセスを最小限に抑えます (例: root アクセス、開いているポートなし)
• すべてをログに記録します
▪ データのゲートキーパーとして機能する PEP Proxy を使用します
▪ FIWARE はシステムの保護に役立つ一連のコンポーネントを提供します
• FIWARE カタログのコンポーネントの使用は必須ではありませんが、それらを使用するか、
同等に安全な代替手段を使用する必要があります
11