簡體   English   中英

AWS IoT MQTT 僅適用於示例主題?

[英]AWS IoT MQTT only works on the example topic?

我剛剛開始使用 AWS 和 IoT。 使用文檔和教程,我設法從示例類中獲取了一個工作發布應用程序:

    public static void main(String[] args) throws AWSIotException, InterruptedException {
        String clientEndpoint = "<prefix>-ats.iot.us-west-2.amazonaws.com";       // replace <prefix> and <region> with your own
        String clientId = "sdk-java-23";                              // replace with your own client ID. Use unique client IDs for concurrent connections.
        String certificateFile = "athing.cert.pem";                       // X.509 based certificate file
        String privateKeyFile = "athing.private.key";                        // PKCS#1 or PKCS#8 PEM encoded private key file

// SampleUtil.java and its dependency PrivateKeyReader.java can be copied from the sample source code.
// Alternatively, you could load key store directly from a file - see the example included in this README.

        SampleUtil.KeyStorePasswordPair pair = SampleUtil.getKeyStorePasswordPair(certificateFile, privateKeyFile);
        AWSIotMqttClient client = new AWSIotMqttClient(clientEndpoint, clientId, pair.keyStore, pair.keyPassword);

// optional parameters can be set before connect()
        client.connect();

        String topic = "sdk/test/java";
        String payload = "[\n" +
                "{\n" +
                " \"id\": \"1231231234123\",\n" +
                " \"value\": \"25\",\n" +
                " \"unit\": \"°C\",\n" +
                " \"timestamp\": \"1585954728\"\n" +
                "},\n" +
                "{\n" +
                "  \"id\": \"121231231233\",\n" +
                "  \"value\": \"26\",\n" +
                "  \"unit\": \"°B\",\n" +
                "  \"timestamp\": \"1585254728\"\n" +
                "}"+
                "]";

        System.out.println(payload);
        while (true) {
            client.publish(topic, AWSIotQos.QOS0, payload);
            System.out.println("message sent");
            Thread.sleep(2000);
        }

    }

我可以在 aws 控制台上看到成功通過的消息:

在此處輸入圖像描述

但是,如果我將發布主題更改為:

String topic = "sdk/test/java";

至:

String topic = "sensors/temperature";

現在它不再起作用了。 我沒有看到 AWS 控制台中出現任何內容,並且 java 程序顯示某種連接錯誤。 我的第一直覺是某種安全問題,不允許發布到示例程序中使用的主題以外的任何主題。 我沒有 IAM、cognito 等方面的經驗,所以我需要一些指導(如果這是原因的話)

Apr 04, 2020 4:29:05 PM com.amazonaws.services.iot.client.core.AwsIotConnection onConnectionSuccess
INFO: Connection successfully established
Apr 04, 2020 4:29:05 PM com.amazonaws.services.iot.client.core.AbstractAwsIotClient onConnectionSuccess
INFO: Client connection active: sdk-java
Apr 04, 2020 4:29:05 PM com.amazonaws.services.iot.client.core.AwsIotConnection onConnectionFailure
INFO: Connection temporarily lost
Apr 04, 2020 4:29:05 PM com.amazonaws.services.iot.client.core.AbstractAwsIotClient onConnectionFailure
INFO: Client connection lost: sdk-java
Apr 04, 2020 4:29:08 PM com.amazonaws.services.iot.client.core.AwsIotConnection$1 run
INFO: Connection is being retried
Apr 04, 2020 4:29:11 PM com.amazonaws.services.iot.client.core.AwsIotConnection onConnectionSuccess
INFO: Connection successfully established
Apr 04, 2020 4:29:11 PM com.amazonaws.services.iot.client.core.AbstractAwsIotClient onConnectionSuccess
INFO: Client connection active: sdk-java

所以事實證明這只是一個政策問題,我不知道您必須定義哪些 ClientID 以及允許發布/訂閱哪些主題等。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish",
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:us-west-2:<>:topic/sensors/realtime",
        "arn:aws:iot:us-west-2:<>:topic/sdk/test/java",
        "arn:aws:iot:us-west-2:<>:topic/sdk/test/Python",
        "arn:aws:iot:us-west-2:<>:topic/topic_1",
        "arn:aws:iot:us-west-2:<>:topic/topic_2"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:us-west-2:<>:topicfilter/sensors/realtime",
        "arn:aws:iot:us-west-2:<>:topicfilter/sdk/test/java",
        "arn:aws:iot:us-west-2:<>:topicfilter/sdk/test/Python",
        "arn:aws:iot:us-west-2:<>:topicfilter/topic_1",
        "arn:aws:iot:us-west-2:<>:topicfilter/topic_2"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-west-2:<>:client/JavaClient2",
        "arn:aws:iot:us-west-2:<>:client/sdk-java",
        "arn:aws:iot:us-west-2:<>:client/basicPubSub",
        "arn:aws:iot:us-west-2:<>:client/sdk-nodejs-*"
      ]
    }
  ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM