Политический документ AWS IOT - PullRequest
1 голос
/ 01 июня 2019

У меня есть приложение, в котором у каждого клиента есть своя вещь, для каждой вещи я создаю сертификат и прикрепляю его к вещи, я также прикрепляю к сертификату следующую политику.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:*",
    "Resource": ["arn:aws:iot:us-east-1:*********:topic/${iot:Connection.Thing.ThingName}"]
    }
  ]
}

Я хочу ограничить доступ клиента к вещам других клиентов, и каждый клиент может иметь полный доступ к своей теме.

Указанная выше политика не работает, клиенты вообще не могут подключиться. Однако работает следующее (с точки зрения функциональности), но клиенты могут публиковать все темы.

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

Также успешно подключается следующее, но не публикуется:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": [
        "arn:aws:iot:us-east-1:******:topic/${iot:Connection.Thing.ThingName}"
      ]
    }
  ]
}

Наконец, следующее соединение успешно подключается и публикуется.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": [
        "arn:aws:iot:us-east-1:******:topic/*"
      ]
    }
  ]
}

Конфигурации клиента MQTTBox: client configs

Издатель: publisher settings

Что я делаю не так?

1 Ответ

1 голос
/ 05 июня 2019

Политике нужен явный оператор iot:Connect, чтобы разрешить подключения к ресурсу client.

Соответствующий ресурс client задокументирован в https://docs.aws.amazon.com/iot/latest/developerguide/action-resources.html как

Идентификатор клиента ARN - arn: aws: iot: us-east1: 123456789012: client / myClientId

Для объекта, зарегистрированного в реестре IoT AWS, можно использовать:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": ["arn:aws:iot:us-east-1:*********:client/${iot:Connection.Thing.ThingName}"]
    },
    {
      "Effect": "Allow",
      "Action": "iot:*",
      "Resource": ["arn:aws:iot:us-east-1:*********:topic/${iot:Connection.Thing.ThingName}"]
    }
  ]
}

например, этот пример позволит объекту с идентификатором клиента ThingId123 публиковать в теме с именем ThingId123.

См. Также https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html для примера, который появляетсячтобы точно соответствовать вашим потребностям.

...