翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ID (認証済みユーザー) に 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 サービスのセットです。Amplify の詳細については、Amplify Framework Documentation
どちらの例でも、次の手順を実行します。
-
ユーザーがアカウントにサインアップすると、アプリケーションが Amazon Cognito ユーザープールおよび ID を作成します。
-
ユーザーが認証されると、アプリケーションがポリシーを作成し、ID にアタッチします。これにより、ユーザーは発行およびサブスクライブのアクセス許可を与えられます。
-
ユーザーは、アプリケーションを使用して 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.jsiot.GetPolicy
関数内に表示されます。
注記
Amazon Cognito ID プールを介して取得した AWS 認証情報を使用して関数を呼び出すと、Lambda 関数のコンテキストオブジェクトに の値が含まれますcontext.cognito_identity_id
。詳細については、以下を参照してください。