2017-05-10 4 views
1

Ich versuche, "ListObjects" -Operation für einen Bucket zu verwenden. Der Zugriff erfolgt über einen WebService und ich möchte dem Benutzer keinen Zugriff auf die Konsole geben.Abrufen von "AccessDenied" beim Zugriff auf S3 mit Cognito Token

Rolle Politik

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "mobileanalytics:PutEvents", 
       "cognito-sync:*", 
       "cognito-identity:*" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Effect": "Allow", 
      "Resource": [ 
       "arn:aws:s3:::BucketName" 
      ], 
      "Condition": { 
       "StringLike": { 
        "s3:prefix": [ 
         "${cognito-identity.amazonaws.com:sub}/*" 
        ] 
       } 
      } 
     } 
    ] 
} 

Vertrauensrichtlinie

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Federated": "cognito-identity.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRoleWithWebIdentity", 
     "Condition": { 
     "StringEquals": { 
      "cognito-identity.amazonaws.com:aud": "somevalue" 
     }, 
     "ForAnyValue:StringLike": { 
      "cognito-identity.amazonaws.com:amr": "authenticated" 
     } 
     } 
    } 
    ] 
} 

Wenn ich "$ {cognito-identity.amazonaws.com:sub}" mit dem tatsächlichen Wert zu ersetzen, dann funktioniert es, sonst gibt es AccessDenied-Fehler Es scheint, als würde ich etwas sehr Einfaches vermissen. Bitte helfen Sie.

Fehler:

cfId:undefined 
code:"AccessDenied" 
extendedRequestId:undefined 
message:"Access Denied" 
region:null 
requestId:null 
retryDelay:14.650563118124381 
retryable:false 
statusCode:403 
time:Sun May 14 2017 23:11:57 GMT+0530 
name:"AccessDenied" 
stack:"AccessDenied: Access Denied↵ at constructor.extractError (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:24:11663)↵ at constructor.callListeners (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:27756)↵ at constructor.emit (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:27465)↵ at constructor.emitEvent (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:15469)↵ at constructor.e (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:11925)↵ at a.runTo (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:24:27302)↵ at http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:24:27509↵ at constructor.<anonymous> (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:12135)↵ at constructor.<anonymous> (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:15524)↵ at constructor.callListeners (http://localhost:8081/aws-cognito/aws-sdk-2.3.5.min.js:23:27862)" 
__proto__:Object 
+0

Das mag albern klingen, aber, können Sie die vollständige Fehlermeldung in die Frage bitte kopieren? –

Antwort

1

Wie sich herausstellte, war es ein dummer Fehler von meiner Seite. Sub ist immer in der Form: us-east-1: 12345678-1234-1234-1234-123456790ab.

Ich kopierte die SUB von Cognito-IDP, die falsch war. Es ist der falsche SUB.

Der SUB ist IdentityId, die wir von Cognito Identity Pool erhalten.

Danke fürs schauen.

Verwandte Themen