He iniciado sesión en una instancia de GCE a través de SSH. Desde allí, me gustaría acceder al almacenamiento con la ayuda de una cuenta de servicio:
GCE> gcloud auth list
Credentialed accounts:
- [email protected] (active)
Primero me aseguré de que esta cuenta de servicio esté marcada como "Puede editar" en los permisos del proyecto en el que estoy trabajando. También me aseguré de darle la ACL de escritura en el depósito. Me gustaría que copiara un archivo:
local> gsutil acl ch -u [email protected]:W gs://mybucket
Pero luego falla el siguiente comando:
GCE> gsutil cp test.txt gs://mybucket/logs
(También me aseguré de que "registros" se crearan en "mybucket").
El mensaje de error que recibo es:
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
¿Qué me estoy perdiendo?
google-cloud-storage
Christophe
fuente
fuente
Respuestas:
Otra cosa que debe buscar es asegurarse de configurar los alcances adecuados al crear la máquina virtual de GCE. Incluso si una máquina virtual tiene una cuenta de servicio adjunta, se le deben asignar ámbitos de almacenamiento para poder acceder a GCS.
Por ejemplo, si hubiera creado su VM con
devstorage.read_only
alcance, intentar escribir en un depósito fallaría, incluso si su cuenta de servicio tiene permiso para escribir en el depósito. Necesitaríasdevstorage.full_control
odevstorage.read_write
.Consulte la sección sobre Preparación de una instancia para usar cuentas de servicio para obtener más detalles.
Nota: la cuenta de servicio informática predeterminada tiene alcances muy limitados (incluido tener solo lectura para GCS). Esto se hace porque la cuenta de servicio predeterminada tiene permisos de IAM de Editor de proyectos. Si utiliza cualquier cuenta de servicio de usuario, esto no suele ser un problema, ya que las cuentas de servicio creadas por el usuario obtienen todos los accesos al alcance de forma predeterminada.
Después de agregar los ámbitos necesarios a la máquina virtual, es
gsutil
posible que todavía se utilicen credenciales almacenadas en caché que no tienen los nuevos ámbitos. Elimina~/.gsutil
antes de volver a intentar los comandos de gsutil. (Gracias a @mndrix por señalar esto en los comentarios).fuente
gsutil
posible que todavía se utilicen credenciales almacenadas en caché que no tienen los nuevos ámbitos. Elimine ~ / .gsutil antes de volver a intentar losgsutil
comandos.Debes iniciar sesión con una cuenta que tenga los permisos que necesitas para ese proyecto:
fuente
gcloud auth revoke <email-account>
vez que haya terminado.gsutil config -b
Luego, navegue hasta la URL que proporciona, [HAGA CLIC en Permitir]
Luego copie el código de verificación y péguelo en la terminal.
fuente
gsutil
desdessh
.-b
. Eso no abrirá un navegador, sino que simplemente escupirá una URL que se puede abrir fuera del shell.He escrito una respuesta a esta pregunta ya que no puedo publicar comentarios:
Este error también puede ocurrir si está ejecutando el
gsutil
comando con unsudo
prefijo en algunos casos.fuente
fuente
gcloud auth login
y siga los pasos.Ref: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
fuente
Así que probé un montón de cosas tratando de copiar del depósito de GCS a mi VM. Espero que esta publicación ayude a alguien.
A través de una conexión SSHed:
y siguiendo este script:
Tengo este error:
Lo que solucionó esto fue la sección "Activación de la API" mencionada en este enlace: https://cloud.google.com/storage/docs/json_api/
Una vez que activé la API, me autentiqué en la ventana SSHed a través de
Después del procedimiento de autenticación, finalmente pude descargar de Google Storage Bucket a mi VM.
PD
Me aseguré de:
Vaya a mi depósito, vaya a la pestaña de permisos y agregue las cuentas de servicio deseadas y configure el permiso / rol de administrador de almacenamiento.
3.Asegúrese de que mi VM tenga los alcances adecuados de acceso a la API de la nube:
fuente
De los documentos: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
Primero debe detener la instancia -> ir a la página de edición -> ir a "Ámbitos de acceso a la API en la nube" y elegir "acceso completo al almacenamiento o lectura / escritura o lo que sea que necesite"
fuente
Cambie los permisos de bucket.
Agregue un usuario para "Todos los usuarios" y otorgue acceso a "Administrador de almacenamiento".
fuente