2016-06-30 6 views
3

Ich habe die ersten Schritte here ausgeführt, um Anmeldeinformationen und einen S3-Bucket zu konfigurieren. Dann in meinem Code, ich habe:AWS SDK für iOS: Die Dateien in einem S3-Bucket können nicht aufgelistet werden

func setupCredentialsProvider() { 
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1, identityPoolId:identityPoolIdStr) 
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

    AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) 
} 

func listObjects() { 
    let s3 = AWSS3.defaultS3() 

    let listObjectsRequest = AWSS3ListObjectsRequest() 
    listObjectsRequest.bucket = S3BucketName 
    s3.listObjects(listObjectsRequest).continueWithBlock { (task) -> AnyObject! in 
     if let error = task.error { 
      print("listObjects failed: [\(error)]") 
     } 
     if let exception = task.exception { 
      print("listObjects failed: [\(exception)]") 
     } 
} 

Wenn ich die app und listObjects() laufen genannt wird, bekomme ich diesen Fehler:

listObjects failed: [Error Domain=com.amazonaws.AWSServiceErrorDomain Code=11 "(null)" UserInfo={HostId=, Message=Access Denied, Code=AccessDenied, RequestId=}]

Was bin ich?

+0

hat Ihre cognito Rolle hat die Erlaubnis s3 Eimers zur Liste? – Karthik

Antwort

0

Wenn es etwas wie das Problem ist, das ich hatte, ist Ihr authentifizierter Cognito-Benutzer nicht berechtigt, auf einen bestimmten S3-Bucket zuzugreifen. Lesen Understanding Amazon Cognito Authentication Part 3: Roles and Policies gab mir den Schlüssel ich brauchte, und zwar:

When you create your identity pool via the Cognito console, it will create two roles for you, one for authenticated users and one for unauthenticated users, but you can visit the IAM Console and create more roles than just these. You can also modify the existing roles to add support for additional services such as Amazon S3 or Amazon DynamoDB, depending on your use case.

Also beschloss ich, die erstellte Rolle für authentifizierte Benutzer zu ändern, den Zugriff auf meinen S3 Eimer zu ermöglichen:

  1. Wechseln Sie zu Ihrer IAM-Konsole und finden Eine Rolle namens etwa wie folgt: xxxx_auth_yyy - die auth Teilzeichenfolge ist der wichtige Teil wie identifiziert die Rolle als die für authentifizierte Benutzer.
  2. Verwenden Sie diese Rolle, um authentifizierten Benutzern Berechtigungen zuzuweisen:
  3. Erstellen Sie eine Richtlinie (Richtlinien -> Richtlinie erstellen), um den für den bestimmten Bucket erforderlichen Zugriff bereitzustellen.
  4. "Anhängen" Sie diese Richtlinie an die authentifizierte Rolle (Rollen -> xxxx_auth_yyy -> Attach Policy).
  5. Ihr Code sollte jetzt in der Lage sein, die Dateien in einem bestimmten S3-Bucket aufzulisten.

Beispiel Politik (Schritt 3):

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetObject", 
       "s3:PutObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::BUCKET_NAME*" 
      ] 
     } 
    ] 
} 
Verwandte Themen