AWS Политика IoT без вставки переменных политики (iot: ClientId) - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь настроить Just In Time Provisioning (JITP), как описано в этом до c https://aws.amazon.com/blogs/iot/setting-up-just-in-time-provisioning-with-aws-iot-core/. Мне удалось создать сценарий, который создает все сертификаты CA, регистрирует их с помощью AWS CLI и присоединяет шаблон обеспечения к сертификату. Когда я пытаюсь подключить устройство в первый раз, сертификат и устройство создаются как обычно, но политика, которую я создал для подключения к сертификату, не вставляет {iot:clientID}. Я также пытался использовать другие переменные, такие как {iot:Connection.Thing.ThingName}, но, похоже, ничего не работает. Я смог убедиться, что код и все остальное работает, жестко запрограммировав clientID в шаблоне моей политики, поэтому единственная проблема заключается в том, что переменные не вставляются.

Я подумал, что, возможно, это могло быть из-за роли IAM не хватает разрешений? На данный момент он имеет только разрешения AWSIoTThingsRegistration, AWSIOTLogging и AWSIOTRulesAction, как указано в do c выше. Или, может быть, просто политика не может использовать эти переменные при автоматической инициализации устройств, хотя в документах по предоставлению шаблонов нет ничего, что подсказывает это?

Моя политика для справки:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:eu-west-1:ACCOUNTID:topic/PROJECTTOPIC/"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:eu-west-1:ACCOUNTID:client/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": [
        "arn:aws:iot:eu-west-1:ACCOUNTID:topic/PROJECTTOPIC/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": [
        "arn:aws:iot:eu-west-1:ACCOUNTID:topicfilter/PROJECTTOPIC/${iot:ClientId}"
      ]
    }
  ]
}

I не знаю, насколько это уместно, но вот моя политика обеспечения:

{
 "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::Country\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::Id\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::CommonName\" : { \"Type\" : \"String\" } }, \"Resources\" : { \"thing\" : { \"Type\" : \"AWS::IoT::Thing\", \"Properties\" : { \"ThingName\" : {\"Ref\" : \"AWS::IoT::Certificate::CommonName\"}, \"AttributePayload\" : { \"version\" : \"v1\", \"country\" : \"IE\"} } }, \"certificate\" : { \"Type\" : \"AWS::IoT::Certificate\", \"Properties\" : { \"CertificateId\": {\"Ref\" : \"AWS::IoT::Certificate::Id\"}, \"Status\" : \"ACTIVE\" } }, \"policy\" : {\"Type\" : \"AWS::IoT::Policy\", \"Properties\" : { \"PolicyName\" :  \"MYPOLICYNAME\"} } } }",
 "roleArn":"arn:aws:iam::ACCOUNTID:role/MYROLENAME"
}

Я довольно новичок в использовании политик IAM, поэтому любые советы или помощь будут высоко оценены.

1 Ответ

0 голосов
/ 20 марта 2020

Получается, что это проблема с разрешениями. Если вы пытаетесь использовать шаблон политики для JITP, попробуйте добавить AWSIoTConfigReadOnlyAccess в вашу роль IAM. Это не требуется для обычных действий JITP, но если вы пытаетесь получить доступ к данным Thing, это так.

...