認証されていない Cognito ID の場合、IoT MQTT ブローカーへの接続を許可するには、「認証済みの ID プール」ロールで十分です。ただし、認証されたコグニト ID には、次の 2 つが必要です。
「ID プール認証済み」ロールは、必要な IoT アクション (接続、公開など) へのアクセスを許可する必要があります。
AttachPrincipalPolicy APIを使用して、IoT ポリシー (デバイスにアタッチされているものとまったく同じ) を cognito ID にアタッチする必要があります。
ステップ 2 は、これが必要な場所が特に明確ではなかったので、今日私が立ち往生した場所です。
私の知る限り、AWS Web サイトから IoT ポリシーを cognito ユーザーにアタッチする方法はありません。ただし、マシンに AWS コマンド ライン インターフェイスがセットアップされている場合は、そこから実行できます。コマンドは次のようになります。
aws iot attach-principal-policy --policy-name <iot-policy-name> --principal <cognito-identity-id>
Cognito ID は を使用してFederated Identities > Your Pool > Identity browser
見つけることができます。また、呼び出しへの応答でも見つけることができますCognitoIdentityCredentials.get
。このように見えますus-east-1:ba7cef62-f3eb-5be2-87e5-fffbdeed2824
運用システムの場合、おそらくユーザー サインアップでラムダ関数を使用して、このポリシーのアタッチを自動化したいことは明らかです。
IoT ポリシーを添付する必要性について説明しているドキュメントのセクションは、次のページにあります。
認証された Amazon Cognito ID が AWS アカウントの topic1 で HTTP 経由で MQTT メッセージを発行するには、ここで概説するように 2 つのポリシーを指定する必要があります。最初のポリシーは、Amazon Cognito ID プール ロールにアタッチし、そのプールの ID がパブリッシュ コールを実行できるようにする必要があります。2 番目のポリシーは、AWS IoT AttachPrincipalPolicy API を使用して Amazon Cognito ユーザーにアタッチされ、指定された Amazon Cognito ユーザーが topic1 トピックにアクセスできるようにします。