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 Identity プールにIAMポリシーをアタッチし、

  • Amazon Cognito Identity (認証済みユーザー) に AWS IoT Core ポリシーをアタッチします。

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

次の例は、Amazon Cognito アイデンティティの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 関数内に表示されます。

注記

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