Интеграция Cognito + IoT - Как ограничить клиента, чтобы он мог подписаться на MQTT topi c только с именем в качестве идентификатора пользователя Cognito? - PullRequest
0 голосов
/ 18 июня 2020

Я ищу способ аутентифицировать пользователей Cognito в службе AWS IoT, чтобы пользователь мог подписаться на имя c MQTT topi в качестве единственного идентификатора пользователя (из пула идентификаторов когнито). Я знаю, что с помощью 2-х шагового процесса этого можно достичь.

То, что я не знаю, это специфика c политика , которую нам нужно привязать к идентификатору Cognito (он же пользователь), политика должна ограничивать пользователя подпиской на его / ее идентификатор пользователя - MQTT topi c. Это означает, что приложение не может подписаться на какие-либо другие непредусмотренные темы.

Более того, политика должна быть динамической c (возможно, с использованием $ {ognito-identity.amazon aws .com: sub} и условий) для упрощения разработки

Стоит отметить, что пользователь может одновременно входить в несколько экземпляров мобильного приложения (Android и iOS), а если пользователь вошел в систему, в Android и iOS чем оба экземпляра приложения должны иметь возможность подписаться на один и тот же topi c (потому что идентификатор пользователя останется таким же для одного и того же пользователя).

1 Ответ

0 голосов
/ 01 июля 2020

Наконец, я решил. Поделитесь решением, если оно может помочь другим. Шаги следующие:

  1. Нам нужно прикрепить политику IAM к роли Cognito аутентифицированного пользователя. Прилагаемая политика должна РАЗРЕШАТЬ операции – iot: Subscribe, iot: Connect, iot: Receive. Окончательная политика должна выглядеть, как показано ниже.

    {
     "Version": "2012-10-17",
      "Statement": [
        {
        "Sid": "Stmt1232909773123",
         "Action": [
         "iot:Connect",
         "iot:Receive",
         "iot:Subscribe"
          ],
        "Effect": "Allow",
        "Resource": "*"
      }
    ]
    }
    
  2. Политика Интернета вещей, которую необходимо привязать к идентификатору (когнитивного), должна быть следующей:

    {
     "Version": "2012-10-17",
     "Statement": [
      {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:us-east-1:<account-number>:client/*"
      },
      {
      "Effect": "Allow",
      "Action": [
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:<account-number>:topic/${cognito-identity.amazonaws.com:sub}"
      ]
     },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:<account-number>:topicfilter/${cognito-identity.amazonaws.com:sub}"
      ]
    }
    ] 
    }
    

ПРИМЕЧАНИЕ: для # 2 вам необходимо указать номер вашей учетной записи AWS в политике

...