Amazon Cognito ID を使用した承認 - AWS IoT Core

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

Amazon Cognito ID を使用した承認

Amazon Cognito ID には、未認証と認証済みの 2 種類あります。アプリが認証されていない Amazon Cognito ID をサポートしている場合、認証が実行されないため、ユーザーが誰であるかを知りません。

認証されていない ID: 認証されていない Amazon Cognito ID の場合、認証されていない ID プールに IAMロールをアタッチしてアクセス許可を付与します。不明なユーザーが使用できるようにするそれらのリソースにのみアクセスを許可する必要があります。

重要

認証されていない Amazon Cognito ユーザーが に接続する場合 AWS IoT Coreでは、IAMポリシー内の非常に制限されたリソースへのアクセスを許可することをお勧めします。

認証された ID: 認証された Amazon Cognito ID には、2 つの場所でアクセス許可を指定する必要があります。

  • 認証された Amazon Cognito ID プールと に IAMポリシーをアタッチする

  • をアタッチする AWS IoT Core Amazon Cognito ID (認証されたユーザー) への ポリシー。

に接続する認証されていない Amazon Cognito ユーザーと認証された Amazon Cognito ユーザーのポリシー例 AWS IoT Core

次の例は、Amazon Cognito ID のIAMポリシーと IoT ポリシーの両方のアクセス許可を示しています。認証されたユーザーは、デバイス固有のトピック (例: device/DEVICE_ID/status) に発行したいと考えています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/Client_ID" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status" ] } ] }

次の例は、Amazon Cognito の認証されていないロールの IAMポリシーのアクセス許可を示しています。認証されていないユーザーは、認証を必要としない非デバイス固有のトピックに発行したいと考えています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic" ] } ] }

GitHub 例

次の のウェブアプリケーションの例は、認証されたユーザーにポリシーアタッチメントをユーザーのサインアップと認証プロセスに組み込む方法 GitHub を示しています。

Amplify は、 と統合するウェブおよびモバイルアプリケーションの構築に役立つ一連のツールとサービスです。 AWS サービス。Amplify の詳細については、Amplify Framework Documentation を参照してください。

どちらの例でも、次の手順を実行します。

  1. ユーザーがアカウントにサインアップすると、アプリケーションが Amazon Cognito ユーザープールおよび ID を作成します。

  2. ユーザーが認証されると、アプリケーションがポリシーを作成し、ID にアタッチします。これにより、ユーザーは発行およびサブスクライブのアクセス許可を与えられます。

  3. ユーザーは、アプリケーションを使用してMQTTトピックを公開およびサブスクライブできます。

最初の例では、認証AttachPolicyAPIオペレーション内で オペレーションを直接使用します。次の例は、Amplify と を使用する React ウェブアプリケーション内でこのAPI呼び出しを実装する方法を示しています。 AWS IoT Device SDK for JavaScript.

function attachPolicy(id, policyName) { var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint}); var params = {policyName: policyName, target: id}; console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id); Iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); } } else { console.log("Successfully attached policy with the identity", data); } }); }

このコードは AuthDisplay.js ファイルに表示されます。

2 番目の例では、Lambda 関数に AttachPolicyAPIオペレーションを実装します。次の例は、Lambda がこのAPI呼び出しをどのように使用するかを示しています。

iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); res.json({error: err, url: req.url, body: req.body}); } } else { console.log(data); res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body}); } });

このコードは、app.js ファイルの iot.GetPolicy 関数内に表示されます。

注記

で関数を呼び出す場合 AWS Amazon Cognito ID プールを通じて取得する 認証情報、Lambda 関数のコンテキストオブジェクトには の値が含まれますcontext.cognito_identity_id。詳細については、以下を参照してください。