2016-02-12 9 views
9

シンプルなAWS IOT RESTサービスにアクセスしようとしていますが、まだ正常に動作していません。ここに私がしたことがあります。AWS IOT - サービスを修正するには、資格情報の有効範囲を指定する必要があります

  1. 私はAWSでのIAMユーザーを作成し、アクセスキーをダウンロードして
  2. 秘密鍵は、そのユーザにAWS IOTにログインし、私はREST URLを見つけた事のプロパティから「もの」
  3. を作成影
  4. 新しい「AWS署名」機能で郵便配達に使用
  5. および「GET」しようとしましたアクセスキー、秘密鍵、地域(米国東部-1)とサービス名(IOT)
  6. でそれを提供するためにエンドポイントとこれは私が持っているものです -

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

  7. 私はS3に接続するのAWS-SDK-サンプル例を使用してみましたし、IOTの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コンソールで生成された秘密鍵とクライアント証明書、およびCAルート証明書をhereからダウンロードします。 examplesディレクトリにあるスクリプトから始めます。

+1

それは本当に質問された質問に答えることはできません。 – alanwill

0

そのを基本的に起因するサービス名に正しくあなたの代わりにIOTサービス名=「iotdata」を使用することができます与えられていません。

ユーザーキー管理の場合、サービス名はkmsになります。 EC2サービス名はec2など

関連する問題