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.
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:Aquí hay algunas cosas que puede intentar:
Utilizar el SDK de Google Cloud directamente para generar una clave en el formato estándar de archivo JSON utilizando el siguiente comando:
Por ejemplo, puede ejecutar el siguiente comando para generar una clave y guardarla en el directorio actual con el nombre
my-service-account.json
:@google-cloud/storage
para autenticarse utilizando la cuenta de servicio sin utilizarGOOGLE_APPLICATION_CREDENTIALS
.Esto es cómo puede autenticarse utilizando la cuenta de servicio con
@google-cloud/storage
: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.