Antes de poder 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 para el uso no pagado (gratuito, no comercial) y el uso pagado. Para autenticarte e inicializar, ejecuta lo siguiente:
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 de tus secuencias de comandos. Si ya existen credenciales,
se reutilizan automáticamente. Ejecuta ee.Authenticate(force=True) para crear
credenciales nuevas.
En el paso de inicialización, se verifica que existan credenciales válidas, ya sea creadas
desde ee.Authenticate() o preexistentes como credenciales predeterminadas de Google. Luego,
inicializa la biblioteca cliente de Python con los métodos que admite el servidor
de backend. Deberás proporcionar un proyecto de tu propiedad o para el que tengas
permisos de uso. Consulta 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 configurar 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 cuando no se especifique un proyecto directamente. Si usas la autenticación a través de
gcloud (consulta más abajo), 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 de acceso que se pueda almacenar para otorgar permiso a tus secuencias de comandos para acceder a tus datos. Por motivos de seguridad, el sistema de autenticación de Google solo pasará esos tokens a sistemas que se puedan proteger (consulta las notas técnicas que aparecen a continuación).
Debido a la sensibilidad al tipo de 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 las credenciales de Google ya existen en tu entorno, es posible que no
necesites llamar a ee.Authenticate(). Las VMs de Google Cloud, App Engine y otros
entornos proporcionan "credenciales de ambiente" utilizables, y gcloud auth
application-default login también las creará.
Sin embargo, se recomienda usar ee.Authenticate() al comienzo 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 sean de Colablocalhostsi se detecta un navegador web y no se instala ningún objeto binario de gcloudgcloud, de lo 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 una shell o un notebook de Python en la máquina que tienes delante 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 Python y el navegador se encuentran en la misma máquina (remota).
- Usar
auth_mode=localhostes lo más fácil y se seleccionará de forma predeterminada si gcloud no está instalado, pero tu secuencia de comandos solo funcionará en entornos locales. auth_mode=gcloudyauth_mode=notebooktambién están disponibles.
- 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=colabogcloudsi necesitas configurarscopespara llamar a otras APIs. - Si puedes instalar gcloud en la máquina remota y en la local,
usa
auth_mode=gcloud. - Si puedes usar un proyecto de autenticación (consulta más abajo), 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).
- O bien, pídele al administrador que te otorgue permisos para crear un proyecto.
En esta tabla, se muestran las combinaciones de funciones que admite cada modo.
| ¿Para 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 omitir estos
valores predeterminados.
Si autenticas código de Python que se ejecutará sin supervisión, es posible que quieras
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
descritos en la guía de Cloud para autenticarse como 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 usarse
con Earth Engine (comercial o no comercial).
Detalles sobre los modos
auth_mode=colab. ee.Authenticate() creará o obtendrá las credenciales predeterminadas
admitidas por Colab, ejecutando colab.auth.authenticate_user() si
es necesario. Las credenciales siempre usan el permiso cloud-platform y también se pueden
usar para llamar a otras APIs de Cloud.
auth_mode=gcloud. Esto delega la autenticación a la herramienta de 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 en casos locales y 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 las 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 quieres otorgar los permisos 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 terminal informará "Successfully saved authorization token". - En casos remotos, la página web te dará 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 gcloud no está
instalado. 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 un puerto automáticamente. 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 enviará a
la página del autenticador de Notebook, donde deberás elegir o crear un
"proyecto de autenticación". Consulta los detalles y la guía de solución de problemas que se incluyen a continuación. No es necesario que el proyecto que se pasa a ee.Initialize() coincida 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 de notebook
- Navegador: Notebook
- En una celda de código de 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 de notebook, ejecuta el siguiente código para iniciar un
flujo de autenticación con el modo "notebook".
- Navegador: Notebook Authenticator
- Verifica que aparezca 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 nombres "ee-xyz", donde 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 que aparece más abajo).
- Haz clic en Generar token.
- Navegador: Selección de cuenta
- Se te mostrará una página de selección de cuenta. Haz clic en la cuenta de usuario a la que deseas otorgar acceso desde el notebook.
- Navegador: Página de advertencia
- Se presenta una página de advertencia que indica que Google no creó la app (es decir, el código en el notebook). Haz clic en Continuar para confirmar.
- Navegador: Pantalla de consentimiento
- Indica si quieres 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 de notebook tiene un parámetro quiet que se usa con poca frecuencia: si se establece, se ejecuta
de forma "no interactiva" y no te solicita que ingreses el código de autenticació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 de 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 puede quitar y verás un error que dice "configuración de cliente de OAuth2 incompatible". Deberás usar un proyecto diferente para la autenticación o usar los modos de Colab, localhost o gcloud anteriores.
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 puede 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. Es obligatorio 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 ámbitos 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 cargar GeoTIFF optimizados para la nube (COG) o exportar 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 se accede a datos o se exportan 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 de Workspace independiente 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 que configuran 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 permiso (por ejemplo, con el parámetro scopes
en ee.Authenticate(scopes=[...])) solo es necesaria si tienes restricciones de seguridad
específicas o políticas de la organización 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 averiguar 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 trabajar como propietario del proyecto. Nota: Algunas organizaciones tienen políticas de seguridad que impiden el acceso a los clientes de OAuth desde proyectos externos.
Error: "La API de Earth Engine no se usó antes en el proyecto XXX o está inhabilitada"
Primero, 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
Earth Engine habilitado). En segundo lugar, asegúrate de que la API de Earth Engine esté
habilitada
en tu proyecto.
Error: "Project has an incompatible OAuth2 Client configuration"
Los proyectos de la nube solo pueden tener una configuración de cliente de OAuth2. Para verificar si un proyecto de Cloud tiene un parámetro de configuración de cliente de OAuth2, revisa los IDs de cliente de OAuth 2.0 en la página Credenciales. Debes seleccionar otro proyecto de Cloud que tenga una configuración compatible ya establecida por el autenticador de Notebooks, o bien 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 se produce en el modo Colab.
Error: "gcloud failed. Verifica si hay errores más arriba y, si es necesario, instala gcloud".
Este error puede ocurrir si gcloud no está instalado o no está en tu PATH. También puede
ocurrir si llamas a ee.Authenticate(auth_mode='gcloud') desde una celda de código
de notebook. En su lugar, usa ee.Authenticate(), que usará de forma predeterminada 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 web sin acceso a una terminal local y, de todas maneras, necesitas usar una terminal remota, puedes inicializar la herramienta de línea de comandos activando el modo de notebook con la ejecución del 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. Esto requerirá que te autentiques con gcloud desde una máquina que
tenga acceso a un navegador web.
Error: "Your application is authenticating by using local Application Default Credentials. La API de earthengine.googleapis.com requiere un proyecto de cuota, que no se configura de forma predeterminada".
Este error puede ocurrir cuando Earth Engine no puede determinar el ID de tu 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 necesarios 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 necesarios para ese servicio (o el permiso cloud-platform,
que abarca todos los servicios de Google Cloud). Por lo general, esto sucede 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 necesarios: Si tu entorno requiere personalizar
los permisos, asegúrate de que tu lista
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 información sobre los permisos disponibles, consulta Detalles sobre los permisos.
Notas técnicas
Para los curiosos técnicos: la necesidad de estos diferentes mecanismos de creación de credenciales proviene de la necesidad de pasar credenciales a un entorno conocido y de confianza. A continuación, se incluye un breve análisis de los diferentes casos mencionados anteriormente.
- Antes, existía un modo
pasteque te daba un token para pegar en cualquier lugar, pero se consideró demasiado riesgoso y ya no está disponible. colab:auth.authenticate_user()te pedirá que compartas las credenciales con el cliente de autenticación "Colab", el entorno del notebook. Luego, están disponibles a través degoogle.auth.default()y los usaee.Initialize().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 el "Autenticador de Earth Engine".gcloud: Se 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 cliente de autenticación nuevo específicamente para tu trabajo. Verás tu dirección de correo electrónico en la página de consentimiento. Este cliente se configura en el modo "desarrollo", que es un caso especial que permite los tokens del modo de pegado más antiguos. Para ello, debemos usar tu propio proyecto, ya que esos clientes no se pueden compartir con una gran cantidad de usuarios.