チュートリアル: AWS IoT Core のカスタムオーソライザーの作成 - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: AWS IoT Core のカスタムオーソライザーの作成

このチュートリアルでは、 AWS CLI を使用してカスタム認証を作成、検証、使用する手順を示します。オプションで、このチュートリアルを使用して、HTTP Publish API を使用して AWS IoT Core にデータを送信するために Postman を使用できます。

このチュートリアルでは、トークン署名が有効な create-authorizer 呼び出しを使用して、承認および認証ロジックとカスタムオーソライザーを実装するサンプル Lambda 関数を作成する方法を示します。その後、オーソライザーは を使用して検証されtest-invoke-authorizer、最後に HTTP Publish API AWS IoT Core を使用してテスト MQTT トピックにデータを送信できます。サンプルリクエストは、 x-amz-customauthorizer-nameヘッダーを使用して呼び出すオーソライザーを指定し、リクエストヘッダーx-amz-customauthorizer-signatureで token-key-name と を渡します。

このチュートリアルでは、次の内容を学習します。
  • カスタムオーソライザーハンドラーとなる Lambda 関数を作成する方法

  • トークン署名を有効に AWS CLI して を使用してカスタムオーソライザーを作成する方法

  • test-invoke-authorizer コマンドを使用してカスタムオーソライザーをテストする方法

  • Postman を使用して MQTT トピックを発行し、カスタムオーソライザーでリクエストを検証する方法

このチュートリアルの完了には 60 分ほどかかります。

このチュートリアルを開始する前に、以下の要件を満たしていることを確認してください。
  • 以下をセットアップします。 AWS アカウント

    このチュートリアルを完了するには、 AWS アカウント と AWS IoT コンソールが必要です。

    このチュートリアルで使用するアカウントは、少なくとも次の AWS マネージドポリシーが含まれている場合に最適に機能します。

    重要

    このチュートリアルで使用される IAM ポリシーは、本稼働環境で従うべきものよりも許容度が高いです。本稼働環境で、アカウントポリシーとリソースポリシーが必要なアクセス許可のみを付与していることを確認します。

    本稼働用の IAM ポリシーを作成する場合は、ユーザーとロールに必要なアクセスを判断し、次にそれらのタスクのみの実行を許可するポリシーを設計します。

    詳細については、IAM のセキュリティのベストプラクティスを参照してください。

  • をインストールしました AWS CLI

    をインストールする方法については AWS CLI、「 AWS CLI のインストール」を参照してください。このチュートリアルでは、 AWS CLI バージョン aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 以降が必要です。

  • OpenSSL ツール

    このチュートリアルの例では、LibreSSL 2.6.5 を使用しています。このチュートリアルでは、OpenSSL v1.1.1i ツールを使用することもできます。

  • AWS Lambda の概要」を確認します。

    AWS Lambda を使用したことがない場合は、AWS Lambda「」と「Lambda の開始方法」を確認して、その用語と概念を確認してください。

  • Postman でリクエストを作成する方法を見直しました

    詳細については、「リクエストのビルド」を参照してください。

  • 以前のチュートリアルからカスタムオーソライザーを削除しました

    一度に設定 AWS アカウント できるカスタムオーソライザーの数は限られています。カスタムオーソライザーの削除方法の詳細については、ステップ 8: クリーンアップする を参照してください。

ステップ 1: カスタムオーソライザー用の Lambda 関数を作成する

のカスタム認証 AWS IoT Core では、作成したオーソライザーリソースを使用してクライアントを認証および承認します。このセクションで作成する 関数は、クライアントが AWS IoT リソースに接続してアクセスするときに、クライアントを認証 AWS IoT Core および承認します。

Lambda 関数は以下を実行します。

  • リクエストが test-invoke-authorizer からのものである場合、Deny アクションを含む IAM ポリシーを返します。

  • リクエストが HTTP を使用して Passport から送信され、actionToken パラメータの値が allow の場合、Allow アクションを使用して IAM ポリシーを返します。それ以外の場合は、Deny アクションを含む IAM ポリシーを返します。

カスタムオーソライザー用の Lambda 関数を作成するには
  1. Lambda コンソールで、[関数] を開きます。

  2. [Create function] を選択します。

  3. [一から作成] が選択されていることを確認します。

  4. [Basic information]:

    1. [関数名] に custom-auth-function と入力します。

    2. [ランタイム] で、[Node.js 18.x] を確認します

  5. [Create function] を選択します。

    Lambda により、Node.js の関数と実行ロールが作成され、ログをアップロードするためのアクセス許可が関数に付与されます。Lambda 関数は、関数を呼び出すときに実行ロールを引き受け、実行ロールを使用して AWS SDK の認証情報を作成し、イベントソースからデータを読み込みます。

  6. AWS Cloud9 エディタで関数のコードと設定を表示するには、custom-auth-functionデザイナーウィンドウで を選択し、エディタのナビゲーションペインで index.js を選択します。

    Node.js などのスクリプト言語では、Lambda には成功のレスポンスを返す基本関数が含まれています。ソースコードが 3 MB を超えない限り、AWS Cloud9 エディタを使用して関数を編集できます。

  7. エディタの index.js コードを次のコードに置き換えます。

    // A simple Lambda function for an authorizer. It demonstrates // How to parse a CLI and Http password to generate a response. export const handler = async (event, context, callback) => { //Http parameter to initiate allow/deny request const HTTP_PARAM_NAME='actionToken'; const ALLOW_ACTION = 'Allow'; const DENY_ACTION = 'Deny'; //Event data passed to Lambda function var event_str = JSON.stringify(event); console.log('Complete event :'+ event_str); //Read protocolData from the event json passed to Lambda function var protocolData = event.protocolData; console.log('protocolData value---> ' + protocolData); //Get the dynamic account ID from function's ARN to be used // as full resource for IAM policy var ACCOUNT_ID = context.invokedFunctionArn.split(":")[4]; console.log("ACCOUNT_ID---"+ACCOUNT_ID); //Get the dynamic region from function's ARN to be used // as full resource for IAM policy var REGION = context.invokedFunctionArn.split(":")[3]; console.log("REGION---"+REGION); //protocolData data will be undefined if testing is done via CLI. // This will help to test the set up. if (protocolData === undefined) { //If CLI testing, pass deny action as this is for testing purpose only. console.log('Using the test-invoke-authorizer cli for testing only'); callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } else{ //Http Testing from Postman //Get the query string from the request var queryString = event.protocolData.http.queryString; console.log('queryString values -- ' + queryString); /* global URLSearchParams */ const params = new URLSearchParams(queryString); var action = params.get(HTTP_PARAM_NAME); if(action!=null && action.toLowerCase() === 'allow'){ callback(null, generateAuthResponse(ALLOW_ACTION,ACCOUNT_ID,REGION)); }else{ callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } } }; // Helper function to generate the authorization IAM response. var generateAuthResponse = function(effect,ACCOUNT_ID,REGION) { var full_resource = "arn:aws:iot:"+ REGION + ":" + ACCOUNT_ID + ":*"; console.log("full_resource---"+full_resource); var authResponse = {}; authResponse.isAuthenticated = true; authResponse.principalId = 'principalId'; var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statement = {}; statement.Action = 'iot:*'; statement.Effect = effect; statement.Resource = full_resource; policyDocument.Statement[0] = statement; authResponse.policyDocuments = [policyDocument]; authResponse.disconnectAfterInSeconds = 3600; authResponse.refreshAfterInSeconds = 600; console.log('custom auth policy function called from http'); console.log('authResponse --> ' + JSON.stringify(authResponse)); console.log(authResponse.policyDocuments[0]); return authResponse; }
  8. [デプロイ] を選択します。

  9. [変更がデプロイされました] がエディタの上に表示されたら、次の操作を実行します。

    1. エディタの上にある [関数の概要] セクションまでスクロールします。

    2. このチュートリアルの後半で使用するために、[関数 ARN] をコピーして保存します。

  10. 関数をテストします。

    1. [テスト] タブを選択します。

    2. デフォルトのテスト設定を使用して、[呼び出し] を選択します。

    3. テストが成功した場合は、[実行結果][詳細] ビューを開きます。関数が返したポリシードキュメントが表示されます。

      テストが失敗した場合、またはポリシードキュメントが表示されない場合は、コードを確認し、エラーを見つけて修正します。

ステップ 2: カスタムオーソライザーのパブリックキーとプライベートキーのペアを作成する

カスタムオーソライザーでは、認証にパブリックキーとプライベートキーが必要です。このセクションのコマンドは、OpenSSL ツールを使用してこのキーペアを作成します。

カスタムオーソライザーのパブリックキーとプライベートキーのペアを作成するには
  1. プライベートキーファイルを作成します。

    openssl genrsa -out private-key.pem 4096
  2. 先ほど作成したプライベートキーファイルを検証します。

    openssl rsa -check -in private-key.pem -noout

    コマンドがエラーを表示しない場合、プライベートキーファイルは有効です。

  3. パブリックキーファイルを作成します。

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. パブリックキーファイルを確認します。

    openssl pkey -inform PEM -pubin -in public-key.pem -noout

    コマンドがエラーを表示しない場合、パブリックキーファイルは有効です。

ステップ 3: カスタマーオーソライザーリソースとその承認を作成する

AWS IoT カスタムオーソライザーは、前のステップで作成したすべての要素を結び付けるリソースです。このセクションでは、カスタムオーソライザーリソースを作成し、以前に作成した Lambda 関数を実行するためのアクセス許可を付与します。 AWS IoT コンソール、、または AWS API を使用して AWS CLI、カスタムオーソライザーリソースを作成できます。

このチュートリアルでは、1 つのカスタムオーソライザーを作成するだけで済みます。このセクションでは、 AWS IoT コンソールと を使用して を作成する方法について説明します。 AWS CLI最も便利な方法を使用できます。どちらの方法でも作成されたカスタムオーソライザーリソースには違いはありません。

カスタマーオーソライザーリソースを作成する

カスタムオーソライザーを作成するには (コンソール)
  1. AWS IoT コンソール のカスタムオーソライザーページを開き、オーソライザー の作成 を選択します。

  2. [オーソライザーの作成] で、次のように操作します。

    1. [オーソライザーの名前] に、my-new-authorizer と入力します。

    2. [オーソライザーのステータス] で、[アクティブ] にチェックを入れます。

    3. [オーソライザー関数] で、前に作成した Lambda 関数を選択します。

    4. [トークン検証 - オプション] で次の操作を実行します。

      1. [トークン検証] をオンにします。

      2. [トークンキー名] に、tokenKeyName を入力します。

      3. [Add key] (キーの追加) を選択します。

      4. [キー名]FirstKey を入力します。

      5. [パブリックキー] で、public-key.pem ファイルの内容を入力します。-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- を含むファイルの行を必ず含め、ラインフィード、キャリッジリターン、またはその他の文字をファイルの内容に追加したり、ファイルの内容から削除したりしないでください。入力する文字列は、この例のように表示されます。

        -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----
  3. [オーソライザーの作成] を選択します。

  4. カスタムオーソライザーリソースが作成された場合は、カスタムオーソライザーのリストが表示され、新しいカスタムオーソライザーがそのリストに表示されます。これで、次のセクションに進んでテストできます。

    エラーが表示された場合は、エラーを確認し、カスタムオーソライザーを再度作成して、エントリを再確認してください。各カスタムオーソライザーリソースには一意の名前が必要であることに注意してください。

カスタムオーソライザーを作成するには (AWS CLI)
  1. authorizer-function-arntoken-signing-public-keys の値を置き換えてから、次のコマンドを実行します。

    aws iot create-authorizer \ --authorizer-name "my-new-authorizer" \ --token-key-name "tokenKeyName" \ --status ACTIVE \ --no-signing-disabled \ --authorizer-function-arn "arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function" \ --token-signing-public-keys FirstKey="-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----"
    各パラメータの意味は次のとおりです。
    • authorizer-function-arn 値は、カスタムオーソライザー用に作成した Lambda 関数の Amazon リソースネーム (ARN) です。

    • token-signing-public-keys 値には、キーの名前、FirstKey、および public-key.pem ファイルの内容が含まれます。-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- を含むファイルの行を必ず含め、ラインフィード、キャリッジリターン、またはその他の文字をファイルの内容に追加したり、ファイルの内容から削除したりしないでください。

      注: パブリックキーの値を変更すると使用できなくなるため、パブリックキーの入力には注意してください。

  2. カスタムオーソライザーが作成されている場合、コマンドは次のような新しいリソースの名前と ARN を返します。

    { "authorizerName": "my-new-authorizer", "authorizerArn": "arn:aws:iot:Region:57EXAMPLE833:authorizer/my-new-authorizer" }

    次のステップで使用するために authorizerArn 値を保存します。

    各カスタムオーソライザーリソースには一意の名前が必要であることに注意してください。

カスタムオーソライザーリソースを承認する

このセクションでは、作成したカスタムオーソライザーリソースに、Lambda 関数を実行するためのアクセス許可を付与します。アクセス許可を付与するには、add-permission CLI コマンドを使用できます。

を使用して Lambda 関数にアクセス許可を付与する AWS CLI
  1. 値を挿入したら、次のコマンドを入力します。statement-id 値は一意でなければならないことに注意してください。このチュートリアルを以前に実行したことがある場合、または ResourceConflictException エラーが発生した場合は、Id-1234 を別の値に置き換えてください。

    aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "Id-1234" \ --source-arn authorizerArn
  2. コマンドが成功すると、この例のようなアクセス許可ステートメントが返されます。次のセクションに進んで、カスタムオーソライザーをテストできます。

    { "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}" }

    コマンドが成功しない場合は、この例のようなエラーが返されます。続行する前に、エラーを確認して修正する必要があります。

    An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function

ステップ 4: を呼び出してオーソライザーをテストする test-invoke-authorizer

すべてのリソースが定義された状態で、このセクションでは、コマンドラインから を呼び出し test-invoke-authorizerて認証パスをテストします。

コマンドラインからオーソライザーを呼び出す場合、protocolData は定義されていないため、オーソライザーは常に DENY ドキュメントを返すことに注意してください。ただし、このテストは、Lambda 関数を完全にテストしなくても、カスタムオーソライザーと Lambda 関数が正しく設定されていることを確認します。

を使用してカスタムオーソライザーとその Lambda 関数をテストするには AWS CLI
  1. 前の手順で作成した private-key.pem ファイルがあるディレクトリで、次のコマンドを実行します。

    echo -n "tokenKeyValue" | openssl dgst -sha256 -sign private-key.pem | openssl base64 -A

    このコマンドは、次のステップで使用する署名文字列を作成します。署名文字列は次のようになります。

    dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mn VB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeeh bQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjj szEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29V QJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuX f3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+K EWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFH xRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    この署名文字列をコピーして、次の手順で使用します。余分な文字を含めたり、省略したりしないように注意してください。

  2. このコマンドで、token-signature 値を前のステップの署名文字列に置き換え、このコマンドを実行してオーソライザーをテストします。

    aws iot test-invoke-authorizer \ --authorizer-name my-new-authorizer \ --token tokenKeyValue \ --token-signature dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    コマンドが成功すると、この例のように、カスタマーオーソライザー関数によって生成された情報が返されます。

    { "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Deny\",\"Resource\":\"arn:aws:iot:Region:57EXAMPLE833:*\"}]}" ], "refreshAfterInSeconds": 600, "disconnectAfterInSeconds": 3600 }

    コマンドからエラーが返された場合は、エラーを確認し、このセクションで使用したコマンドを再度確認します。

ステップ 5: Postman を使用して MQTT メッセージの発行をテストする

  1. コマンドラインからデバイスデータエンドポイントを取得するには、ここに示すように describe-endpoint を呼び出します

    aws iot describe-endpoint --output text --endpoint-type iot:Data-ATS

    このアドレスを保存して、後のステップで device_data_endpoint_address として使用します。

  2. 新しい Postman ウィンドウを開き、新しい HTTP POST リクエストを作成します。

    1. コンピュータで、Postman アプリケーションを開きます。

    2. Postman の [ファイル] メニューで、[新規] を選択します。

    3. [New] (新規) ダイアログボックスで、[Request] (リクエスト) を選択します。

    4. [Save] (保存) リクエストで、

      1. [Request name] (リクエスト名) で、Custom authorizer test request と入力します。

      2. [保存先のコレクションまたはフォルダを選択:] で、このリクエストを保存するコレクションを選択または作成します。

      3. [collection_name に保存] を選択します。

  3. カスタムオーソライザーをテストするための POST リクエストを作成します。

    1. URL フィールドの横にあるリクエストメソッドセレクターで、[POST] を選択します。

    2. URL フィールドで、前のステップの describe-endpoint コマンドの device_data_endpoint_address とともに次の URL を使用して、リクエスト用の URL を作成します。

      https://device_data_endpoint_address:443/topics/test/cust-auth/topic?qos=0&actionToken=allow

      この URL には、 AWS IoT へのアクセスを許可するポリシードキュメントを返すように Lambda 関数に指示する actionToken=allow クエリパラメータが含まれていることに注意してください。URL を入力すると、Postman の [Params] (パラメータ) タブにもクエリパラメータが表示されます。

    3. [認証] タブの [タイプ] フィールドで、[認証なし] を選択します。

    4. [Headers] (ヘッダー) タブで次の操作を行います。

      1. チェックが入っている [ホスト] キーがある場合は、このチェックを解除します。

      2. ヘッダーのリストの一番下に、これらの新しいヘッダーを追加し、チェックが入っていることを確認します。Host 値を device_data_endpoint_address に置き換え、x-amz-customauthorizer-signature 値を前のセクションの test-invoke-authorize コマンドで使用した署名文字列に置き換えます。

        キー
        x-amz-customauthorizer-name my-new-authorizer
        Host device_data_endpoint_address
        tokenKeyName tokenKeyValue
        x-amz-customauthorizer-signature dBwykzlb +fo+JmSGdwoGr 8dyC2qB /IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp +0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv 7i2IMjEg +CPY0zrWt1jr9BikgGP DxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKt16ViGYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSulTtQpaXiUtcspACi6catsDuXfLzCwYSUy02u5XkWnsto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlHxRlXsPqiVKS1ZIUClaZWprh orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o
    5. [Body] (本文) タブで、次の操作を行います。

      1. データ形式オプションボックスで、[Raw] を選択します。

      2. データ型リストで、 を選択しますJavaScript

      3. テキストフィールドで、テストメッセージ用の次の JSON メッセージペイロードを入力します。

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. [送信] を選択してリクエストを送信します。

    リクエストが成功した場合、次を返します。

    { "message": "OK", "traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c" }

    正常な応答は、カスタムオーソライザーが への接続を許可 AWS IoT し、テストメッセージが のブローカーに配信されたことを示します AWS IoT Core。

    エラーが返された場合は、エラーメッセージ、device_data_endpoint_address、署名文字列、およびその他のヘッダー値を確認してください。

次のセクションで使用するために、このリクエストを Postman で保持します。

ステップ 6: MQTT テストクライアントでメッセージを表示する

前のステップでは、Postman AWS IoT を使用してシミュレートされたデバイスメッセージを に送信しました。成功した応答は、カスタムオーソライザーが AWS IoT への接続を許可し、テストメッセージが AWS IoT Core のブローカーに配信されたことを示しました。このセクションでは、 AWS IoT コンソールで MQTT テストクライアントを使用して、他のデバイスやサービスと同様に、そのメッセージのメッセージ内容を確認します。

カスタムオーソライザーによって承認されたテストメッセージを表示するには
  1. AWS IoT コンソールで、MQTT テストクライアント を開きます。

  2. [Subscribe to topic] (トピックへのサブスクライブ) タブの [Topic filter] (トピックフィルター) で、前のセクションの Postman の例で使用されているメッセージトピックである test/cust-auth/topic を入力します。

  3. [Subscribe] を選択します。

    次のステップのために、このウィンドウを表示したままにします。

  4. Postman で、前のセクションで作成したリクエストで、[送信] を選択します。

    応答を確認して、正常に完了したことを確認します。そうでない場合は、前のセクションで説明したようにエラーをトラブルシューティングします。

  5. [MQTT テストクライアント] に、メッセージトピックを示す新しいエントリが表示され、展開すると、Postman から送信したリクエストからのメッセージペイロードが表示されます。

    [MQTT テストクライアント] にメッセージが表示されない場合は、次の点を確認してください。

    • Postman リクエストが正常に返されたことを確認します。が接続 AWS IoT を拒否してエラーを返す場合、リクエスト内のメッセージはメッセージブローカーに渡されません。

    • AWS IoT コンソールを開く AWS リージョン ために使用される AWS アカウント と が、Postman URL で使用しているものと同じであることを確認します。

    • MQTT テストクライアントにトピックを正しく入力したことを確認してください。トピックフィルターでは、大文字と小文字が区別されます。疑わしい場合は、 #トピックにサブスクライブすることもできます。このトピックは、コンソールを開くために AWS リージョン 使用されたメッセージブローカー AWS アカウント および を通過するすべての MQTT メッセージをサブスクライブします AWS IoT 。

ステップ 7: 結果と次のステップを確認する

このチュートリアルでは、次の作業を行いました。
  • Lambda 関数をカスタムオーソライザーハンドラーとして作成しました

  • トークン署名を有効にしてカスタムオーソライザーを作成しました

  • test-invoke-authorizer コマンドを使用してカスタムオーソライザーをテストしました

  • Postman を使用して MQTT トピックを発行し、カスタムオーソライザーでリクエストを検証しました

  • Postman テストから送信されたメッセージを表示するために [MQTT テストクライアント] を使用しました

次のステップ

Postman からメッセージを送信してカスタムオーソライザーが機能していることを確認したら、このチュートリアルのさまざまな側面を変更すると結果にどのように影響するかを実験してみてください。手始めにいくつか例を紹介します。

  • 署名文字列を変更して、不正な接続の試みがどのように処理されるかを確認できないようにします。このようなエラー応答が返され、メッセージは MQTT テストクライアントに表示されないはずです。

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • AWS IoT ルールの開発および使用中に発生する可能性のあるエラーを見つける方法の詳細については、「」を参照してくださいモニタリング AWS IoT

ステップ 8: クリーンアップする

このチュートリアルを繰り返したい場合は、カスタムオーソライザーの一部を削除する必要があります。一度に設定 AWS アカウント できるカスタムオーソライザーの数は限られており、既存のカスタムオーソライザーを削除せずに新しいオーソライザーを追加LimitExceededExceptionしようとすると、 を取得できます。

カスタムオーソライザーを削除するには (コンソール)
  1. AWS IoT コンソールのカスタムオーソライザーページを開き、カスタムオーソライザーのリストで、削除するカスタムオーソライザーを見つけます。

  2. [Custom authorizer details] (カスタムオーソライザーの詳細) ページを開き、[Actions] (アクション) メニューから [Edit] (編集) を選択します。

  3. [オーソライザーアクティブ化] のチェックを解除し、[更新] を選択します。

    アクティブなカスタムオーソライザーを削除することはできません。

  4. [Custom authorizer details] (カスタムオーソライザーの詳細) ページで、[Actions] (アクション) メニューを開き、[Delete] (削除) を選択します。

カスタムオーソライザーを削除するには (AWS CLI)
  1. インストールしたカスタムオーソライザーの一覧を表示し、削除するカスタムオーソライザーの名前を見つけます。

    aws iot list-authorizers
  2. Custom_Auth_Name を、削除するカスタムオーソライザーの authorizerName に置き換えた後、このコマンドを実行してカスタムオーソライザーを inactive に設定します。

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Custom_Auth_Name を削除するカスタムオーソライザーの authorizerName に置き換えた後、このコマンドを実行してカスタムオーソライザーを削除します。

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name