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.

Claves de cuenta de servicio de Google Cloud: consola vs API

Cuando creo una clave de cuenta de servicio a través de la consola https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-console, genera una clave que se ve así:

{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----abc1234\n-----END PRIVATE KEY-----\n",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

pero al usar la biblioteca de node.js a través de la api https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts.keys/create utilizando un conjunto de credenciales oauth2, genera una clave que se ve así:

{
  "name": "...",
  "keyType": "USER_MANAGED",
  "keyOrigin": "GOOGLE_PROVIDED",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "privateKeyData": "...",
  "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
  "validAfterTime": "2021-12-09T10:32:14Z",
  "validBeforeTime": "9999-12-31T23:59:59Z"
}

El primero funciona con GOOGLE_APPLICATION_CREDENTIALS, pero el último no.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    La razón por la cual la segunda clave generada a través de la biblioteca de node.js no funciona con GOOGLE_APPLICATION_CREDENTIALS es que no es un formato estándar de archivo de clave JSON que se espera por la variable de entorno.

    GOOGLE_APPLICATION_CREDENTIALS requiere claves en el formato estándar de archivo JSON con los siguientes campos:

    {
      "type": "",
      "project_id": "",
      "private_key_id": "",
      "private_key": "",
      "client_email": "",
      "client_id": "",
      "auth_uri": "",
      "token_uri": "",
      "auth_provider_x509_cert_url": "",
      "client_x509_cert_url": ""
    }
    

    Aquí hay algunas cosas que puede intentar:

    1. Convertir manualmente el formato de la segunda clave al formato estándar de archivo JSON agregando los campos faltantes.
    2. Utilizar el SDK de Google Cloud directamente para generar una clave en el formato estándar de archivo JSON utilizando el siguiente comando:

      gcloud iam service-accounts keys create [FILE_NAME] --iam-account [ACCOUNT_ID] --key-file-type=json
      

      Por ejemplo, puede ejecutar el siguiente comando para generar una clave y guardarla en el directorio actual con el nombre my-service-account.json:

      gcloud iam service-accounts keys create ./my-service-account.json --iam-account my-service-account-name@my-project-id.iam.gserviceaccount.com --key-file-type=json
      

    3. Utilizar una biblioteca como @google-cloud/storage para autenticarse utilizando la cuenta de servicio sin utilizar GOOGLE_APPLICATION_CREDENTIALS.

      Esto es cómo puede autenticarse utilizando la cuenta de servicio con @google-cloud/storage:

      const { Storage } = require('@google-cloud/storage');
      
      const storage = new Storage({
        projectId: 'my-project-id',
        keyFilename: './path/to/service-account-key.json'
      });
      
      // use storage object to interact with GCS
      

      Simplemente reemplace my-project-id con su ID de proyecto y ./path/to/service-account-key.json con la ruta de su clave de cuenta de servicio.

Comments are closed.