Martín Talski
Tengo acceso de S3 solo a un directorio específico en un depósito de S3.
Por ejemplo, con el s3cmd
comando si trato de enumerar todo el cubo:
$ s3cmd ls s3://bucket-name
me sale un error: Access to bucket 'my-bucket-url' was denied
Pero si trato de acceder a un directorio específico en el depósito, puedo ver el contenido:
$ s3cmd ls s3://bucket-name/dir-in-bucket
Ahora quiero conectarme al cubo S3 con python boto. Similarmente con:
bucket = conn.get_bucket('bucket-name')
me sale un error: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
Pero si intento:
bucket = conn.get_bucket('bucket-name/dir-in-bucket')
El script se detiene durante unos 10 segundos y luego muestra un error. Bellow es el seguimiento completo. ¿Alguna idea de cómo proceder con esto?
Tenga en cuenta que la pregunta es sobre el módulo boto versión 2, no boto3.
Traceback (most recent call last):
File "test_s3.py", line 7, in <module>
bucket = conn.get_bucket('bucket-name/dir-name')
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 471, in get_bucket
return self.head_bucket(bucket_name, headers=headers)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 490, in head_bucket
response = self.make_request('HEAD', bucket_name, headers=headers)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 633, in make_request
retry_handler=retry_handler
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1046, in make_request
retry_handler=retry_handler)
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 922, in _mexe
request.body, request.headers)
File "/usr/lib/python2.7/httplib.py", line 958, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.7/httplib.py", line 992, in _send_request
self.endheaders(body)
File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
self.send(msg)
File "/usr/lib/python2.7/httplib.py", line 776, in send
self.connect()
File "/usr/lib/python2.7/httplib.py", line 1157, in connect
self.timeout, self.source_address)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known
-
Debe usar llaves alrededor de object_summary.key para trabajar en python3. imprimir (objeto_resumen.clave)
– Pecho Dimitrov
26 de julio de 2018 a las 7:26
-
la parte más extraña es que Prefix=”dir_name” funcionó en mi máquina Linux, pero para ejecutar esto en lambda, es importante usar Prefix=”dir_name/”, no pude entender por qué la barra diagonal sería significativa para hacerlo trabajar en lambda.
– yash
9 de marzo de 2022 a las 22:44
-
¿Cómo limitar la profundidad de búsqueda?
– Gulzar
25/12/2022 a las 17:00
-
tal vez debido a las diferencias del sistema operativo @yash
– Gunesh Shanbhag
25 de diciembre de 2022 a las 17:57
-
@Gulzar si sabe exactamente lo que quiere, no pagine, es costoso, podría usar más filtros str una vez que obtenga todos los nombres de archivo sin recuperar ningún dato.
– yash
28 de diciembre de 2022 a las 12:03
-
gracias, esto funcionó para mí, solo necesitaba agregar una barra inclinada (‘/’) al final del nombre del depósito, de lo contrario, todavía recibí el error 403.
– Martín Taleski
4 de diciembre de 2014 a las 13:04
-
Sí, eso tiene sentido. Aprobé su edición a mi ejemplo. Me alegro de que te funcione.
– garnacha
4 de diciembre de 2014 a las 13:18
-
¿Por qué se necesita el final “/”? Puedo confirmar que se requiere en mi instancia, pero no pude encontrar documentación al respecto.
– dbn
13 de diciembre de 2016 a las 0:34
-
En general: ¿cuál es la diferencia entre optar por un enfoque basado en boto3.resource o boto3.cleint o boto3.session y qué enfoque seguir bajo qué condiciones?
– v.j.
25 de febrero de 2019 a las 10:51
-
Para cualquier confusión, se prefiere boto3.resource. También aquí está la diferencia entre cliente y recurso: stackoverflow.com/questions/42809096/…
– Nagaraj Tantri
12 de julio de 2021 a las 12:06
-
El OP mencionó que
get_bucket
le estaba dando un 403– ChrisWue
28 de marzo de 2017 a las 1:06
-
¿Cómo leo el contenido de un archivo en particular a una variable de esto?
– RB17
28 de agosto de 2019 a las 21:31
-
@Rahul Supongo que file.read() debería funcionar. Pero entonces tendré que comprobarlo una vez.
– reetesh11
30 de agosto de 2019 a las 5:25
-
@ChrisWue Eso podría deberse a una clave de acceso secreta incorrecta
– reetesh11
30 de agosto de 2019 a las 5:26
-
OP tiene acceso específico a un archivo o carpeta dentro de un depósito, pero no tiene acceso a un depósito. Estoy en la misma posición, puedo acceder a archivos y carpetas dentro de la GUI de AWS, pero no puedo hacer nada en boto3.
–Michael Hayes
5 sep 2021 a las 17:18
Tal vez deberías usar
my-bucket-url/dir-in-bucket
en lugar demy-bucket-url/my-bucket-url
en tu guion?– Alex Lisovoy
4 de diciembre de 2014 a las 10:57
lo siento, eso fue un error al intentar eliminar los nombres reales del cubo y el directorio.
– Martín Taleski
4 de diciembre de 2014 a las 12:22