es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Credenciales predeterminadas de la aplicación no funcionan en la Función en la nube para acceder a la API de Google Workspace.

Estoy tratando de usar la cuenta de servicio utilizando Google Cloud Functions para acceder a la API del Directorio de Workspace. Estoy intentando usar el enfoque de “credenciales predeterminadas de la aplicación”. Dado que la documentación no menciona ningún paso adicional que deba realizarse en el lado de la Consola de Google Cloud, asumo que las Credenciales Predeterminadas de la Aplicación (ADC) se pasan automáticamente a la función desde el servidor de Metadatos de Google Cloud. El siguiente código funciona perfectamente en mi entorno local emulado, donde he configurado la variable de entorno GOOGLE_APPLICATION_CREDENTIALS para que apunte al archivo de credenciales JSON. Sin embargo, cuando despliego la función en Google Cloud, obtengo el error “No se otorga autorización para acceder a este recurso/API”. He estado buscando y probando durante días sin éxito. Por cierto, antes de encontrar este hilo, estaba utilizando el método getCredentials() de GoogleAuth para obtener la clave privada y crear una autenticación JWT (para la propiedad “subject”) y pasaba esa autenticación a la llamada de la API del administrador. Lo cual también funcionaba perfectamente en mi entorno local pero fallaba en el entorno de la nube porque la clave privada getCredentials() es nula, lo cual probablemente es un comportamiento esperado. Cualquier ayuda es muy apreciada. Soy inexperto en publicar en Stackoverflow, si necesito seguir algún otro protocolo, por favor avísenme.

export const listarUsuarios = functions.https.onCall((data, context) => {
  return new Promise(async (resolve, reject) => {
    const envAuth = new GoogleAuth({
      scopes: ["https://www.googleapis.com/auth/admin.directory.user.readonly"],
      clientOptions: {
        subject: "admin@midominio.com",
      },
    });

    const cliente = await envAuth.getClient();
    const servicio = google.admin({version: "directory_v1", auth: cliente});
    try {
      const respuesta = await servicio.users.list({
        customer: "ID_DE_MI_CLIENTE",
      });
      resolve(respuesta);
    } catch (err) {
      reject(err);
    }
  });
});
Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución de problemas de problemas de autorización al utilizar las Google Cloud Functions con la API de Google Workspace Directory

    Descripción del problema

    El usuario está intentando utilizar una cuenta de servicio con las Google Cloud Functions para acceder a la API de Google Workspace Directory, utilizando el enfoque de Credenciales Predeterminadas de Aplicación. El código funciona localmente con la variable de entorno GOOGLE_APPLICATION_CREDENTIALS apuntando al archivo de credenciales JSON. Sin embargo, cuando el usuario implementa la función en Google Cloud, recibe un mensaje de error: “No autorizado para acceder a este recurso/API”. El usuario ha estado intentando encontrar una solución a este problema durante días.

    Solución

    Dado que el usuario recibe el mensaje de error “No autorizado para acceder a este recurso/API”, es probable que haya un problema con las credenciales de autenticación que se están utilizando.

    Hay algunas cosas que el usuario puede verificar para solucionar el problema:

    1. Asegurarse de que la cuenta de servicio tenga los permisos necesarios para acceder a la API de Google Workspace Directory. Esto se puede hacer yendo a la Consola de Google Cloud, navegando a IAM y Administración > IAM y asegurándose de que la cuenta de servicio haya sido otorgada los roles apropiados.
    2. Verificar que la Google Cloud Function esté configurada para utilizar la cuenta de servicio correcta. Esto se puede hacer yendo a la Consola de Google Cloud, navegando a Cloud Functions y asegurándose de que se haya seleccionado la cuenta de servicio correcta en la sección de variables de entorno.

    3. Verificar que se estén utilizando las Credenciales Predeterminadas de Aplicación correctas. Es posible que el servidor de metadatos no esté pasando las credenciales correctas a la función, lo que puede resultar en errores de autenticación. El usuario puede intentar establecer explícitamente las credenciales utilizando la opción credentials al crear la instancia de GoogleAuth.

    Por ejemplo:

    const envAuth = new GoogleAuth({
      scopes: ["https://www.googleapis.com/auth/admin.directory.user.readonly"],
      clientOptions: {
        subject: "admin@mydomain.com",
      },
      credentials: {
        client_email: [SERVICE_ACCOUNT_EMAIL],
        private_key: [SERVICE_ACCOUNT_PRIVATE_KEY],
      }
    });
    
    1. Verificar que se estén solicitando los ámbitos correctos. El usuario debe asegurarse de solicitar los ámbitos necesarios para acceder a la API que está intentando utilizar.
  2. Verificar que el valor MYCUSTOMER_ID sea correcto. El usuario debe asegurarse de utilizar el valor correcto para el parámetro customer.

  3. Si ninguna de las soluciones anteriores funciona, puede ser necesario comunicarse con el soporte de Google Cloud para recibir más ayuda.

Comments are closed.