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 ポリシーをアタッチし、

  • Amazon Cognito アイデンティティ (認証されたユーザー) AWS IoT Core にポリシーをアタッチします。

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

次の例は、Amazon Cognito ID の IAM ポリシーと IoT ポリシーの両方におけるアクセス許可を示しています。認証されたユーザーは、デバイス固有のトピック (デバイス/DEVICE_ID/ステータスなど) に公開したいと考えています。

{ "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 サービスと統合するWebアプリケーションやモバイルアプリケーションの構築に役立つツールとサービスのセットです。Amplify の詳細については、Amplify Framework Documentation を参照してください。

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

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

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

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

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

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 関数に AttachPolicy API オペレーションを実装します。次の例は、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 関数内に表示されます。

注記

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