2016-02-12 1 views
9

J'essaie d'accéder à un service AWS IOT REST simple, mais je n'ai pas réussi à le faire pour le moment. Voici ce que j'ai fait.AWS IOT - Les informations d'identification doivent être évaluées pour corriger le service

  1. J'ai créé un utilisateur iam dans mes aws et téléchargé la clé d'accès et clé secrète
  2. vous êtes connecté à AWS IOT avec cet utilisateur et créé une « chose »
  3. J'ai trouvé l'URL REST De la propriété de la chose pour l'ombre
  4. Utilisé Postman avec la nouvelle « signature SSFE » caractéristique et fourni avec la clé d'accès, clé secrète, région (nous-est-1) et le nom du service (IOT)
  5. essayé de « GET » le point final et c'est ce que j'ai -

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

  6. Je pensais qu'il y a quelque chose de mal avec postier donc j'ai essayé d'utiliser aws-sdk-échantillon exemple de se connecter à S3 et changé pour se connecter à l'URL IOT. Voici mon extrait de programme (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("------------------------------------"); 
    

Cela me donne la même erreur -

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

Quelqu'un peut-il me dire ce que je fais mal s'il vous plaît? La documentation AWS n'a pas beaucoup d'informations sur cette erreur. Aidez-vous

+0

Avez-vous résolu le problème? Je suis avec le même –

+0

même problème ici – MeV

Répondre

7

Signez votre demande avec iotdata au lieu si iot
exemple:

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

Était coincé en essayant de le faire par l'intermédiaire de Postman. Ce petit mot sur 'iotdata' ne se trouve nulle part dans les documents api - merci. – kert

+0

Quelle est la solution pour exécuter ceci de facteur? – user

+0

@user il existe une option AWS Signature dans Facteur –

-1

Utilisez plutôt AWS IoT SDK for Node.js. Téléchargez la clé privée et le certificat client générés par l'IoT Console, ainsi que le certificat CA racine, à partir du here. Commencez avec les scripts dans le répertoire examples.

+1

Cela ne répond vraiment pas à la question qui a été posée. – alanwill

0

Son essentiellement en raison de nom du service n'est pas donné correctement, vous pouvez utiliser le service Name = 'iotdata' au lieu de IOT.

Si vous utilisez la gestion des clés, le nom du service sera kms. Pour le nom de service EC2 serait ec2 etc.