Antes de realizar solicitudes a Earth Engine a través de una biblioteca cliente, debes autenticarte y usar las credenciales resultantes para inicializar el cliente de Earth Engine.
Editor de código de Earth Engine y JavaScript
La autenticación y la inicialización se controlan automáticamente en el editor de código. Puedes elegir enrutar las solicitudes a través de un proyecto de Cloud desde tu acceso en la parte superior derecha del editor de código.
Si usas la API de JavaScript (fuera del editor de código), usa uno de los asistentes de autenticación en ee.data (por ejemplo, ee.data.authenticateViaPopup()) seguido de ee.initialize(), como se muestra en este ejemplo.
Python y línea de comandos
Antes de usar la biblioteca cliente de Python de Earth Engine, debes autenticarte (verificar tu identidad) y usar las credenciales resultantes para inicializar el cliente de Python. Los flujos de autenticación usan proyectos de Cloud para autenticar, y se usan tanto para el uso no pagado (gratuito, no comercial) como para el uso pagado. Para autenticar e inicializar, ejecuta el siguiente comando:
ee.Authenticate()
ee.Initialize(project='my-project')
Primero, se seleccionará el mejor modo de autenticación para tu entorno y, luego, se te pedirá que confirmes el acceso para tus secuencias de comandos. Si ya existen credenciales, se reutilizan automáticamente. Ejecuta ee.Authenticate(force=True) para crear credenciales nuevas.
El paso de inicialización verifica que existan credenciales válidas, ya sea creadas a partir de ee.Authenticate() o preexistentes como credenciales predeterminadas de Google. Luego, inicializa la biblioteca cliente de Python con métodos que admite el servidor de backend. Deberás proporcionar un proyecto que sea de tu propiedad o para el que tengas permisos de uso. Consulta la configuración del proyecto de Cloud para registrar el proyecto y habilitar la API de Earth Engine. Este proyecto se usará para ejecutar todas las operaciones de Earth Engine.
En la línea de comandos, la llamada equivalente es earthengine authenticate. Si las credenciales vencieron o no son válidas, es posible que debas ejecutar earthengine
authenticate --force. Las invocaciones de la línea de comandos se inicializarán en cada llamada, y puedes usar el argumento --project para establecer el proyecto.
También puedes configurar un proyecto para todas las llamadas futuras ejecutando earthengine
set_project {my-project}. La línea de comandos y ee.Initialize() usarán este valor siempre que no se especifique un proyecto directamente. Si se usa la autenticación a través de gcloud (consulta a continuación), el proyecto establecido por gcloud auth application-default
set-quota-project {my-project} se usará como caso final.
Detalles de autenticación
El objetivo de los flujos de autenticación de Earth Engine es obtener un "token" de seguridad de tu cuenta con la que accediste, que se puede almacenar para otorgarles a tus secuencias de comandos permiso para acceder a tus datos. Por motivos de seguridad, el sistema de autenticación de Google solo pasará esos tokens a los sistemas que se puedan proteger. Consulta las notas técnicas a continuación.
Debido a la sensibilidad de los sistemas involucrados, existen diferentes formas de proceder según tu situación particular. La mayoría de las opciones se controlan con el parámetro auth_mode: ya sea como ee.Authenticate(auth_mode=...) o earthengine authenticate --auth_mode=... en la línea de comandos.
Ten en cuenta que, si ya existen credenciales de Google en tu entorno, es posible que no necesites llamar a ee.Authenticate(). Las VMs de Google Cloud, App Engine y otros entornos proporcionan "credenciales ambientales" utilizables, y gcloud auth
application-default login también las creará.
Sin embargo, se recomienda usar ee.Authenticate() al inicio de todas las secuencias de comandos para maximizar la compatibilidad. Sin el parámetro auth_mode, está diseñado para funcionar en la mayoría de las situaciones, pero sigue los detalles que se indican a continuación si el modo predeterminado no funciona.
El modo predeterminado se selecciona de la siguiente manera:
colabsi se ejecuta en un notebook de Google Colabnotebooksi se ejecuta en otros notebooks de Jupyter que no son de Colablocalhostsi se detecta un navegador web y no se instaló ningún archivo binario de gcloudgcloud, en caso contrario Para este modo, deberás instalar gcloud.
Guía y tabla de referencia rápida
En esta guía de decisiones, se describen las opciones posibles si el modo predeterminado seleccionado por ee.Authenticate() no funciona. Por ejemplo, si ejecutas en otros entornos de notebook, es posible que debas especificar notebook de forma explícita.
- Entorno local
- "Local" significa que estás ejecutando código en un shell o notebook de Python en la máquina que tienes frente a ti, o, más precisamente, en la misma máquina en la que se ejecuta tu navegador web. Esto incluye situaciones de escritorio remoto en las que tanto Python como el navegador se encuentran en la misma máquina (remota).
- Usar
auth_mode=localhostes lo más sencillo y se seleccionará de forma predeterminada si no está instalado gcloud, pero tu secuencia de comandos solo funcionará en entornos locales. - También están disponibles
auth_mode=gcloudyauth_mode=notebook.
- Entorno remoto.
- "Remoto" significa que tu navegador está en una máquina (local), pero tu código se ejecuta en otro lugar, como en una estación de trabajo remota o un notebook basado en la Web.
- Si estás en Colab, usa
auth_mode=colab; o usagcloudsi necesitas configurarscopespara llamar a otras APIs. - Si puedes instalar gcloud en la máquina remota y en tu máquina local, usa
auth_mode=gcloud. - Si puedes usar un proyecto de autenticación (consulta a continuación), usa
auth_mode=notebook. - De lo contrario, si no puedes usar un proyecto, instalar gcloud, usar Colab o usar un navegador en la misma máquina, haz lo siguiente:
- Habla con un administrador (otra vez) sobre la creación de proyectos. Por ejemplo:
- Pídele al administrador que configure un proyecto para ti (como propietario, editor o editor de configuración de OAuth).
- También puedes pedirle al administrador que te otorgue permisos para crear un proyecto.
En esta tabla, se muestran las combinaciones de funciones que admite cada modo.
| ¿Local o remoto? | Se necesita un proyecto | Permisos configurables | Se necesita la CLI local | Propietario del proyecto | |
|---|---|---|---|---|---|
localhost |
local | Y | S | N | N |
colab |
Control remoto | Y | N | N | N |
gcloud |
ambos | Y | S | N | N |
notebook |
ambos | Y | S | No | Y |
Credenciales para cuentas de servicio y Compute Engine
ee.Initialize() usará las credenciales de Earth Engine (que ee.Authenticate() almacena en ~/.config/earthengine/credentials) o recuperará las credenciales de google.auth.default(), pero, si es necesario, puedes pasar un argumento credentials= para usar credenciales de otro lugar y, así, omitir estos valores predeterminados.
Si autenticas código de Python que se ejecutará sin supervisión, es posible que desees autenticarte con una cuenta de servicio en lugar de una cuenta de usuario. Consulta estos documentos para usar cuentas de servicio con Earth Engine. Otros métodos incluyen authenticate_service_account en el módulo de autenticación de Colab y los métodos que se describen en la guía de Cloud para autenticarse como una cuenta de servicio.
Si tu código se ejecuta en una VM de Compute Engine, se crea una cuenta de servicio predeterminada para el entorno, que ee.Initialize() usará de forma predeterminada. Es posible que debas registrar la cuenta de servicio para usar Earth Engine si el proyecto de Cloud a través del cual se inició la VM no está registrado para usar Earth Engine (comercial o no comercial).
Detalles sobre los modos
auth_mode=colab. ee.Authenticate() creará o obtendrá las credenciales predeterminadas compatibles con Colab ejecutando colab.auth.authenticate_user() si es necesario. Las credenciales siempre usan el alcance cloud-platform y también se pueden usar para llamar a otras APIs de Cloud.
auth_mode=gcloud. Esto delega la autenticación en la herramienta gcloud y es lo mismo que ejecutar gcloud auth application-default login con los permisos predeterminados de Earth Engine (earthengine, cloud-platform y drive) o los permisos en el argumento scopes. El modo gcloud funciona tanto en casos locales como remotos.
Instrucciones paso a paso para el modo de gcloud (casos locales y remotos)
- Verifica que gcloud esté instalado en la máquina local.
- En una terminal, ejecuta
gcloud help. Si gcloud no está instalado, sigue estas instrucciones para instalar gcloud.
- En una terminal, ejecuta
- Terminal de la máquina local
- En una terminal, ejecuta
earthengine authenticate. - El resultado del comando indicará que se está usando gcloud para recuperar credenciales.
- Se abrirá una ventana del navegador en una página de selección de cuentas. Si el navegador no se abre automáticamente, haz clic en la URL.
- En una terminal, ejecuta
- Navegador: Selección de cuenta
- Selecciona la cuenta que quieres usar para la autenticación.
- Navegador: Pantalla de consentimiento
- Indica si deseas otorgar los alcances solicitados y haz clic en "Permitir".
- Navegador: Pantalla de confirmación
- El navegador mostrará una página que confirma que te autenticaste, y el comando
earthengine authenticateen la ventana de la terminal informará que se guardó correctamente el token de autorización. - En casos remotos, la página web te proporcionará un código para que lo pegues en el entorno de Python.
- El navegador mostrará una página que confirma que te autenticaste, y el comando
- Continúa con la inicialización.
auth_mode=localhost. Este es un flujo similar a gcloud para los casos en los que no se instala gcloud. Realiza los mismos pasos que gcloud, pero solo funciona para el caso local. Puedes proporcionar un número de puerto de Internet opcional, p. ej., localhost:8086, o usar localhost:0 para seleccionar automáticamente un puerto. El puerto predeterminado es 8085.
auth_mode=notebook. Este es un modo de uso general diseñado para funcionar en situaciones remotas en las que no hay líneas de comandos locales disponibles. Te dirigirá a la página del autenticador de Notebook, en la que deberás elegir o crear un "proyecto de autenticación". Consulta los detalles y la guía de solución de problemas a continuación. El proyecto que se pasa a ee.Initialize() no tiene que coincidir con este. Puedes mantener el mismo proyecto para la autenticación mientras trabajas en diferentes proyectos en diferentes notebooks. Se recomienda pasar un proyecto de forma explícita a ee.Initialize(), pero se usará el proyecto de autenticación de forma predeterminada.
Instrucciones paso a paso para el modo notebook
- Navegador: Notebook
- En una celda de código del notebook, ejecuta el siguiente código para iniciar un flujo de autenticación con el modo "notebook".
Haz clic en el vínculo del resultado de la celda para abrir una página de Notebook Authenticator en una pestaña nueva.import ee ee.Authenticate()
- En una celda de código del notebook, ejecuta el siguiente código para iniciar un flujo de autenticación con el modo "notebook".
- Navegador: Notebook Authenticator
- Verifica que se muestre la cuenta de usuario correcta.
- Selecciona un proyecto de Google Cloud para usarlo en la autenticación. Si necesitas crear un proyecto nuevo, te recomendamos que uses la convención de nomenclatura "ee-xyz", en la que xyz es tu nombre de usuario habitual de Earth Engine. (Si no puedes seleccionar o crear un proyecto de Cloud, consulta la sección de solución de problemas a continuación).
- Haz clic en Generar token.
- Navegador: Selección de cuenta
- Se te mostrará una página de selección de cuentas. Haz clic en la cuenta de usuario a la que quieres otorgar acceso desde el notebook.
- Navegador: Página de advertencia
- Se muestra una página de advertencia que indica que Google no creó la app (es decir, el código del notebook). Haz clic en Continuar para confirmar.
- Navegador: Pantalla de consentimiento
- Indica si deseas otorgar los permisos solicitados y haz clic en Continuar.
- Navegador: Pantalla de código de autorización
- Copia el código de verificación de autorización
- Navegador: Notebook
- Regresa a la pestaña del notebook y pega el código de verificación en el resultado de la celda del notebook.
- El resultado de la celda debería indicar "Successfully saved authorization token".
- Continúa con la inicialización.
El modo Notebook tiene un parámetro quiet que se usa con poca frecuencia: si se configura, se ejecuta de forma "no interactiva" y no te solicita que ingreses el código de autorización ni espera a que lo hagas.
En su lugar, proporciona un comando para ejecutar y guardar el código.
Proyectos de autenticación
Deberás ser propietario, editor o editor de configuración de OAuth en el proyecto de autenticación que se usa en el modo de notebook. En muchos casos, en especial en equipos más pequeños, el proyecto de autenticación que usas en la página Notebook Authenticator puede ser el mismo que el proyecto principal que usas para otros trabajos.
Debido a problemas de seguridad, la "configuración del cliente de OAuth" en el proyecto de autenticación es una configuración única. Si tú o algún otro usuario configuraron un cliente de OAuth en el proyecto por otros motivos, no se podrá quitar y verás un error que indica "configuración de cliente OAuth2 incompatible". Deberás usar otro proyecto para la autenticación o usar los modos colab, localhost o gcloud que se mencionaron anteriormente.
Detalles sobre los permisos
La configuración de autenticación predeterminada de Earth Engine incluye todos los permisos disponibles, por lo que puedes omitir esta sección si la configuración predeterminada cumple con tus requisitos.
Permisos de Earth Engine: Un permiso de OAuth 2.0 define y restringe el conjunto de recursos y operaciones a los que una aplicación tiene permiso para acceder en nombre de un usuario. Cuando usas OAuth para autenticarte en Earth Engine, debes solicitar uno o más de los siguientes permisos:
https://www.googleapis.com/auth/earthengine: Acceso de lectura y escritura a los recursos y activos de Earth Engine. Se requiere para crear, modificar o borrar recursos, administrar permisos de recursos y ejecutar tareas de exportación.https://www.googleapis.com/auth/earthengine.readonly: Acceso de solo lectura a los recursos de Earth Engine.
Ambos permisos permiten ejecutar secuencias de comandos y realizar cálculos (como evaluar expresiones o renderizar visualizaciones de mapas).
Permisos de Google Cloud y Drive: Si tus consultas o secuencias de comandos de Earth Engine hacen referencia a datos o recursos externos, tus credenciales también deben incluir los permisos adecuados para esos servicios:
- Cloud Storage (GCS) (cuando se lee o escribe en buckets de Cloud Storage, como cuando se cargan archivos GeoTIFF optimizados para la nube o se exportan resultados de tareas):
https://www.googleapis.com/auth/devstorage.full_controlhttps://www.googleapis.com/auth/devstorage.read_writehttps://www.googleapis.com/auth/devstorage.read_only
- BigQuery (BQ) (cuando se leen tablas o se escriben exportaciones en BigQuery):
https://www.googleapis.com/auth/bigquery
- Google Drive (cuando accedes a los datos o los exportas a Google Drive):
https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/drive.readonly
Google Cloud también ofrece permisos amplios que abarcan todos los servicios de Google Cloud:
- Cloud Platform (acceso amplio a los servicios de Google Cloud, incluidos Earth Engine, Cloud Storage y BigQuery; ten en cuenta que Google Drive es un servicio independiente de Workspace y no está cubierto por estos permisos):
https://www.googleapis.com/auth/cloud-platformhttps://www.googleapis.com/auth/cloud-platform.read-only
Permisos predeterminados: Los permisos predeterminados configurados por el editor de código de Earth Engine y las bibliotecas cliente (como ee.Authenticate()) incluyen todos estos permisos: earthengine, cloud-platform y drive (consulta los detalles más arriba).
Por lo tanto, la personalización del alcance (por ejemplo, con el parámetro scopes en ee.Authenticate(scopes=[...])) solo es necesaria si tienes restricciones de seguridad o políticas organizativas específicas que requieren limitar los permisos.
Solución de problemas
¿Qué sucede si no puedo crear un proyecto de Cloud?
Algunas organizaciones controlan quién puede crear proyectos de Cloud. Si recibes un error en la página del autenticador de Notebook cuando intentas crear un proyecto, puedes probar lo siguiente:
- Intenta crear un proyecto directamente para confirmar si tienes los permisos necesarios.
- Comunícate con el administrador de tu organización para saber qué procesos están disponibles para crear un proyecto.
- Crea un proyecto desde una cuenta que no sea de la organización y agrega la cuenta que usas para el trabajo como propietario del proyecto. Nota: Algunas organizaciones tienen políticas de seguridad que impiden el acceso a clientes de OAuth desde proyectos externos.
Error: "La API de Earth Engine no se usó en el proyecto XXX anteriormente o está inhabilitada"
En primer lugar, asegúrate de haber configurado un proyecto en ee.Initialize() o en la línea de comandos (los proyectos predeterminados que proporcionan Cloud y Colab no tendrán habilitado Earth Engine). En segundo lugar, asegúrate de que la API de Earth Engine esté
habilitada en tu proyecto.
Error: "El proyecto tiene una configuración de cliente de OAuth2 incompatible"
Los proyectos de Cloud solo pueden tener una configuración de cliente de OAuth2. Puedes verificar si un proyecto de Cloud tiene configurado un cliente de OAuth2. Para ello, revisa los IDs de cliente de OAuth 2.0 en la página Credenciales. Debes seleccionar otro proyecto de Cloud que ya tenga una configuración compatible establecida por el autenticador de Notebook o seleccionar o crear un proyecto de Cloud sin clientes de OAuth2. El autenticador configurará este proyecto automáticamente. Lamentablemente, el sistema de OAuth no permite que los usuarios borren configuraciones, por lo que se debe usar un proyecto diferente. No es necesario que este proyecto sea el mismo que se usa para otros trabajos de Earth Engine. Ten en cuenta que este error no ocurre en el modo Colab.
Error: "gcloud failed. Verifica si hay errores y, si es necesario, instala gcloud".
Este error puede ocurrir si gcloud no está instalado o no se encuentra en tu PATH. También puede ocurrir si llamas a ee.Authenticate(auth_mode='gcloud') desde una celda de código de un notebook. En su lugar, usa ee.Authenticate(), que, de forma predeterminada, usará la autenticación en modo de notebook. Si no puedes crear un proyecto, consulta la solución anterior.
¿Qué sucede si no tengo acceso a una máquina local para instalar gcloud?
Si trabajas en un entorno solo para la Web sin acceso a una terminal local y aún necesitas usar una terminal remota, puedes inicializar la herramienta de línea de comandos activando el modo de notebook con el comando earthengine
authenticate --auth_mode=notebook.
Error 400: redirect_uri_mismatch
Es posible que obtengas este error si te autenticas en una máquina remota sin acceso a un navegador web. Intenta agregar --quiet si ejecutas earthengine authenticate desde la línea de comandos o ee.Authenticate(quiet=True) si usas el cliente de Python. Para ello, deberás autenticarte con gcloud desde una máquina que tenga acceso a un navegador web.
Error: "Tu aplicación se está autenticando con credenciales predeterminadas de la aplicación locales. La API de earthengine.googleapis.com requiere un proyecto de cuota, que no se establece de forma predeterminada".
Este error puede ocurrir cuando Earth Engine no puede determinar tu ID de proyecto. Si las opciones de solución de problemas de Google Cloud no funcionan, intenta ejecutar earthengine set_project YOUR_PROJECT_ID o gcloud
auth application-default set-quota-project YOUR_PROJECT_ID.
Error: "Faltan los permisos obligatorios para [Cloud Storage / BigQuery]"
Este error se produce cuando una solicitud de Earth Engine accede a recursos de Cloud Storage o BigQuery, pero las credenciales que se usan para inicializar Earth Engine no incluyen los permisos requeridos para ese servicio (o el permiso cloud-platform, que abarca todos los servicios de Google Cloud). Esto suele ocurrir si personalizaste el parámetro scopes durante la autenticación (por ejemplo, si proporcionaste solo los permisos de Earth Engine a ee.Authenticate(scopes=[...])) o si se crearon credenciales existentes sin esos permisos.
Existen dos formas de resolver este problema:
- Vuelve a autenticarte con los permisos predeterminados: Las credenciales predeterminadas de Earth Engine incluyen el permiso
cloud-platform, que abarca Cloud Storage y BigQuery. Vuelve a autenticarte con la configuración predeterminada:- En Python:
ee.Authenticate(force=True) - En la línea de comandos:
earthengine authenticate --force
- En Python:
- Incluye los permisos requeridos: Si tu entorno requiere que se personalicen los permisos, asegúrate de que tu lista de
scopesincluyahttps://www.googleapis.com/auth/cloud-platformo el permiso de servicio específico (comohttps://www.googleapis.com/auth/devstorage.full_controlohttps://www.googleapis.com/auth/devstorage.read_onlypara Cloud Storage, ohttps://www.googleapis.com/auth/bigquerypara BigQuery).
Para obtener más detalles sobre los permisos disponibles, consulta Detalles sobre los permisos.
Notas técnicas
Para los más curiosos: La necesidad de estos diferentes mecanismos de creación de credenciales surge de la necesidad de pasar credenciales a un entorno conocido y confiable. A continuación, se incluye un breve análisis de los diferentes casos anteriores.
- Antes había un modo
pasteque te proporcionaba un token para pegarlo en cualquier lugar, pero se consideró demasiado riesgoso y ya no está disponible. colab:auth.authenticate_user()te pedirá que compartas credenciales con el cliente de autenticación "Colab", el entorno del notebook en sí. Luego, están disponibles a través degoogle.auth.default()yee.Initialize()los usa.localhost: Las credenciales se pasan del navegador a un puerto de tu máquina local. En esta situación, la seguridad de extremo a extremo depende de que tu máquina local no se haya vulnerado. El cliente de autenticación que verás es "Earth Engine Authenticator".gcloud: Usa el flujo--launch-browserque se describe en la referencia de gcloud y--no-launch-browsersi se encuentra en una máquina remota. El cliente de autenticación que se usa es "Google Auth Library".notebook: Creamos un nuevo cliente de autorización específicamente para tu trabajo. Verás tu dirección de correo electrónico en la página de consentimiento. Este cliente está configurado en modo "desarrollo", que es un caso especial que permite los tokens del modo de pegado anterior. Para ello, debemos usar tu propio proyecto, ya que estos clientes no se pueden compartir con una gran cantidad de usuarios.