Я пытаюсь предоставить общий доступ к ведром с использованием политики веток S3, а также разрешая конкретный доступ к роли с помощью политики ролей. Роль используется функцией Lambda для обработки объектов в ведре. Он останавливается при первом препятствии - он не может получить что-либо с префиксом «входящий /», даже если он разрешен в политике ролей и явно не запрещен в политике ведра.S3 Bucket Policy и IAM Role Conflicting
Роль политики:
{
"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/*"
}
}
}
]
}
Примечание: Я также попытался удалить состояние и изменение ресурса в «ARN: AWS: s3 ::: ковшового имя/входящий *», который, казалось, только изменить то, как симулятор политики вел себя. Другое примечание: GET из ведра с префиксом «входящий/*» работает в симуляторе, просто не на практике.
Я не удалял никаких утверждений в политике ниже, поскольку я не уверен, что может быть актуальным. IP-адреса опущены.
{
"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": [
"..."
]
}
}
}
]
}
Извинения за стену текста.
Я не понимаю, почему моя роль не может получить объекты с префиксом «входящий /».
Функция Lambda получает 403 Access Denied при выполнении следующих действий:
S3.download_file(bucket, key, localfile)
Большое спасибо за разъяснение. как упоминалось в сообщении, я получаю то же поведение, указывающее ресурс, как вы описываете. Я разобрался с проблемой ... sortof. Я обновлю, когда вернусь на работу. – unclemeat