Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Preguntas frecuentes y solución de problemas

Los siguientes son problemas comunes que pueden ocurrir cuando interactúas con la API de Cloud Asset y también se muestra cómo tratarlos.

¿Por qué mi solicitud tiene credenciales de autenticación no válidas?

Si no configuraste el encabezado OAuth correctamente, cuando realizas una llamada, se mostrará el siguiente error:

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected
               OAuth 2 access token, login cookie or other valid
               authentication credential. See
               https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "Authentication error: 2"
      }
    ]
  }
}

A fin de solucionar este problema, repite los pasos para verificar la configuración inicial.

¿Por qué no tengo permiso para usar la API de Cloud Asset?

Se muestra un error si no tienes permiso para exportar elementos ni conseguir el historial en una organización, proyecto o carpeta.

Por ejemplo, si no tienes permiso, ejecuta el siguiente comando:

gcurl -d '{"outputConfig":{"gcsDestination": \
{"uri":gs://YOUR_BUCKET/NEW_FILE}}}' \
https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:exportAssets

Se mostrará el siguiente error:

{
 "error": {
  "code": 403,
  "message": "The caller does not have permission",
  "status": "PERMISSION_DENIED",
  "details": [
   {
    "@type": "type.googleapis.com/google.rpc.DebugInfo",
    "detail": "[ORIGINAL ERROR] generic::permission_denied: Request
    denied by Cloud IAM."
   }
  ]
 }
}

Para solucionar este problema, solicita acceso desde tu proyecto, organización o administrador de la organización. Según los elementos que intentes exportar o de los que quieras obtener el historial, necesitarás una de las siguientes funciones, o bien otras funciones, que incluyan los permisos requeridos por la API de Cloud Asset:

  • cloudasset.viewer
  • cloudasset.owner

Para obtener más información acerca de las funciones y los permisos, consulta Comprende las funciones.

Si deseas obtener más información sobre las opciones de control de acceso para las API de Cloud Asset, consulta Control de acceso.

¿Por qué fallan mis exportaciones a los comandos de Cloud Storage?

Si el bucket de Cloud Storage que usas para almacenar los datos exportados no se encuentra en el proyecto habilitado para la API de Cloud Asset en el que ejecutas la exportación, la solicitud recibirá el siguiente error de permiso denegado:

    {
     "error": {
      "code": 7,
      "message": "Failed to write to: YOUR_BUCKET/FILE",
     }
    }
    

Para abordar este problema, usa un depósito de Cloud Storage que pertenezca al proyecto habilitado para la API de Cloud Asset en el que ejecutas la exportación o puedes otorgar a la cuenta de servicio service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com la función roles/storage.admin, en la que PROJECT_NUMBER es el número del proyecto habilitado para la API de Cloud Asset en el que ejecutas la exportación.

¿Por qué está inactivo el resultado de la API de Cloud Asset?

La actualización de datos en la API de Cloud Asset se basa el criterio del mejor esfuerzo. Si bien casi todas las actualizaciones de elementos estarán disponibles para los clientes en minutos, en casos excepcionales es posible el resultado de los métodos de la API de Cloud Asset que no incluyan las actualizaciones más recientes de los elementos.

¿Por qué se producen archivos temporales después de ejecutar ExportAssets?

La operación ExportAssets puede crear archivos temporales en la carpeta de salida. No quites estos archivos temporales mientras se realiza la operación. Una vez completada la operación, los archivos temporales se quitan automáticamente.

Si los archivos temporales permanecen, puedes quitarlos de forma segura después de que se complete la operación ExportAssets.

¿Qué sucede si mi URL de solicitud es demasiado larga para BatchGetAssetsHistory?

El método BatchGetAssetsHistory es una acción HTTP GET que envía todos los datos de la solicitud en una URL de longitud limitada. Como resultado, se producirá un error si la solicitud es demasiado larga.

Para evitar esto, el código de cliente debe usar HTTP POST a fin de enviar una solicitud con Content-Type configurado como application/x-www-form-urlencoded junto con un encabezado HTTP X-HTTP-Method-Override: GET. Consulta URL de solicitud larga para obtener más información.

La siguiente es una solicitud de ejemplo para BatchGetAssetsHistory con HTTP POST:

curl -X POST -H "X-HTTP-Method-Override: GET" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -H "Authorization: Bearer " \
     -d 'assetNames=&contentType=1&readTimeWindow.startTime=2018-09-01T09:00:00Z' \
     https://cloudasset.googleapis.com/v1/projects/:batchGetAssetsHistory

¿Por qué se rechazó mi credencial del SDK de Cloud o Cloud Shell?

Si un proyecto de usuario de una solicitud se envía a cloudasset.googleapis.com desde el SDK de Cloud o Cloud Shell, verás un mensaje de error como el siguiente:

Your application has authenticated using end user credentials from the
Cloud SDK or Cloud Shell which are not supported by the
cloudasset.googleapis.com. We recommend that most server applications
use service accounts instead. For more information about service accounts
and how to use them in your application, see
https://cloud.google.com/docs/authentication/.

Para solucionar este problema, establece el proyecto del usuario como el ID del proyecto del usuario habilitado de la API de Cloud Asset. Para ello, especifica el encabezado HTTP X-Goog-User-Project en la solicitud HTTP.

Si usas curl, esto se puede hacer si agregas el siguiente parámetro:

-H 'X-Goog-User-Project: PROJECT_ID'

Si usas la herramienta de gcloud, especifica la marca --billing-project <var>PROJECT_ID</var> junto con el comando gcloud asset o usa el siguiente comando:

gcloud config set billing/quota_project PROJECT_ID

¿Cómo exporto recursos a las tablas de BigQuery que no pertenecen al proyecto actual?

Cuando llamas a la API ExportAssets desde el proyecto habilitado para la API de Cloud Asset (A), esta usa la cuenta de servicio service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com a fin de escribir en la tabla de BigQuery de destino. Para exportar a una tabla de BigQuery de otro proyecto (B), haz lo siguiente:

En la política de Identity and Access Management (IAM) del proyecto B, otorga a la cuenta de servicio (service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com) las funciones roles/bigquery.user y roles/bigquery.dataEditor.

¿Por qué veo diferentes principales para los mismos recursos?

Cuando se llama a la API de Cloud Asset a fin de obtener diferentes tipos de metadatos, como metadatos de RESOURCE y de IAM POLICY, del mismo elemento, es posible que el campo ancestors no sea coherente en todos los tipos de contenido. Esto se debe a que hay diferentes programas de transferencia de datos para cada tipo de contenido y hasta que el proceso de transferencia esté completo pueden ser incoherentes. Revisa el campo update_time para asegurarte de que el elemento tenga la información más reciente.

Comunícate con nosotros si la incoherencia tiene más de 24 horas.

¿Con qué frecuencia debo llamar a la API de ExportAssets?

Recomendamos llamar a la API de ExportAssets para la misma organización, carpeta o proyecto de manera secuencial. Por ejemplo, emite la segunda llamada después de que se complete la anterior. Si deseas capturar actualizaciones de elementos en tiempo real, considera usar notificaciones en tiempo real.

Recibe actualizaciones de elementos duplicados

Después de configurar las notificaciones en tiempo real, es posible que recibas actualizaciones de elementos duplicadas en tu tema de Pub/Sub. Esto se debe a un intento automático para reintentar la entrega, ya que Pub/Sub no garantiza Al menos una entrega.

¿Por qué no recibí notificaciones de la eliminación de proyectos?

Cuando cierras un proyecto, tienes 30 días para deshacer la operación. El campo deleted de la notificación no se configura hasta que el proyecto se borre de forma permanente. Para supervisar proyectos que están pendientes de eliminación, puedes establecer un feed con una condición en el lifecycleState del proyecto, p.ej., temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".