Con la biblioteca de boto, ¿puedo evitar otorgar permisos de lista en un grupo base en S3? - python, amazon-s3, amazon-web-services, boto

Actualmente tengo un rol de IAM que tiene una política como esta:

{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
]
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/"
]
}
]
}

Boto seems to require the ListBucket permission estar presente en la raíz del cubo para hacer la llamada get_bucket. Si elimino el primer hash en la matriz Statement, get_bucket ("blah.example.com") fallará. Aquí está el texto de error:

*** S3ResponseError: S3ResponseError:403 Prohibido

>

¿Hay alguna forma de restringir la lista del grupo a un prefijo determinado (por ejemplo, "prefijo /") mientras se sigue utilizando boto?

ACTUALIZAR

Para que todo funcione, utilicé la siguiente política:

{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
],
"Condition":{
"StringLike":{
"s3:prefix":"prefix/*"
}
}
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/*"
]
}
]
}

Todavía tienes que usar el validate=False parámetro a la get_bucket Método, pero permite su inclusión dentro del prefijo.

Respuestas

5 para la respuesta № 1

Por defecto, Boto intenta validar la existencia.de un cubo haciendo una operación de LISTA en el cubo, pidiendo cero resultados. Si prefiere que se omita este paso de validación, simplemente llámelo así:

>>> import boto
>>> s3 = boto.connect_s3()
>>> bucket = s3.get_bucket("mybucket", validate=False)

Esto debería omitir la operación LISTA.


preguntas relacionadas
Menú