Configurar gsutil s3 en Docker de Google Cloud SDK.
Tengo el SDK de Google Cloud configurado y funcionando en mi máquina con Windows después de seguir esto: https://hub.docker.com/r/google/cloud-sdk/.
Estoy intentando ejecutar este comando para listar un bucket de s3:
docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gsutil ls s3://bucketname
La autenticación falla debido a que no se establecieron las llaves de AWS. Presumo que la falta se debe a que el archivo .boto
no tiene establecidos los valores aws_access_key_id
y aws_secret_access_key
. No puedo parecer averiguar cómo establecer esas variables.
Intenté ejecutar esto para generar un archivo .boto
, pero el bucket se compartió conmigo y no tengo las llaves de acceso:
docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gsutil config -a
¿Me estoy perdiendo algo o hay alguna otra manera de establecer estas credenciales de AWS? ¿Tal vez con gcloud config set
?
Aquí está el registro de errores:
“`
ERROR 1202 03:16:07.326810 utils.py] Caught exception reading instance data
Traceback (most recent call last):
File "/usr/lib/python3.7/urllib/request.py", line 1324, in do<em>open
encode</em>chunked=req.has<em>header('Transfer-encoding'))
File "/usr/lib/python3.7/http/client.py", line 1260, in request
self.</em>send<em>request(method, url, body, headers, encode</em>chunked)
File "/usr/lib/python3.7/http/client.py", line 1306, in <em>send</em>request
self.endheaders(body, encode<em>chunked=encode</em>chunked)
File "/usr/lib/python3.7/http/client.py", line 1255, in endheaders
self.<em>send</em>output(message<em>body, encode</em>chunked=encode<em>chunked)
File "/usr/lib/python3.7/http/client.py", line 1030, in _send</em>output
self.send(msg)
File "/usr/lib/python3.7/http/client.py", line 970, in send
self.connect()
File "/usr/lib/python3.7/http/client.py", line 942, in connect
(self.host,self.port), self.timeout, self.source<em>address)
File "/usr/lib/python3.7/socket.py", line 727, in create</em>connection
raise err
File "/usr/lib/python3.7/socket.py", line 716, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/utils.py", line 220, in retry<em>url
r = opener.open(req, timeout=timeout)
File "/usr/lib/python3.7/urllib/request.py", line 525, in open
response = self.</em>open(req, data)
File "/usr/lib/python3.7/urllib/request.py", line 543, in <em>open
'</em>open', req)
File "/usr/lib/python3.7/urllib/request.py", line 503, in <em>call</em>chain
result = func(<em>args)
File "/usr/lib/python3.7/urllib/request.py", line 1352, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/usr/lib/python3.7/urllib/request.py", line 1326, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 111] Connection refused>
ERROR 1202 03:16:07.328018 utils.py] Unable to read instance data, giving up
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/platform/gsutil/gsutil", line 21, in <module>
gsutil.RunMain()
File "/usr/lib/google-cloud-sdk/platform/gsutil/gsutil.py", line 122, in RunMain
sys.exit(gslib.<strong>main</strong>.main())
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/<strong>main</strong>.py", line 444, in main
user_project=user_project)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/<strong>main</strong>.py", line 783, in _RunNamedCommandAndHandleExceptions
_HandleUnknownFailure(e)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/<strong>main</strong>.py", line 640, in _RunNamedCommandAndHandleExceptions
user_project=user_project)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/command_runner.py", line 412, in RunNamedCommand
return_code = command_inst.RunCommand()
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/commands/ls.py", line 683, in RunCommand
listing_helper.ExpandUrlAndPrint(storage_url))
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/utils/ls_helper.py", line 372, in ExpandUrlAndPrint
print_initial_newline=False)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/utils/ls_helper.py", line 449, in _RecurseExpandUrlAndPrint
bucket_listing_fields=self.bucket_listing_fields):
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/wildcard_iterator.py", line 540, in IterAll
expand_top_level_buckets=expand_top_level_buckets):
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/wildcard_iterator.py", line 174, in <strong>iter</strong>
fields=bucket_listing_fields):
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/boto_translation.py", line 447, in ListObjects
headers=headers)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/storage_uri.py", line 166, in list_bucket
bucket = self.get_bucket(headers=headers)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/storage_uri.py", line 181, in get_bucket
conn = self.connect()
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/storage_uri.py", line 117, in connect
*</em>connection<em>args)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/s3/connection.py", line 205, in <strong>init</strong>
validate</em>certs=validate<em>certs, profile</em>name=profile<em>name)
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/connection.py", line 573, in <strong>init</strong>
host, config, self.provider, self.</em>required<em>auth</em>capability())
File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/vendored/boto/boto/auth.py", line 1032, in get<em>auth</em>handler
'Check your credentials' % (len(names), str(names)))
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['S3HmacAuthV4Handler'] Check your credentials
“`
davy.ai
Problema de acceso a un bucket de S3 con Google Cloud SDK Docker
Problema
El usuario ha configurado Google Cloud SDK Docker en su máquina con Windows y está intentando listar un bucket de S3 usando el siguiente comando:
Sin embargo, la autenticación falla debido a que las claves de acceso de AWS no están configuradas. El usuario intentó generar un archivo
.boto
usando el comandodocker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gsutil config -a
, pero no pudo hacerlo porque no tenía las claves de acceso para el bucket.Ahora, el usuario está intentando averiguar cómo configurar estas credenciales de AWS, posiblemente usando el comando
gcloud config set
.Solución
El registro de errores indica que el problema puede estar en que las credenciales no están configuradas correctamente. La última línea del registro de errores indica
No handler was ready to authenticate. 1 handlers were checked. ['S3HmacAuthV4Handler'] Check your credentials
, lo que confirma que hay un problema con las credenciales.Para configurar las claves de acceso de AWS, el usuario puede usar la herramienta
gsutil
para configurar las variables de entornoAWS_ACCESS_KEY_ID
yAWS_SECRET_ACCESS_KEY
.Para establecer las variables de entorno, el usuario puede ejecutar los siguientes comandos:
Sustituya
<access_key>
y<secret_key>
por los valores correspondientes.Una vez establecidas las variables de entorno, el usuario puede ejecutar el comando
docker run
con la opción--env
para pasar las variables de entorno al contenedor Docker:Esto debería permitir que el usuario acceda al bucket de S3 desde el contenedor Docker de Google Cloud SDK.