SORACOM Developers

Getting Started

SORACOM Junctionのインスペクション機能を使用して、VPGを通過するパケットの統計情報を可視化する

当ガイドでは、SORACOM Junction(以下、Junction)のインスペクション機能で出力される統計情報をもとに、VPGを通過するパケットを可視化します。

SORACOM Junctionとは

「SORACOM Junction」(以下、Junction)とは、Virtual Private Gateway (以下、VPG)を通るパケットに対して、ミラーリング、リダイレクション、 インスペクションの3つの機能を提供するサービスです。VPG については、Virtual Private Gateway (VPG) 機能詳細も合わせてご確認ください。

Junction の提供する3つの機能

ミラーリング

ミラーリング機能では、VPGを通過するパケットのコピーを指定の宛先に送信します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。デバイスはインターネットにアクセスしていますが、パケットのコピーが指定の宛先(ここでは、Customer VPC/お客様のシステム)に送信されます

ミラーリング

リダイレクション

リダイレクション機能は、VPGを通過するユーザーパケットがお客様が指定したサーバを経由するように経路を変更して転送します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。インターネットにアクセスしようとするデバイスからのパケットは指定の宛先(ここでは、Customer VPC/お客様のシステム)に転送されます。転送後のルーティングは、Customer VPC/お客様のシステムで行います。 なお、当機能は、Gateの使用が必要となりますリダイレクションのパケット転送先は、Gate Peerとなります。

リダイレクション

インスペクション

インスペクション機能は、VPGを通過するパケットを解析し、アプリケーションの判別といったVPGを通るパケットの統計情報を提供します。 以下の図は、AirSIMを使用したデバイスがVPGを経由して、インターネットにアクセスしている例です。デバイスはインターネットにアクセスします。 VPGを通るパケットの統計情報が指定の宛先(ここでは、Customer VPC/お客様のシステム)に転送されます。VPGを通るパケットの統計情報、フォーマットの詳細は「インスペクションで送られるパケットの統計情報サンプル」を参照してください。

インスペクション

当ガイドでは、インスペクション機能を使用して、統計情報を可視化します。

Junctionのインスペクション機能を使用して、VPGを通過するパケットの統計情報を可視化する

インスペクション機能で出力されるパケットの統計情報を Amazon Kinesis Stream(Kinesis Stream) に送信します。さらに、Kinesis Stream をサブスクライブする AWS Lambda(Lambda) が Elastic Cloud にデータを送信します。Elastic Cloud の Elasticsearch、Kibana で統計情報を可視化します。

概要

事前に以下を準備します。

なお、Lambdaファンクションは、サンプルのスクリプトを提供いたします。Kibana で使用する Dashboard および Visualization は、Elastic社様からサンプルを提供いただきましたので、これを使用します。

Elastic Cloud の設定

Elastic Cloud を設定します。

概要

Elastic Cloud とは、Elastic社が提供する Elasticsearch と Kibana のマネージドサービスです。

まだアカウントをお持ちでなければ、 こちらから Elastic Cloud のアカウントを作成します。(14日間の無料トライアルが利用できます。)

クラスタの作成

ユーザー登録後、ログインして、「Create Cluster」をクリックします。 クラスタ作成の画面に遷移するので、「Tokyo Region」を選択し、残りはデフォルトで作成してください。

Elastic Cloud

完了すると、最初にクラスタを操作するための「elastic」ユーザのパスワードが表示されます。後ほど使用しますので、メモしておいてください。

次に、メニューの「Configuration」から、Kibanaを「enable」にしてください。

「Please wait until the current plan is finished before enabling Kibana.」 が表示される場合は、しばらくお待ち下さい。

Elastic Cloud

アクセスの確認

Elastic Cloud

Elastic Cloud

インデックスの作成とドキュメントの登録

データを投入する前に、インデックスのテンプレートを登録します。

$ curl --user elastic:ES_PASSWORD -X PUT "https://xxxxxxxxxxxxxxxxxx.ap-northeast-1.aws.found.io:9243/_template/soracom-vpg" -d@/Users/xxx/elastic/soracom-realtime-vpg-metrics-template.json

{“acknowledged”:true} とレスポンスがあれば成功です。

以上で、Elastic Cloudの設定は完了です。

Kinesis Stream の作成

インスペクションからのデータ送信先となる Kinesis Stream を作成します。

概要

Kinesis Stream の作成

Kinesis Stream の作成

Kinesis Stream の作成

Kinesis Stream の作成

Kinesis ストリームの作成は以上です。

IAMの作成

ここでは、IAMユーザーとロールを作成します。 作成するIAMユーザーは、Kinesisストリームへのインプットを行います。このユーザーのクレデンシャルを SORACOM Junction の設定で使用します。

ロールは、このあと作成する Lambda ファンクションを実行するロールとして使用します。

ユーザーの作成

AWSコンソールの「IAM」からユーザーを選択して、「ユーザーを追加」をクリックします。 ユーザーの作成

ユーザー名は「kinesis」とします。

ユーザーの作成

「プログラムによるアクセス」を選択します。

ユーザーの作成

ポリシーでは、「既存のポリシーを直接アタッチ」を選択して、「AmazonKinesisFullAccess」を選択します。

ユーザーの作成

内容を確認して、「ユーザーの作成」をクリックします。 ユーザーの作成

以下の画面がでると成功です。 のちほど、Junctionのインスペクション機能で使用するため、アクセスキーIDとシークレットアクセスキーをメモしておいてください。 ユーザーの作成

ロールの作成

AWSコンソールの「IAM」からロールを選択して、「新しいロールの作成」をクリックします。

Role の作成

ロールタイプでは、「AWS Lambda」を選択します。

Role の作成

ポリシーでは、「AWSLambdaKinesisExecutionRole」をアタッチします。

Role の作成

ロール名に、ここでは「 lambda_kinesis_execution 」として、ロールを作成します。 Role の作成

以上で、ユーザーとロールの作成は完了です。

Lambda の作成

次に Lambda を作成します。

概要

AWSコンソールから AWS Lambda の管理画面にアクセスします。 「Lambda 関数の作成」をクリックします。 Lambda の作成

「Blank Function」をクリックします。 Lambda の作成

トリガーの設定では、「Kinesis」を選択して、Kinesis ストリームでは、さきほど作成した「junction-inspection-escloud」を選択します。「トリガーの有効化」にチェックをつけてください。 Lambda の作成

Lambda関数は、こちらからダウンロードしたスクリプトをコピー&ペーストしてください。 ランタイムでは、「Python 3.6」を選択します。

Lambda の作成

次に、環境変数を入力します。 以下のように、5つの環境変数を入力してください。

環境変数名
ESBASEURL ElasticsearchのEndpointになります。Elactic Cloud のクラスタのトップページにある「Endpoints」の「HTTPS」のリンクです。 URLの最後の / は削除してください。
ES_USERNAME Elastic CloudのユーザーIDです。当ガイドでは「elastic」となります。
ES_PASSWORD ユーザー「elastic」のパスワードです。
ES_INDEX インデックス名です。ここでは、「soracom」としてください。(Lambdaファンクションがsoracom-YYYY.MM.DD としてデータを送信します。)
ES_TYPE 「stats」とします。

ロールでは、さきほど作成した「 lamdba_kinesis_execution 」を選択します。

Lambda の作成

タイムアウトを1分にします。

Lambda の作成

設定内容を確認して「関数の作成」をクリックします。 Lambda の作成

以下の画面が表示されれば作成完了です。 Lambda の作成

インスペクションの設定

次に、Junction のインスペクション機能を設定します。 以下のような流れとなります。

VPGの作成

SORACOM のユーザーコンソールにログインします。 画面左上部のプルダウンメニューから「VPG」を選択します。

「VPG を追加」をクリックします。

VPG の名前を入力し、対象サービスとして、ここでは「Canal」を選択します。 「作成」をクリックすると、「状態」が「作成中」となります。しばらく(3分程度)して、「実行中」となれば作成完了です。

グループの作成と SIM の所属グループの変更

SORACOM ユーザーコンソールの左上のプルダウンメニューより「グループ」を選択します。

「追加」をクリックして、グループ名を入力し、グループを作成します。 作成したグループをクリックしグループ画面の「基本設定」から「SORACOM Air 設定」を開きます。

「SORACOM Air 設定」内に、以下のように「VPG (Virtual Private Gateway) 設定」があるので、「ON」とし、先ほど作成した「VPG」を選択します。

「保存」をクリックします。

VPG を指定したグループに含まれる Air SIM は VPG を利用することになります。

次に、Air SIM をグループに所属させます。「SIM 管理」メニューから、接続を行う SIM を選択し、「所属グループ変更」をクリックします。

先ほど作成したグループに所属させます。

注意

クレデンシャルの登録

次に、インスペクション機能で統計情報の送信先の Kinesis Stream のクレデンシャルを登録します。 ソラコムのユーザーコンソールから「セキュリティ」->「認証情報ストア」を選択します。

クレデンシャルの作成

以下のように、先ほど、AWS の IAM から作成したユーザーのクレデンシャルを登録します。 アクセスキーIDとシークレットアクセスキー登録します。 ここでは、「kinesis」という認証情報IDで登録します。

クレデンシャルの作成

インスペクション機能を設定

作成したVPGの設定画面を開きます。 「Junction 設定」タブを開きます。

インスペクションを「ON」にして、以下の情報を入力します。

設定
転送先サービス Amazon Kinesis Stream
転送先URL https://kinesis.ap-northeast-1.amazonaws.com/junction-inspection-escloud
https://kinesis.<region>.amazonaws.com/<delivery stream name>となります。ここでは、Kinesis Stream名は「junction-inspection-escloud」です。
認証情報 kinesis
さきほど作成したクレデンシャルとなります。

インスペクションの設定

VPGを通過するパケットの統計情報を可視化する

では、作成した VPG を適用した Air SIM グループに含まれる SIM で通信します。

インデックスパターンの作成

インスペクションの設定

インデックスパターンはデータの投入後に作成します。先にデータを投入してください。

ダッシュボードのインポート

Kibana のダッシュボードをインポートします。

Elastic Cloud

統計情報を可視化する

Elastic Cloud の Kibana にアクセスします。「Dashboard」->「Soracom」をクリックします。

Kibana dashboard

以下のように、通信先のプロトコルやアプリケーション、データ通信量やパケット数などを確認することができます。インスペクション機能によるパケットの統計情報を可視化しています。

Kibana dashboard

「VPGを通過するパケットの統計情報を可視化する」は以上となります。

ElasticCloudについては、当社ではサポートできかねますので、ご了承のほどお願いいたします。

<参考>インスペクションで送られるパケットの統計情報のサンプル

パケットの統計情報は以下のようなフォーマットとなります。

{
  "timestamp": "1498543774579",
  "payloads": {
  "traffic.statistics": {
    "pkt.len_64_128": 13,
    "pkt.len_min64": 527,
    "max.pkt.size": 1358,
    "fragmented.pkts": 0,
    "pppoe.pkts": 0,
    "avg.pkt.size": 125,
    "unique.flows": 131,
    "tcp.pkts": 482,
    "pkt.len_128_256": 10,
    "pkt.len_256_1024": 9,
    "pkt.len_1024_1500": 2,
    "pkt.len_grt1500": 0,
    "guessed.flow.protos": 68,
    "ip.bytes": 70355,
    "total.packets": 561,
    "ip.packets": 561,
    "discarded.bytes": 0,
    "ethernet.bytes": 83819,
    "udp.pkts": 78,
    "vlan.pkts": 0,
    "mpls.pkts": 0
  },
  "detected.protos": [
    {
      "name": "DNS",
      "breed": "Acceptable",
      "packets": 16,
      "bytes": 3685,
      "flows": 8
    },
    {
      "name": "HTTP",
      "breed": "Acceptable",
      "packets": 90,
      "bytes": 10260,
      "flows": 10
    },
    {
      "name": "SSL",
      "breed": "Safe",
      "packets": 99,
      "bytes": 11258,
      "flows": 15
    },
    {
      "name": "Slack",
      "breed": "Acceptable",
      "packets": 8,
      "bytes": 1584,
      "flows": 4
    },
    {
      "name": "Facebook",
      "breed": "Fun",
      "packets": 3,
      "bytes": 386,
      "flows": 2
    },
    {
      "name": "Dropbox",
      "breed": "Acceptable",
      "packets": 21,
      "bytes": 2426,
      "flows": 6
    },
    {
      "name": "Skype",
      "breed": "Acceptable",
      "packets": 2,
      "bytes": 232,
      "flows": 1
    },
    {
      "name": "Google",
      "breed": "Acceptable",
      "packets": 69,
      "bytes": 11043,
      "flows": 24
    },
    {
      "name": "Apple",
      "breed": "Acceptable",
      "packets": 98,
      "bytes": 12065,
      "flows": 29
    },
    {
      "name": "Amazon",
      "breed": "Acceptable",
      "packets": 63,
      "bytes": 7636,
      "flows": 23
    }
  ],
  "known.flows": [],
  "@timestamp": "20170627T060934Z"
},
  "opeartorId": "OP00XXXXXXXX",
  "destination": {
  "resourceUrl": "https://kinesis.ap-northeast.amazonaws.com/stream",
  "service": "kinesis",
  "provider": "aws"
},
  "sourceProtocol": "null",
  "credentialsId": "my-aws-credentials"
}

はじめに

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal

SORACOM Endorse

SORACOM Funnel

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

pagetop