Soracom

Users

ドキュメント

IAM 認証を利用して AWS Lambda にリクエストを送信する

お客様の AWS アカウントにある AWS Lambda 関数へのアクセスを、Beam が動作する SORACOM の AWS アカウントにのみ許可できます。

Beam の HTTP エントリポイントを使用すると、以下のようなメリットがあります。

  • デバイスに AWS Lambda 関数にアクセスするための認証情報をインストールする必要がありません。

  • デバイスでは、以下のように Beam のエントリポイントにリクエストを送信するだけで、AWS Lambda 関数にアクセスできます。

    $ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \
    -H "Content-Type: application/json" \
    -d '{
      "key": "value"
    }'
    
    {
      "message": "Hello from Lambda!",
      "body": {
        "key": "value"
      }
    }
    
  • 1 つのグループ設定に複数の HTTP エントリポイントを設定できます。

HTTP エントリポイントを経由して AWS Lambda 関数にデータを送る場合は、転送可能なデータの最大値は 6 MiB です。

Beam を使用しないと AWS Lambda 関数へのアクセスは拒否されます

ここで説明するとおりに設定すると、Beam を使用しない限り AWS Lambda 関数にアクセスできません。

$ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \
-H "Content-Type: application/json" \
-d '{
  "key": "value"
}'
{"Message":"Forbidden"}

ステップ 1: AWS Lambda を設定する

Beam から呼び出す AWS Lambda 関数を作成します。

  1. AWS Lambda の 「関数の作成」画面 にアクセスします。

  2. [一から作成] をクリックし、以下の項目を設定します。

    項目説明
    [関数名]関数名を入力します。例: beam-hello-world
    [ランタイム]「Node.js xx.x」を選択します。
    [アーキテクチャ]「x86_64」を選択します。

    Beam は Lambda ランタイムには依存しません。任意の Lambda ランタイムの Function を利用できます。ここでは、手順 4 で入力するサンプルプログラムにあわせて「Node.js xx.x」を選択します。

  3. [詳細設定] をクリックし、[関数 URL を有効化] にチェックを入れて、[認証タイプ] で「AWS_IAM」が選択されていることを確認します。

  4. [関数の作成] をクリックします。

    関数が作成されます。

  5. [コードソース] の「index.mjs」をダブルクリックして、以下のサンプルプログラムが表示されていることを確認します。

    export const handler = async(event) => {
        const body = {
            "message": "Hello from Lambda!",
            "body": JSON.parse(event.body)
        }
           
        const response = {
            statusCode: 200,
            body: JSON.stringify(body),
        };
        return response;
    };
    
  6. [関数の概要] に表示されている [関数の ARN][関数 URL] の値をコピーします。

    [関数の ARN] は、これ以降、${lambda_func_arn} と表記します。例: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:beam-hello-world

    [関数 URL] は、これ以降、${lambda_func_url} と表記します。例: https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/

この時点では AWS Lambda の関数にはアクセスできません

この時点で、${lambda_func_url} にアクセスすると、以下のように表示されます。これは、[認証タイプ] で「AWS_IAM」を選択したためです。

$ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \
-H "Content-Type: application/json" \
-d '{
  "key": "value"
}'
{"Message":"Forbidden"}

ステップ 2: IAM ロールを作成して SORACOM の AWS アカウントに割り当てる

ステップ 1: AWS Lambda を設定する で作成した関数の実行を、Beam が動作する SORACOM の AWS アカウントに許可します。関数の実行を許可するための AWS IAM ロールを作成し、SORACOM の AWS アカウントに割り当てます。

  1. IAM コンソール にアクセスし、[アクセス管理][ロール] の順にクリックして、[ロールを作成] をクリックします。

  2. [AWS アカウント][別の AWS アカウント] の順にクリックし、[アカウント ID] に SORACOM の AWS アカウント ID を入力します。

    Beam が動作する SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。

    • 日本カバレッジ: 762707677580
    • グローバルカバレッジ: 950858143650

  3. [外部 ID を要求する] にチェックを入れ、[外部 ID] に任意の文字列を入力します。

    [外部 ID] に入力した文字列は、これ以降、${external_id} と表記します。例: External-ID-N4gqVwJMp7ZTVEgY

  4. [次へ] をクリックします。

    「許可を追加」画面が表示されます。

  5. [ポリシーを作成] をクリックします。

    別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。

    ここからは「ポリシーの作成」画面でポリシーを作成します

    「ポリシーの作成」画面の操作が終わったら、[ポリシーの作成] が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。

  6. 以下の項目を設定します。

    項目説明
    [サービス][サービスの選択] をクリックして、[Lambda] をクリックします。
    [アクション][フィルタアクション] に「InvokeFunctionUrl」と入力し、[InvokeFunctionUrl] にチェックを入れます。

  7. [リソース][指定][ARN の追加] の順にクリックします。

    「ARN の追加」画面が表示されます。

  8. [Lambda_function の ARN 設定] に、${lambda_func_arn} (例: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:beam-hello-world) を入力して、[追加] をクリックします。

    「ポリシーの作成」画面に戻ります。

  9. [次のステップ: タグ][次のステップ: 確認] の順にクリックします。

  10. [名前] に AWS IAM ポリシーの名前を入力し、[ポリシーの作成] をクリックします。

    AWS IAM ポリシーが作成され、ポリシー画面が表示されます。

  11. ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。

  12. [] をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。

    作成した AWS IAM ポリシーが表示されます。

  13. 作成した AWS IAM ポリシーにチェックを入れて、[次へ] をクリックします。

  14. [ロール名] に IAM ロールの名前を入力して、[ロールを作成] をクリックします。

    ロール画面に戻ります。

  15. 作成した IAM ロールの名前をクリックし、[ARN] をメモします。

    この ARN は、これ以降、${iam_role_arn} と表記します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role

ステップ 3: SORACOM Beam をセットアップする

IoT SIM を利用するデバイスから送信されたデータに応じて、Beam から AWS Lambda 関数を呼び出すための設定を、ユーザーコンソールで行います。

認証情報ストアに AWS IAM ロール認証情報を登録する

Beam から AWS Lambda 関数を呼び出すために、IAM ロールに関する認証情報を、ユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

項目説明
[認証情報 ID]認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-invokeFunctionUrl
[種別]「AWS IAM ロール認証情報」を選択します。
[ロール ARN]${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role
[外部 ID]${external_id} を入力します。例: External-ID-N4gqVwJMp7ZTVEgY

credential registration credential registration

Beam の HTTP エントリポイントを設定する

Beam の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Beam 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. [+設定を追加する][HTTP エントリポイント] の順にクリックします。

    SORACOM Beam - HTTP 設定画面が表示されます。

  3. 以下のように設定します。

    項目説明
    [設定名]任意の設定名 (例: AWS Lambda) を入力します。
    [エントリポイント][パス]

    /lambda-with-signature-v4 を入力します。

    1 つのグループ設定に複数のエントリポイントを設定できます
    [エントリポイント][パス] の内容で HTTP エントリポイントが識別されます。HTTP エントリポイントごとに設定を変更すると、1 つのグループ設定に複数のエントリポイントを設定できます。
    [転送先][プロトコル]「HTTPS」を選択します。
    [転送先][ホスト名]${lambda_func_url} から、先頭の「https://」および末尾の「/」を取り除いた文字列を入力します (例: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws)。
    [転送先][ポート番号]空欄のままにします。
    [転送先][パス]空欄のままにします。
    [ヘッダ操作][AUTHORIZATION ヘッダ]

    オンにして、以下のように設定します。

    HTTP エントリポイント HTTP エントリポイント
    HTTP エントリポイント HTTP エントリポイント

    HTTP エントリポイントの設定値の意味は、HTTP エントリポイント を参照してください。

  4. [保存] をクリックします。

  5. IoT SIM が所属するグループを切り替えます。

    IoT SIM の Beam の設定が完了しました。

ここでは、HTTP エントリポイントを利用しましたが、Web サイトエントリポイント でも [AUTHORIZATION ヘッダ] を利用できます。

ステップ 4: HTTP エントリポイントを使用して AWS Lambda 関数を呼び出す

Beam の HTTP エントリポイントを使用して、AWS Lambda 関数を呼び出します。

  1. IoT SIM を利用するデバイスで、以下のコマンドを実行します。

    $ curl -X POST http://beam.soracom.io:8888/lambda-with-signature-v4 \
    -H "Content-Type: application/json" \
    -d '{
      "key": "value"
    }'
    
    {
      "message": "Hello from Lambda!",
      "body": {
        "key": "value"
      }
    }
    

    続けて、AWS Lambda 関数 URL にアクセスしても、引き続きアクセスできないことを確認します。

  2. IoT SIM を利用するデバイスで、以下のコマンドを実行します。

    $ curl -X POST https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.lambda-url.ap-northeast-1.on.aws/ \
    -H "Content-Type: application/json" \
    -d '{
      "key": "value"
    }'
    
    {"Message":"Forbidden"}