2014-10-29 7 views
8

Ich habe eine nicht authentifizierte Rolle unter Amazon Cognito Identity-Pool eingerichtet. Mein Ziel ist, dass Gastbenutzer meiner mobilen App Debug-Protokolle (kleine Textdateien) in meinen S3-Bucket hochladen können, damit ich Probleme beheben kann. Ich bemerke, dass ich "Zugriff verweigert" von S3 erhalten würde, wenn ich meine S3-Bucket-Berechtigung nicht ändere. Wenn ich das Hinzufügen von "Jeder" zum Hochladen/Löschen zulassen möchte, ist der Upload der Datei erfolgreich. Meine Sorge ist, dass jemand dann große Dateien in meinen Bucket hochladen und ein Sicherheitsproblem verursachen könnte. Was ist die empfohlene Konfiguration für meine Bedürfnisse oben? Ich bin ein Neuling für S3 und Cognito.Amazon S3-Bucket-Berechtigung für nicht authentifizierte Cognito-Rolle Benutzer

Ich benutze Amazon AWS SDK für iOS, aber ich nehme an, diese Frage ist plattformneutral.

Edit: Meine Politik ist wie folgt:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "iam:GetUser", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListAllMyBuckets" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:CreateBucket", 
     "s3:DeleteBucket", 
     "s3:DeleteObject", 
     "s3:GetBucketLocation", 
     "s3:GetObject", 
     "s3:ListBucket", 
     "s3:PutObject" 
     ], 
     "Resource": ["arn:aws:s3:::import-to-ec2-*", "arn:aws:s3:::<my bucket name>/*"] 
    } 
    ] 
} 

Antwort

3

Sie haben keine S3 Eimer Erlaubnis ändern müssen, sondern die IAM-Rolle mit Ihrer Identität Pool zugeordnet. Versuchen Sie Folgendes:

  1. Besuchen Sie die IAM console.
  2. Suchen Sie nach der Rolle, die Ihrem Identitätspool zugeordnet ist.
  3. Bringen Sie eine Politik ähnlich der folgenden auf Ihre Rolle: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MYBUCKET/*"] } ] }
  4. ersetzen MYBUCKET mit Ihrem Eimer Namen
  5. Zugriff auf Ihre Eimer wie gewohnt aus Ihrer Anwendung verwenden Sie das iOS SDK und Cognito

können Sie möchten, dass Sie die Berechtigungen weiter einschränken, einschließlich ${cognito-identity.amazonaws.com:sub}, um Ihre Benutzer zu partitionieren, aber die oben genannte Richtlinie wird Ihnen den Einstieg ermöglichen.

+0

{ "Version": "2012.10.17", "Statement": [ { "Effect": "Erlauben", "Aktion": "iam: GetUser", "Ressource": "*" }, { "Effect": "Erlauben", "Aktion": [ "s3: ListAllMyBuckets" ], "Ressource": "*" }, { "Effect": "Erlauben", "Aktion": [ "s3: createBucket", "s3: DeleteBucket", "s3: DeleteObject", "s3: GetBucketLocation", "s3: GetObject", "s3: ListBucket", "s3: PutObject" ], "Ressource": ["arn: aws: s3 ::: import-zu-ec2- *", "arn: aws: s3 ::: /*"] } ] } –

+0

Dies ist meine Richtlinie, aber der Upload der Datei ist immer noch fehlgeschlagen. –

+0

Wenn Sie den AWSCognitoCredentialsProvider verwenden, werden die verwendeten Anmeldeinformationen zwischengespeichert. Sie können eine Aktualisierung erzwingen, um sicherzustellen, dass Ihre Anmeldeinformationen die neue Richtlinie widerspiegeln. Wenn Sie weiterhin Probleme haben, geben Sie bitte den Code sowie den spezifischen Fehler an, den Sie erhalten, damit wir das Problem besser diagnostizieren können. –

0

Die obige Antwort ist unvollständig seit 2015, Sie müssen BEIDE Rolle und den Bucket-Polity in S3 autorisieren, um diese Rolle zu autorisieren, in den Bucket zu schreiben. Verwenden Sie s3: PutObject in beiden Fällen. Die Konsole hat Assistenten für beide Fälle

+0

Als Stand von 2017 musste ich die Bucket-Politik überhaupt nicht ändern. Das Festlegen der S3-Rechte über die IAM-Rolle war ausreichend. –

+0

@VolkerRose AWS hat nach dem Verizon-Hack die S3-Bucket-Richtlinienlogik geändert. Sie hätten eine Benachrichtigung darüber erhalten sollen. Ja, du hast Recht. – einarc

1

Wie @einarc sagte (kann noch nicht kommentieren), um es funktioniert zu machen, musste ich Rolle und Bucket Policy bearbeiten.Das ist gut genug für die Prüfung:

Bucket-Politik:

{ 
    "Id": "Policy1500742753994", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1500742752148", 
     "Action": "s3:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::admin1.user1", 
     "Principal": "*" 
    } 
    ] 
} 

authentifizierte Rolle der Politik:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::*" 
      ] 
     } 
    ] 
}