¿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 enPROJECT_B
.Puedes usar
PROJECT_A
para exportar metadatos de activos desdePROJECT_B
a un tema de Pub/Sub bucket de Cloud Storage o tabla de BigQuery ubicado enPROJECT_B
Para exportar metadatos de activos de un proyecto a otro, completa los siguientes pasos: instrucciones:
Asegúrate de que la API de Cloud Asset Inventory esté habilitado en el proyecto desde el que quieres ejecutar la solicitud,
PROJECT_A
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:
-
Ve a la página Panel en la consola de Google Cloud.
- Haz clic en el cuadro de selector en la barra de menú.
- Selecciona tu organización en el cuadro Seleccionar una opción y, luego, busca tu el nombre del proyecto.
- 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)"
-
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
yroles/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"