2016-02-12 4 views
9

Я пытаюсь получить доступ к простой службе AWS IOT REST, но я еще не смог сделать это успешно. Вот что я сделал.AWS IOT - учетные данные должны быть скорректированы для обслуживания службы

  1. Я создал IAM пользователя в моих AWS и загрузить ключ доступа и секретный ключ
  2. Записан в AWS ВГД с этим пользователем и создал «вещь»
  3. Из свойства твари я нашел URL REST для тени
  4. Используется Почтальон с новой функцией «AWS подписи» и при условии его с помощью ключа доступа, секретный ключ, регион (нас-восток-1) и имя службы (ВГД)
  5. пытался «GET» конечная точка, и это то, что я получил -

    { "message": "Credential should be scoped to correct service. ", "traceId": "be056198-d202-455f-ab85-805defd1260d" }

  6. Я думал, что что-то не так с почтальоном, так что я попытался с помощью AWS-СДК-образец пример подключения к S3 и изменил его для подключения к URL ВГД. Вот моя программа сниппет (Java)

    String awsAccessKey = "fasfasfasdfsdafs"; 
    String awsSecretKey = "asdfasdfasfasdfasdfasdf/asdfsdafsd/fsdafasdf"; 
    
    URL endpointUrl = null; 
    String regionName = "us-east-1"; 
    try { 
        endpointUrl = new URL("https://dasfsdfasdf.iot.us-east-1.amazonaws.com/things/SOMETHING/shadow"); 
    }catch (Exception e){ 
        e.printStackTrace(); 
    } 
    Map<String, String> headers = new HashMap<String, String>(); 
    headers.put("x-amz-content-sha256", AWSSignerBase.EMPTY_BODY_SHA256); 
    
    AWSSignerForAuthorizationHeader signer = new AWSSignerForAuthorizationHeader(
         endpointUrl, "GET", "iot", regionName); 
    String authorization = signer.computeSignature(headers, 
         null, // no query parameters 
         AWSSignerBase.EMPTY_BODY_SHA256, 
         awsAccessKey, 
         awsSecretKey); 
    
    // place the computed signature into a formatted 'Authorization' header 
    // and call S3 
    headers.put("Authorization", authorization); 
    String response = HttpUtils.invokeHttpRequest(endpointUrl, "GET", headers, null); 
    System.out.println("--------- Response content ---------"); 
    System.out.println(response); 
    System.out.println("------------------------------------"); 
    

Это дает мне ту же ошибку -

--------- Request headers --------- 
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 
Authorization: AWS4-HMAC-SHA256 Credential=fasfasfasdfsdafs/20160212/us-east-1/iot/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=3b2194051a8dde8fe617219c78c2a79b77ec92338028e9e917a74e8307f4e914 
x-amz-date: 20160212T182525Z 
Host: dasfsdfasdf.iot.us-east-1.amazonaws.com 
--------- Response content --------- 
{"message":"Credential should be scoped to correct service. ","traceId":"cd3e0d96-82fa-4da5-a4e1-b736af6c5e34"} 
------------------------------------ 

Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста? В документации AWS не так много информации об этой ошибке. Пожалуйста, помогите

+0

Вы решили проблему? Я с тем же –

+0

такой же проблемой здесь – MeV

ответ

7

Подписать запрос с iotdata вместо если iot
Например:

AWSSignerForAuthorizationHeader signer = new AWSSignerForAuthorizationHeader(
    endpointUrl, "GET", "iotdata", regionName); 
+0

Застрял, пытаясь сделать это через Почтальона. Это немного о «iotdata» не встречается нигде в api docs - спасибо. – kert

+0

Что такое решение для исполнения этого сообщения от почтальона? – user

+0

@user есть опция AWS Signature в почтальоне –

-1

Вместо этого используйте AWS IoT SDK for Node.js. Загрузите сгенерированный закрытый ключ и клиентский сертификат IoT Console, а также сертификат CA Root от here. Начните с скриптов в каталоге примеров.

+1

Это действительно не отвечает на вопрос, который был задан. – alanwill

0

Its в основном из-за имени службы не дано правильно, вы можете воспользоваться услугой Name = «iotdata» вместо ВГД.

Если вы используете управление ключами, тогда имя службы будет км. Для EC2 Service Name будет ec2 и т. Д.

Смежные вопросы