投稿日

AWS 署名バージョン 4 (SigV4) 対応でSORACOM Beamでより多くのAWSサービスを呼出可能に!

皆様、こんにちは。ソリューションアーキテクトの松永(ニックネーム:taketo)です。

今回はデータ転送サービス「SORACOM Beam」(以下、Beam) の新しい機能についてご紹介します。
Beamの「Web サイトエントリポイント」および「HTTP エントリポイント」が、AWS署名バージョン4 (SigV4) に対応しました。これにより、デバイスに認証情報と SigV4 生成ロジックを持たずとも様々なAWSサービスを呼び出すことが可能になります。

詳しい実装方法は公式ドキュメントを参照ください。本ブログでは、そもそもAWS署名バージョン4とは何か?従来のSORACOMサービスと比べてどんなユースケースで利用が想定できるかご紹介します。

AWS 署名バージョン 4 対応によるアーキテクチャーの概要図

*連携先のサービスは代表的なサービスのみ記載。HTTPエンドポイントがあるAWSサービスでご利用可能です。

AWSの署名バージョン4(AWS Signature V4、SigV4)とは?

AWSの署名バージョン4にも記載されておりますが、HTTPリクエストをAWSサービスに行う際の認証情報です。HTTPのホスト名やアクセスパス、クエリ、ヘッダーなどの情報とIAMのアクセスキーを元に署名を作成し、それを認証情報としてリクエストに付加して送信します。

署名バージョン 4 (SigV4) は、HTTP で送信される AWS API リクエストに認証情報を追加するプロセスです。セキュリティのため、AWS へのほとんどのリクエストはアクセスキーで署名する必要があります。アクセスキーは、アクセスキー ID とシークレットアクセスキーで構成されます。これは通常、セキュリティ認証情報と呼ばれます。

今回、SORACOM Beamがデバイスから受け取ったデータを元にこの署名を作成し、設定されたAWSリソースへ転送します。これにより、例えば Amazon Simple Storage Service(Amazon S3)といった、これまでSORACOM Beamが直接の転送先として対応していなかったHTTPエンドポイントを持つAWSリソースに対して、デバイス側では認証情報と SigV4 の生成ロジックを持たずとも、セキュアにAWSリソースを呼び出すことが可能となります。

データ転送サービス「SORACOM Beam」

SORACOM Beamの利用メリット

SORACOM Beamについても改めてご紹介します。
SORACOM Beam は、IoT デバイスにおける暗号化等の高負荷処理、および接続先の設定をクラウドにオフロードできるサービスです。

通常クラウドサービスとの連携においては、暗号化やJSONフォーマットで送信するなどクラウド側の仕様に合わせてデバイス側を実装する必要があります。変化の激しいクラウドサービスに対して、デバイス側はファームウェアの更新ができない・バッテリー駆動など様々な制約があります。例えばこれらのクラウドとの直接的な通信により、デバイス側の消費電力があがりバッテリーの持ちが悪くなるなどデメリットも生じてしまいます。

これらの課題を解決するサービスがSORACOM Beamです。デバイスから送信されたデータを設定情報に基づき暗号化などセキュアなプロトコルへ変換し指定された転送先にデータ転送することができます。デバイスからはTLSなど暗号化が不要となり、先に述べた問題を解決できます。

今回のアップデートでAWSの様々なサービスにデータ転送する際にも、このメリットを享受できるということですね!

SORACOM Beam

SORACOM Beamの「Web サイトエントリポイント」と「HTTP エントリポイント」

今回のAWS署名バージョン4を利用できるのは、SORACOM Beamの中でも「Web サイトエントリポイント」と「HTTP エントリポイント」です。両者は指定されたホストへHTTPリクエストを転送するという機能です。

Web サイトエントリポイントは、デバイスからのパスパラメーターやクエリパラメーターをそのまま転送します。HTTPエントリポイントは、パスパラメーターやクエリパラメーターが削除されます。そのため、連携先のサービスでデバイスから送信されるクエリパラメーターなどが必要な場合は、「Web サイトエントリポイント」をご検討ください。一方、「HTTP エントリポイント」は複数作成ができるため、異なるエンドポイントへの振り分けが必要な時に利用できます。

それでは、早速いくつかのユースケースをご紹介致します。

ユースケースサンプル

1. Amazon S3へのファイルアップロード

従来は、SORACOMのサービスを利用して大きなファイルをアップロードする作業は、FaaS 呼び出しサービス「SORACOM Funk」経由ですとAWS Lambda(以下、Lambda)のPayload容量制限などもあり実現が難しいユースケースでした。

しかし、今回のアップデートによりファイルサイズを問わずデバイスからアップロードができるようになります。ここでご紹介したいのが、Amazon S3 のマルチパートアップロードという仕組みです。これはファイルを分割し並行してS3にアップロードする仕組みで、スループットやネットワーク障害によるアップロード中断からの復旧を考慮して効率的にファイルのアップロードができる仕組みです。AWSではS3へ100MB以上の大規模なファイルをアップロードする際には、スループットやリトライなど可能にするためこの仕組みを推奨しております。

実際に、約1.3GBのファイルを6MBごと10スレッドによる並行処理でアップロードしてみました。SIMの帯域は「8Mbps(s1.4xfast)」で送信したところ、約25分でアップロードができたことがわかります。サンプルプログラムはSORACOMのユーザードキュメントにも記載されておりますので、参考にしてください。

サンプルプログラムを実行している様子 / S3へ1.3GBのファイルをマルチパートアップロードで約25分でアップロード完了

2. 複数のAWS Lambda 呼び出し

SORACOM BeamのHTTPエントリポイントは複数作成することができ、アクセスパスごとに連携するLambdaを分けることができます。複数のLambdaを呼び出したい場合に便利ですね。「HTTPエントリポイント」でLambdaを利用する方法は、公式ドキュメント 「IAM 認証を利用して AWS Lambda にリクエストを送信する」に記載されておりますので是非ご確認ください。

AWS Lambda は2022年4月のアップデートで、Lambda自体が独自のHTTP エンドポイントを持つことができるようになりました。

3. その他のAWS サービスへの連携

ここまでLambdaとS3への連携についてご紹介致しました。SORACOMの公式ドキュメントにも2022年12月現在 S3とLambdaへの連携方法についてのみ記載しておりますが、AWSにはそれ以外にも様々なサービスがあるのはみなさまご存じだと思います。LambdaとS3以外にもHTTPのエンドポイントを持つサービスであれば今回のようにデバイスに認証情報を持たずともデータを送信することが可能です。是非、それ以外のサービスへの連携も試してみてください。

また、AWS SDKやCLIをお使いのお客様は下記のように、SORACOM Beamのエンドポイントに対してSSLを無効にし、signature_versionを`UNSIGNED`にすることでBeamに対してリクエストを送信することが可能です。デバイスからは認証情報を負荷せずともSORACOM Beamが認証情報を付加してサービスを呼び出すことができていることが読み取れますね。

import boto3
from boto3.s3.transfer import TransferConfig
from botocore import UNSIGNED
from botocore.config import Config

soracom_beam_endpoint = 'http://beam.soracom.io:18080'

s3_resource = boto3.resource('s3', use_ssl=False,
                                   endpoint_url=soracom_beam_endpoint,
                                   config=Config(signature_version=UNSIGNED))

さいごに

最後まで読んでいただき、有難う御座いました。今回のSORACOM Beamのアップデートで大幅に利用できるAWSサービスが多くなります。是非、ご利用ください!

― ソラコム松永 (taketo)