2016-02-12 14 views
9

Sto tentando di accedere a un semplice servizio AWS IOT REST ma non sono ancora riuscito a farlo. Ecco cosa ho fatto.AWS IOT - Le credenziali devono avere un ambito per correggere il servizio

  1. ho creato un utente iam nei miei AWS e scaricato la chiave di accesso e la chiave segreta
  2. Collegato in AWS IOT con quell'utente e ha creato una "cosa"
  3. Dalla proprietà della cosa che ho trovato l'URL REST per l'ombra
  4. Utilizzato postino con la nuova funzione "AWS firma" e fornito con la chiave di accesso, chiave segreta, regione (us-est-1) e il nome del servizio (IOT)
  5. cercato di "GET" l'endpoint e questo è quello che ho ottenuto -

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

  6. ho pensato che c'è qualcosa di sbagliato con il postino così ho provato ad utilizzare ad esempio AWS-sdk-campione di connessione a S3 e cambiato per collegarsi all'URL IOT. Ecco il mio programma di frammento (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("------------------------------------"); 
    

Questo mi dà lo stesso errore -

--------- 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"} 
------------------------------------ 

Qualcuno può dirmi che cosa sto facendo male per favore? La documentazione di AWS non ha molte informazioni su questo errore. Please help

+0

hai risolto il problema? Sto con lo stesso problema –

+0

qui – MeV

risposta

7

firmare i tuoi richiesta con iotdata invece se iot
esempio:

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

Era bloccato cercando di farlo attraverso Postman. Questo poco di "iotdata" non si trova da nessuna parte in documenti API, grazie. – kert

+0

Qual è la soluzione per eseguire questo dal postino? – user

+0

@user esiste un'opzione di firma AWS nel postino –

-1

Utilizzare invece l'AWS IoT SDK for Node.js. Scarica la chiave privata generata dalla console IoT e il certificato cliente nonché il certificato CA Root da here. Inizia con gli script nella directory degli esempi.

+1

Questo in realtà non risponde alla domanda che è stata posta. – alanwill

0

sua fondamentalmente dovuto al nome del servizio non è dato correttamente è possibile utilizzare il servizio Name = 'iotdata' invece di oggetti.

Se si utilizza la gestione delle chiavi, il nome del servizio dovrebbe essere km. Per Nome servizio EC2 sarebbe ec2 ecc.

Problemi correlati