Preguntas frecuentes y solución de problemas

¿Cloud Asset Inventory es un servicio global?

Sí. La API de Cloud Asset no depende de la ubicación. Tiene un extremo global, Entrega los metadatos de todos los recursos regionales y globales admitidos en Cloud Asset Inventory. Se puede acceder a la API de Cloud Asset en cualquier zona.

¿Qué tipo de coherencia de datos proporciona Cloud Asset Inventory?

Cloud Asset Inventory proporciona coherencia eventual en datos actuales y el mejor esfuerzo. para garantizar la coherencia de los datos históricos. A pesar de la baja probabilidad en la práctica, es Es posible que Cloud Asset Inventory no tenga en cuenta algunas actualizaciones de un recurso en el pasado.

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

Se muestra un error si no tienes permiso para exportar los recursos o para obtener la el historial de una organización, un proyecto o una carpeta.

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

curl -X POST \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -d '{
          "outputConfig": {
            "gcsDestination": {
              "uri": "gs://BUCKET_NAME/FILENAME"
            }
          }
         }' \
         https://cloudasset.googleapis.com/v1/projects/PROJECT_ID:exportAssets

Muestra 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 activos que intentes exportar o para los que quieras obtener historial necesitas uno de los siguientes roles u otros roles que incluyan permisos necesarios de 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é mis exportaciones muestran un error de permiso denegado?

A menos que especifiques lo contrario, Cloud Asset Inventory usa el servicio predeterminado de Cloud Asset Inventory cuenta de servicio en el proyecto activo para administrar recursos como Pub/Sub temas, buckets de Cloud Storage y tablas de BigQuery. Esta se crea la primera vez que llamas a la API de Cloud Asset Inventory desde un proyecto y, de forma predeterminada, tenga permiso para administrar estos recursos, siempre y cuando ubicados en el mismo proyecto.

Puedes recibir errores de denegación de permisos en las siguientes situaciones:

  • Cuando se usa la API de REST, que no establece un proyecto activo, por lo que Cloud Asset Inventory no sabe qué cuenta de servicio usar.

  • Cuando se usa gcloud CLI desde un proyecto diferente al que Tema de Pub/Sub, bucket de Cloud Storage o BigQuery de la tabla. Esto significa que el Cloud Asset Inventory predeterminado del proyecto activo la cuenta de servicio se usa para realizar la tarea (si existe) y es posible que no tienen permisos para escribir en los recursos del otro proyecto.

Para asegurarte de que se use la cuenta de servicio correcta cuando se hagan solicitudes de exportación temas de Pub/Sub, buckets de Cloud Storage o BigQuery en las tablas, puedes especificar el ID del proyecto que contenga el valor predeterminado Cuenta de servicio de Cloud Asset Inventory. Si exportas de un proyecto a otro, También debes otorgar roles específicos a la cuenta de servicio.

gcloud

Para gcloud CLI, agrega la marca --billing-project a la para especificar el ID del proyecto que contiene la cuenta de servicio correcta:

--billing-project=BILLING_PROJECT_ID

También puedes configurar el proyecto de facturación antes de ejecutar comandos con con gcloud CLI. Primero, verifica si el proyecto de facturación es diferente del proyecto principal:

gcloud config list

Luego, si lo necesitas, configura el proyecto de facturación:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Ingresa los siguientes valores:

  • BILLING_PROJECT_ID: Un ID del proyecto que tiene la La API de Cloud Asset Inventory está habilitada y hay una cuenta de servicio con permisos para administrar el tema de Pub/Sub de destino, el bucket de Cloud Storage en la tabla de BigQuery.

REST

Para la API de REST, agrega el encabezado X-Goog-User-Project para especificar el proyecto ID que contiene la cuenta de servicio correcta. Cuando usas curl, estableces el encabezado con la marca -H:

-H "X-Goog-User-Project: BILLING_PROJECT_ID"

Ingresa los siguientes valores:

  • BILLING_PROJECT_ID: Un ID del proyecto que tiene la La API de Cloud Asset Inventory está habilitada y hay una cuenta de servicio con permisos para administrar el tema de Pub/Sub de destino, el bucket de Cloud Storage en la tabla de BigQuery.

Exporta metadatos de activos de un proyecto a otro

Para exportar metadatos de activos de un proyecto, PROJECT_A, a otro, PROJECT_B, debes asignar el valor predeterminado a la cuenta de servicio de Cloud Asset Inventory en PROJECT_A recursos en PROJECT_B. Esto permite dos cosas:

  • Puedes exportar metadatos de activos de PROJECT_A a un Tema de Pub/Sub, bucket de Cloud Storage o BigQuery ubicada en PROJECT_B.

  • Puedes usar PROJECT_A para exportar metadatos de activos desde PROJECT_B a un tema de Pub/Sub bucket de Cloud Storage o tabla de BigQuery ubicado en PROJECT_B

Para exportar metadatos de activos de un proyecto a otro, completa los siguientes pasos: instrucciones:

  1. Asegúrate de que la API de Cloud Asset Inventory esté habilitado en el proyecto desde el que quieres ejecutar la solicitud, PROJECT_A

  2. Realiza al menos una llamada a la API de Cloud Asset Inventory en PROJECT_A para crear el Cloud Asset Inventory predeterminado cuenta de servicio. Como alternativa, puedes crearlo de forma manual:

    gcloud beta services identity create \
        --service=cloudasset.googleapis.com \
        --project=PROJECT_A_ID
    gcloud projects add-iam-policy-binding PROJECT_A_ID \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/cloudasset.serviceAgent
    

    Cómo encontrar un número de proyecto de Google Cloud

    Console

    Para encontrar un número de proyecto de Google Cloud, completa los siguientes pasos:

    1. Ve a la página Panel en la consola de Google Cloud.

      Ir al panel

    2. Haz clic en el cuadro de selector en la barra de menú.
    3. Selecciona tu organización en el cuadro Seleccionar una opción y, luego, busca tu el nombre del proyecto.
    4. Haz clic en el nombre del proyecto para cambiar a ese proyecto. El número de proyecto se muestra Tarjeta Información del proyecto

    gcloud CLI

    Puedes recuperar un número de proyecto de Google Cloud con el siguiente comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"

  3. Otorga los permisos correctos a la cuenta de servicio.

    • Para publicar en un feed a través de Pub/Sub, otorga el permiso La función roles/pubsub.publisher a la cuenta de servicio en el tema:

      gcloud pubsub topics add-iam-policy-binding projects/PROJECT_B_ID/topics/TOPIC_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/pubsub.publisher
      
    • Para escribir en un bucket de Cloud Storage, otorga el permiso La función roles/storage.objectCreator para la cuenta de servicio en el bucket:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/storage.objectCreator
      
    • Para escribir en una tabla de BigQuery, otorga el permiso Roles roles/bigquery.dataEditor y roles/bigquery.user para el servicio en el proyecto:

      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.user
      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.dataEditor
      

Cuando realices solicitudes de Cloud Asset Inventory, asegúrate de especificar PROJECT_A como el proyecto que deseas usar Para ello, gcloud CLI, establece la marca --billing-project en PROJECT_A_ID Para REST, configura X-Goog-User-Project encabezado a PROJECT_A_ID.

¿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 todos las actualizaciones de recursos están disponibles para los clientes en minutos; en casos excepcionales, es posible el resultado de los métodos de la API de Cloud Asset no incluirá el recurso más reciente actualizaciones.

¿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. Después del se complete, los archivos temporales se quitarán automáticamente.

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

¿Por qué se rechazó mi credencial de Google Cloud CLI o Cloud Shell?

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

Your application has authenticated using end user credentials from the
Google Cloud CLI 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, configura el proyecto de usuario con el nombre del usuario que tiene habilitada la API de Cloud Asset. el ID del proyecto. Para ello, especifica el encabezado HTTP X-Goog-User-Project en la solicitud HTTP.

Si usas curl, puedes agregar el siguiente parámetro:

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

Si usas gcloud CLI, especifica la marca --billing-project PROJECT_ID junto con el gcloud asset o usa el siguiente:

gcloud config set billing/quota_project PROJECT_ID

¿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 hay diferentes programaciones de transferencia de datos para cada tipo de contenido y, hasta que de procesamiento de datos cuando se completa el proceso de transferencia de datos, pueden ser incoherentes. Consulta el update_time para asegurarte de que el recurso tenga la información más actualizada información.

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 el mismo proyecto, la misma carpeta o organización de forma secuencial; Por ejemplo, genera la segunda llamada después de se completa el anterior. Si deseas capturar actualizaciones de elementos en tiempo real, considera usar notificaciones en tiempo real.

Recibir actualizaciones de recursos duplicados

Después de configurar las notificaciones en tiempo real, haz lo siguiente: es posible que recibas actualizaciones de recursos duplicados en tu en el tema. Esto se debe a un intento automático de reintentar la entrega, ya que Pub/Sub no garantiza la entrega al menos una vez.

¿Por qué no recibí notificaciones para borrar proyectos?

Cuando cierras un proyecto, tienes 30 días. para deshacer la operación. El campo deleted en la notificación no se establece hasta que el proyecto se borre de forma permanente. Para supervisar proyectos pendientes puede configurar un feed con una condición en el lifecycleState del proyecto, por ejemplo temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"

¿Cómo recupero la representación JSON de un recurso con la API de SearchAllResources?

De forma predeterminada, SearchAllResources muestra los siguientes campos estándar cuando No se especificó read_mask:

  • name

  • assetType

  • project

  • folders

  • organization

  • displayName

  • description

  • location

  • labels

  • networkTags

  • kmsKeys

  • createTime

  • updateTime

  • state

  • additionalAttributes

  • parentFullResourceName

  • parentAssetType

Si quieres recuperar todos los campos en los metadatos del recurso además de en los campos anteriores, puedes especificar la marca read_mask (--read-mask en gcloud) en la solicitud de búsqueda.

Una read_mask es una lista de campos, separados por comas, que deseas que se devuelvan en tus resultados. Algunos campos son demasiado grandes, como versionedResources y attachedResources, por lo que no se incluyen en los resultados de forma predeterminada. Para incluir estos campos, puedes especificarlos en el read_mask; o usa "*" para incluir todos los campos disponibles. Estos son algunos ejemplos de valores read_mask: "name,location", "name,versionedResources" y "*".

Aquí tienes un ejemplo de gcloud:

gcloud asset search-all-resources \
    --scope=organizations/123456 \
    --query="state=RUNNING" \
    --asset-types=compute.googleapis.com/Instance \
    --read-mask="name,versionedResources"