Ich versuche, allgemeinen Zugriff auf einen Bucket mithilfe einer S3-Bucket-Richtlinie bereitzustellen und gleichzeitig den spezifischen Zugriff auf eine Rolle mithilfe einer Rollenrichtlinie zuzulassen. Die Rolle wird von einer Lambda-Funktion zum Behandeln von Objekten im Bucket verwendet. Es wird an der ersten Hürde gestoppt - es kann nichts mit dem Präfix "incoming /" erhalten werden, obwohl es in der Rollenrichtlinie erlaubt ist und nicht explizit in der Bucket-Richtlinie verweigert wird.S3-Bucket-Richtlinie und IAM-Rollenkonflikt
Role-Politik:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBucketPut",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucket-name/*"
},
{
"Sid": "AllowIncomingGetDelete",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::bucket-name",
"Condition": {
"StringLike": {
"s3:prefix": "incoming/*"
}
}
}
]
}
Hinweis: Ich habe auch versucht, den Zustand zu entfernen und die Änderung der Ressource "arn: aws: s3 ::: eimer Name/incoming *", die nur zu ändern schien wie der Richtliniensimulator hat sich verhalten. Noch eine Anmerkung: GET aus dem Eimer mit "incoming/*" Präfix funktioniert im Simulator, nur nicht in der Praxis.
Ich habe keine Aussagen in der folgenden Bucket-Richtlinie entfernt, da ich nicht sicher bin, was relevant sein könnte. IP-Adressen wurden weggelassen.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicList",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name",
"Condition": {
"StringLike": {
"s3:prefix": "public*"
}
}
},
{
"Sid": "AllowPublicGet",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/public*"
},
{
"Sid": "AllowPrivateList",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name",
"Condition": {
"StringLike": {
"s3:prefix": "private*"
},
"IpAddress": {
"aws:SourceIp": [
"..."
]
}
}
},
{
"Sid": "AllowPrivateGet",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/private*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"..."
]
}
}
},
{
"Sid": "AllowIncomingPut",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket-name/incoming*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"..."
]
}
}
}
]
}
Entschuldigung für die Wand des Textes.
Ich verstehe nicht, warum meine Rolle nicht Objekte mit dem Präfix "incoming /" abrufen kann.
Die Lambda-Funktion wird immer 403 Zugriff verweigert, wenn die folgenden Aktionen ausführen:
versuchenS3.download_file(bucket, key, localfile)
Vielen Dank für die Klarstellung. Wie im Post erwähnt, bekomme ich das gleiche Verhalten, indem ich die Ressource beschreibe, die Sie beschreiben. Ich habe das Problem herausgefunden ... irgendwie. Ich werde aktualisieren, wenn ich wieder bei der Arbeit bin. – unclemeat