AWS IoT Core接続が、ポリシーが添付された認証済みCognitoユーザーで拒否されました[MQTT over WSS]

クリストファー

これと同様の質問が以前にあり、私が見つけた答えは問題を解決するのに役立たなかったが、私はたくさん検索した。

IoTデバイス用にAWSのMQTTブローカーに接続しようとしていますが、AWSAmplifyのPubSubライブラリを介してMQTTover WebSocketsを使用しています。認証もAmplifyを介して処理されます(はい、ユーザーは正常に認証されます)。接続しようとすると、すぐに閉じてエラーメッセージが表示されます。

errorCode:8、errorMessage:AMQJS0008Iソケットがクローズされました。

IDプールのIAMロールを設定し、認証されたユーザーにIoTポリシーを添付しました(Amplifyから取得したID IDを使用)。

ポリシーの添付に使用されるコマンド:

aws iot attach-principal-policy --policy-name "Air-RME-Users" --principal "ap-northeast-1:4f76a019-9f84-44f0-a23d-48357210016c"

どんな助けでもありがたいです、ありがとう!

CloudWatch IoTのログ:

{
    "timestamp": "2018-07-05 04:00:42.998",
    "logLevel": "ERROR",
    "traceId": "<removed>",
    "accountId": "<removed>",
    "status": "Failure",
    "eventType": "Connect",
    "protocol": "MQTT",
    "clientId": "4e900ea4-8f05-4022-98a8-c1b26280b2a2",
    "principalId": "<removed>:CognitoIdentityCredentials",
    "sourceIp": "<removed>",
    "sourcePort": 54641,
    "reason": "AUTHORIZATION_FAILURE"
}

Cognito Identityプールポリシー:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect",
                "iot:Publish",
                "iot:Subscribe",
                "iot:Receive",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow",
                "iot:DeleteThingShadow"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

IoTポリシー:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:*",
      "Resource": "arn:aws:iot:ap-northeast-1:<removed>:topic/*"
    }
  ]
}

テストコード:

import Amplify from 'aws-amplify';
import {AWSIoTProvider} from 'aws-amplify/lib/PubSub/Providers';

require('babel-polyfill');

global.app = function () {
  let user = null;
  const onBtn = document.getElementById("on");
  const offBtn = document.getElementById("off");

  Amplify.configure({
    Auth: {
      // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID
      identityPoolId: 'ap-northeast-1:<removed>',

      // REQUIRED - Amazon Cognito Region
      region: 'ap-northeast-1',

      // OPTIONAL - Amazon Cognito User Pool ID
      userPoolId: 'ap-northeast-1_<removed>',

      // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)
      userPoolWebClientId: '<removed>',

      // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not
      mandatorySignIn: true,
    }
  });

  Amplify.addPluggable(new AWSIoTProvider({
    aws_pubsub_region: 'ap-northeast-1',
    aws_pubsub_endpoint: 'wss://<removed>.iot.ap-northeast-1.amazonaws.com/mqtt',
  }));

  process();

  async function process() {

    await Amplify.Auth.signIn("[email protected]", "Test1234567")
      .then(user => {
        console.log("ログインできました。")
        onBtn.style.visibility = "visible";
        offBtn.style.visibility = "visible";
        console.log(user);
        if (user.challengeName === "NEW_PASSWORD_REQUIRED") {
          const currentPassword = "Test123456";
          const newPassword = "Test1234567"

          user.completeNewPasswordChallenge(newPassword)
            .then(() => {
              // winning
            }).catch(error => {
            console.log(error);
          });
        }
      })
      .catch(err => {
        alert("ログインできませんでした。");
        console.log(err);
      });

    Amplify.Auth.currentCredentials().then((info) => {
      const cognitoIdentityId = info._identityId;
      console.log(cognitoIdentityId);
    });

    Amplify.PubSub.subscribe('$aws/things/Air-RME-test/shadow/get/accepted').subscribe({
      next: data => console.log('Message received', data),
      error: error => console.error(error),
      close: () => console.log('Done'),
    });
    Amplify.PubSub.publish('$aws/things/Air-RME-test/shadow/get', '');
  }
};

編集:

ポリシーを添付する前に、認証されたコグニトIDロールに次のポリシーを追加すると、問題が解決しました。使用していたarnにも問題があったので、当面は*ワイルドカードを使用します。動作するようになったら、再度更新します。

ポリシー:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AttachPrincipalPolicy"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
アースタンデル

したがって、1つのポリシーが欠落しています。そのポリシーは、各ユーザーに添付する必要がありますiot:AttachPrincipalPolicy

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iot:AttachPrincipalPolicy"
        ],
        "Resource": [
            "*"
        ]
    }
] }

現在、CLIを使用する方法とAWSLambda関数を使用する方法の2つがあります。

'use strict';

console.log('Loading function');
var AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    console.log('Received event:', JSON.stringify(event, null, 2))
    event.Records.forEach((record) => {
        console.log(record.eventName);
        if (record.eventName == "INSERT") {
            console.log('DynamoDB Record:', JSON.stringify(record));
            console.log('DynamoDB Record:', record.dynamodb['Keys']['UserId']['S']);
            var user = record.dynamodb['Keys']['UserId']['S'];
            const iotMgmt = new AWS.Iot();
            return new Promise(function(resolve, reject) {
                let params = {
                    policyName: "basic",
                    principal: user
                };
                iotMgmt.attachPrincipalPolicy(params, (err, res) => {
                    console.log("Attaching IoT policy to " + user);
                    if (err) {
                        console.error(err);
                        reject(err);
                    }
                    else {
                        resolve();
                    }
                });
            });
        }

    });
};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS IoT Core connection refused with authenticated Cognito user w/ attached policy [MQTT over WSS]

分類Dev

aws-iot(wss)でカスタムオーソライザーを使用すると、デバイスが接続してデータを送信するたびに新しいデバイスが作成されますか?

分類Dev

How to see MQTT data in AWS IOT and Azure IOT HUB

分類Dev

AWS IoT接続エラー:aws-iot-device-sdkで提供される無効な「caCert」オプション

分類Dev

wss://(WebSockets over SSL / TLS)接続がエラーなしですぐに切断されるのはなぜですか?

分類Dev

WSS over Secure SSL接続は、FireFoxでのみエラー1006で失敗します

分類Dev

Publish mqtt message to topic from aws lambda using aws iot

分類Dev

AWS-ssh:ホストinstance_ipポート22に接続:接続が拒否されました

分類Dev

AWS バケット ポリシー - 許可が拒否されました

分類Dev

AWS Code Deploy(CI)の失敗-接続が拒否されましたエラー

分類Dev

HTTP POST to AWS IoT

分類Dev

ListThings AWS IoT with Python

分類Dev

AWS IOTボタン:Wifiに接続

分類Dev

mosquitto と ibm watson iot on raspberry pi 接続が拒否されました

分類Dev

"certificate verify failed" when bridging AWS IoT with local Mosquitto MQTT

分類Dev

Amazon AWSへの接続:許可が拒否されました

分類Dev

AWS上のKubernetesクラスター、サーバーlocalhost:8080への接続が拒否されました

分類Dev

AWS API Gateway:認証されたユーザーとゲストユーザーのみが利用できるAPI

分類Dev

AWS S3 Transfer Manager $ {cognito-identity.amazonaws.com:sub}ポリシー変数アクセスが拒否されました

分類Dev

ユーザーが認証されていないため、AWS Cognito FederatedIdentitiesを使用した認証は失敗します

分類Dev

AWS IOTにバイナリデータが投稿されたときにAWSLambdaが呼び出されませんか?

分類Dev

AWSインスタンスで接続が拒否されましたか?

分類Dev

AWS RDS:java.sql.SQLException:ユーザーのアクセスが拒否されました

分類Dev

STS 一時認証情報を使用した Websocket 上の AWS IoT MQTT

分類Dev

Laravel SQLSTATE [HY000] [2002]接続が拒否されました| フォージ| AWS

分類Dev

wgetlocalhost-接続が拒否されました-AWSへのAtlassianのインストール

分類Dev

Cognitoを使用し、AWS IOTのポリシーを作成する場合、iot:ClientIdポリシー変数の値は何ですか?

分類Dev

Create IoT Policy with AWS Lambda

分類Dev

AWS RDS Auroraクエリエディター:ユーザー 'admin' @ '#。#。#。#'のアクセスが拒否されました(パスワードを使用:YES)

Related 関連記事

  1. 1

    AWS IoT Core connection refused with authenticated Cognito user w/ attached policy [MQTT over WSS]

  2. 2

    aws-iot(wss)でカスタムオーソライザーを使用すると、デバイスが接続してデータを送信するたびに新しいデバイスが作成されますか?

  3. 3

    How to see MQTT data in AWS IOT and Azure IOT HUB

  4. 4

    AWS IoT接続エラー:aws-iot-device-sdkで提供される無効な「caCert」オプション

  5. 5

    wss://(WebSockets over SSL / TLS)接続がエラーなしですぐに切断されるのはなぜですか?

  6. 6

    WSS over Secure SSL接続は、FireFoxでのみエラー1006で失敗します

  7. 7

    Publish mqtt message to topic from aws lambda using aws iot

  8. 8

    AWS-ssh:ホストinstance_ipポート22に接続:接続が拒否されました

  9. 9

    AWS バケット ポリシー - 許可が拒否されました

  10. 10

    AWS Code Deploy(CI)の失敗-接続が拒否されましたエラー

  11. 11

    HTTP POST to AWS IoT

  12. 12

    ListThings AWS IoT with Python

  13. 13

    AWS IOTボタン:Wifiに接続

  14. 14

    mosquitto と ibm watson iot on raspberry pi 接続が拒否されました

  15. 15

    "certificate verify failed" when bridging AWS IoT with local Mosquitto MQTT

  16. 16

    Amazon AWSへの接続:許可が拒否されました

  17. 17

    AWS上のKubernetesクラスター、サーバーlocalhost:8080への接続が拒否されました

  18. 18

    AWS API Gateway:認証されたユーザーとゲストユーザーのみが利用できるAPI

  19. 19

    AWS S3 Transfer Manager $ {cognito-identity.amazonaws.com:sub}ポリシー変数アクセスが拒否されました

  20. 20

    ユーザーが認証されていないため、AWS Cognito FederatedIdentitiesを使用した認証は失敗します

  21. 21

    AWS IOTにバイナリデータが投稿されたときにAWSLambdaが呼び出されませんか?

  22. 22

    AWSインスタンスで接続が拒否されましたか?

  23. 23

    AWS RDS:java.sql.SQLException:ユーザーのアクセスが拒否されました

  24. 24

    STS 一時認証情報を使用した Websocket 上の AWS IoT MQTT

  25. 25

    Laravel SQLSTATE [HY000] [2002]接続が拒否されました| フォージ| AWS

  26. 26

    wgetlocalhost-接続が拒否されました-AWSへのAtlassianのインストール

  27. 27

    Cognitoを使用し、AWS IOTのポリシーを作成する場合、iot:ClientIdポリシー変数の値は何ですか?

  28. 28

    Create IoT Policy with AWS Lambda

  29. 29

    AWS RDS Auroraクエリエディター:ユーザー 'admin' @ '#。#。#。#'のアクセスが拒否されました(パスワードを使用:YES)

ホットタグ

アーカイブ