La API de Cloud Asset te permite usar un lenguaje de consulta personalizado para consultar los metadatos de los recursos de un proyecto, organización o carpeta.
Antes de comenzar
- Habilita la API de Cloud DLP para el proyecto.
- Otorga el permiso
cloudasset.assets.searchAllResources
a la cuenta de usuario o cuenta de servicio que realiza la solicitud. Este permiso se incluye en las funciones básicas y las funciones predefinidas que se enumeran enRoles
.
Llama a SearchAllResources
gcloud
Puedes llamar a SearchAllResources
con el comando gcloud asset search-all-resources
. Debes ejecutar la versión 302.0.0 del SDK de Cloud o una más reciente. Puedes verificar tu versión con el comando gcloud version
.
gcloud asset search-all-resources \ --scope=SCOPE \ --query=QUERY \ --asset-types=ASSET_TYPES,… \ --order-by=ORDER_BY \ --page-size=PAGE_SIZE \
Todas las siguientes marcas son opcionales:
(Opcional) SCOPE: Un permiso puede ser un proyecto, una carpeta o una organización. La búsqueda está limitada a los recursos de Google Cloud dentro de este alcance. El emisor debe tener el permiso
cloudasset.assets.searchAllResources
en el alcance deseado. Si no se especifica, se usará la propiedad del proyecto configurado. Para encontrar el proyecto configurado, ejecutagcloud config get-value project
. Para cambiar la configuración, ejecutagcloud config set project PROJECT_ID
.Los valores permitidos son los siguientes:
projects/PROJECT_ID
(p. ej., "projects/foo-bar
")projects/PROJECT_NUMBER
(p. ej., "projects/12345678
")folders/FOLDER_NUMBER
(p. ej., "folders/1234567
")organizations/ORGANIZATION_NUMBER
(p. ej., "organizations/123456
")
QUERY: la declaración de la consulta (opcional). Consulta cómo construir una consulta para obtener más información. Si no se especifica o está vacía, buscará todos los recursos dentro del
scope
especificado.Ejemplos:
name:Important
para encontrar recursos de Google Cloud cuyo nombre contenga la palabra "Importante".name=Important
para encontrar el recurso de Google Cloud cuyo nombre es exactamente "Importante".displayName:Impor*
para encontrar recursos de Google Cloud cuyo nombre comercial contenga “Impax” como prefijo de cualquier palabra.location:us-west*
para encontrar recursos de Google Cloud cuya ubicación tenga dos palabras con “us” y “west” como prefijos.labels:prod
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave o el valor contenga la palabra “prod”.labels.env:prod
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave sea "env" y el valor contenga la palabra "prod".labels.env:*
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave sea "env".kmsKey:key
para encontrar recursos de Google Cloud encriptados con una clave de encriptación administrada por el cliente cuyo nombre contenga “clave” como palabra.state:ACTIVE
para encontrar recursos de Google Cloud cuyo estado contenga "ACTIVE" como una palabra.createTime<1609459200
para encontrar recursos de Google Cloud que se crearon antes de “2021-01-01 00:00:00 UTC”. 1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00:00 UTC”.updateTime>1609459200
para encontrar recursos de Google Cloud que se actualizaron después de “2021-01-01 00:00:00 UTC”. 1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00:00 UTC”.Important
para encontrar recursos de Google Cloud que contengan la palabra "Importante" en cualquiera de los campos de búsqueda.Impor*
para encontrar recursos de Google Cloud que contengan "Impor" como prefijo de cualquier palabra en cualquiera de los campos de búsqueda.Important location:(us-west1 OR global)
para encontrar recursos de Google Cloud que contengan la palabra "Importante" en cualquiera de los campos de búsqueda y también se encuentran en la región “us-west1” o en la ubicación “global”.
ASSET_TYPES (Opcional) Es una lista de tipos de recursos para buscar. Si no se especifica o está vacía, buscará todos los tipos de recursos que se pueden buscar. Ejemplo:
"cloudresourcemanager.googleapis.com/Project,compute.googleapis.com/Instance"
para buscar recursos de instancias de proyecto y de VM. También se admiten expresiones regulares. Por ejemplo: recursos de instantáneas"compute.googleapis.com.*"
cuyo tipo de elemento comienza con"compute.googleapis.com"
. Consulta RE2 para ver todas las sintaxis de expresión regular compatibles. Si la expresión regular no coincide con ningún tipo de elemento compatible, se mostrará un errorINVALID_ARGUMENT
.ORDER_BY (opcional): Es una lista de campos separados por comas que especifican el orden de clasificación de los resultados. El orden predeterminado es ascendente. Agrega
" DESC"
después del nombre del campo para indicar el orden descendente. Se ignoran los caracteres de espacio redundantes. Ejemplo:"location DESC, name"
. Solo los campos de string de la respuesta se pueden ordenar, incluidosname
,displayName
,description
ylocation
.PAGE_SIZE: El tamaño de la página para la paginación del resultado de la búsqueda (opcional). La cantidad máxima es 500. Si el valor se establece en
0
, se seleccionará un valor predeterminado adecuado.
Los siguientes son comandos de gcloud
de ejemplo:
Busca todos los recursos en el "
organizations/123456
" cuyoname
contenga la palabramycompany
:gcloud asset search-all-resources \ --scope='organizations/123456' --query='name:mycompany'
api
Puedes llamar a SearchAllResources
con un token de OAuth válido para un proyecto.
Para llamar al método SearchAllResources
desde Cloud Shell o cualquier consola en la que esté disponible el comando gcloud
:
Si no configuraste la pantalla de consentimiento de OAuth de tu proyecto, deberás hacerlo. Se requerirá una dirección de correo electrónico y un nombre del producto.
- Ve a la pantalla de consentimiento de OAuth de tu proyecto.
Configuración de la pantalla de consentimiento - Ingresa el Nombre de la aplicación que deseas mostrar.
- En Correo electrónico de asistencia, selecciona la dirección de correo electrónico que deseas mostrar como contacto público. Debe ser tu dirección de correo electrónico o un grupo de Google que te pertenezca.
- Agrega otro tipo de información opcional que desees mostrar.
- Haz clic en Guardar.
- Ve a la pantalla de consentimiento de OAuth de tu proyecto.
Crea un token de OAuth para tu proyecto. Consulta Configura OAuth 2.0 para obtener más información.
- Ve a la página Crear ID de cliente de OAuth.
Crear clientes de OAuth - Selecciona App de escritorio como el Tipo de aplicación.
- Haga clic en Crear.
- Ve a la página Crear ID de cliente de OAuth.
Descarga el archivo
client_secret.json
.- Ve a la página Credenciales.
- A la derecha de tu ID de cliente nuevo, haz clic en Descargar JSON.
- Almacena el archivo de forma segura en una ubicación a la que solo pueda acceder tu app.
Accede mediante el archivo JSON son el siguiente comando.
gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
Tenga en cuenta que este comando te solicitará que abras un vínculo. Asegúrate de que la página muestre el Nombre de la aplicación que estableciste en la pantalla de consentimiento de OAuth.
Genera un token de autenticación para tu cuenta con el siguiente comando:
TOKEN=$(gcloud auth application-default print-access-token)
Ahora puedes consultar recursos con los comandos
curl
.PAGE_SIZE=PAGE_SIZE PAGE_TOKEN="PAGE_TOKEN" SCOPE="SCOPE" QUERY="QUERY" ASSET_TYPES="ASSET_TYPES,…" ORDER_BY="ORDER_BY" curl -s -G \ -H "Authorization: Bearer $TOKEN" \ -d "page_size=$PAGE_SIZE" \ -d "page_token=$PAGE_TOKEN" \ -d "scope=$SCOPE" \ -d "asset_types=$ASSET_TYPES" \ -d "order_by=$ORDER_BY" \ --data-urlencode "query=$QUERY" \ "https://cloudasset.googleapis.com/v1/$SCOPE:searchAllResources"
Todas las siguientes marcas son opcionales:
SCOPE: es obligatorio. Un permiso puede ser un proyecto, una carpeta o una organización. La búsqueda está limitada a los recursos de Google Cloud dentro de este alcance. El emisor debe tener el permiso
cloudasset.assets.searchAllResources
en el alcance deseado.Los valores permitidos son los siguientes:
projects/PROJECT_ID
(p. ej., "projects/foo-bar
")projects/PROJECT_NUMBER
(p. ej., "projects/12345678
")folders/FOLDER_NUMBER
(p. ej., "folders/1234567
")organizations/ORGANIZATION_NUMBER
(p. ej., "organizations/123456
")
QUERY: la declaración de la consulta (opcional). Consulta cómo construir una consulta para obtener más información. Si no se especifica o está vacía, buscará todos los recursos dentro del
scope
especificado.Ejemplos:
name:Important
para encontrar recursos de Google Cloud cuyo nombre contenga la palabra "Importante".name=Important
para encontrar el recurso de Google Cloud cuyo nombre es exactamente "Importante".displayName:Impor*
para encontrar recursos de Google Cloud cuyo nombre comercial contenga “Impax” como prefijo de cualquier palabra.location:us-west*
para encontrar recursos de Google Cloud cuya ubicación contenga los términos “us” y “west” como prefijos.labels:prod
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave o el valor contenga la palabra “prod”.labels.env:prod
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave sea "env" y el valor contenga la palabra "prod".labels.env:*
para encontrar recursos de Google Cloud que tengan una etiqueta en la que la clave sea "env".kmsKey:key
para encontrar recursos de Google Cloud encriptados con una clave de encriptación administrada por el cliente cuyo nombre contenga “clave” como palabra.state:ACTIVE
para encontrar recursos de Google Cloud cuyo estado contenga "ACTIVE" como una palabra.createTime<1609459200
para encontrar recursos de Google Cloud que se crearon antes de “2021-01-01 00:00:00 UTC”. 1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00:00 UTC”.updateTime>1609459200
para encontrar recursos de Google Cloud que se actualizaron después de “2021-01-01 00:00:00 UTC”. 1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00:00 UTC”.Important
para encontrar recursos de Google Cloud que contengan la palabra "Importante" en cualquiera de los campos de búsqueda.Impor*
para encontrar recursos de Google Cloud que contengan "Impor" como prefijo de cualquier palabra en cualquiera de los campos de búsqueda.Important location:(us-west1 OR global)
para encontrar recursos de Google Cloud que contengan la palabra "Importante" en cualquiera de los campos de búsqueda y también se encuentran en la región “us-west1” o en la ubicación “global”.
ASSET_TYPES (Opcional) Es una lista de tipos de recursos para buscar. Si no se especifica o está vacía, buscará todos los tipos de recursos que se pueden buscar. Ejemplo:
"cloudresourcemanager.googleapis.com/Project,compute.googleapis.com/Instance"
para buscar recursos de instancias de proyecto y de VM.ORDER_BY (opcional): Es una lista de campos separados por comas que especifican el orden de clasificación de los resultados. El orden predeterminado es ascendente. Agrega
" DESC"
después del nombre del campo para indicar el orden descendente. Se ignoran los caracteres de espacio redundantes. Ejemplo:"location DESC, name"
. Solo los campos de string de la respuesta se pueden ordenar, incluidosname
,displayName
,description
ylocation
.PAGE_SIZE: El tamaño de la página para la paginación del resultado de la búsqueda (opcional). La cantidad máxima es 500. Si el valor se establece en
0
, se seleccionará un valor predeterminado adecuado.(Opcional) PAGE_TOKEN: El token que representa el siguiente lote de resultados de la llamada anterior a este método. El
page_token
debe ser el mismo que el valor denext_page_token
de la respuesta de la llamada anterior.
Referencia de la API y biblioteca cliente
- SearchAllResources
Construye una consulta
Consulta la sintaxis de las consultas para obtener más información sobre el lenguaje de las consultas.
Consulta Busca una muestra de recursos para obtener más información sobre las consultas de muestra para varios casos de uso reales.
Consulta recursos de Google Cloud por campos de metadatos de recursos
Para buscar metadatos de recursos, una expresión de consulta tiene los siguientes formatos:
- Concordancia exacta de texto:
FIELD=QUERY
- Coincidencia parcial de texto:
FIELD:QUERY
- Coincidencia numérica: operadores de comparación (
=
,>
,>=
,<
,<=
)FIELDcomparison operatorQUERY
Los FIELD de metadatos de recursos que se pueden buscar pueden ser los siguientes:
- name: El nombre completo del recurso. Nota: No todos los tipos de recursos se pueden buscar. Consulta la lista de tipos de recursos que se pueden buscar.
- displayName: el nombre visible en la IU
- description: la descripción de texto del recurso en uno o más párrafos
- location: es la ubicación del recurso. La ubicación puede ser “global”, regional (p. ej., “us-east1”) o zonal (p. ej., “us-west1-b”).
labels: etiquetas asociadas con este recurso. Las etiquetas pueden coincidir con claves de etiqueta, valores de etiqueta o ambos. Consulta Etiquetar y agrupar recursos de GCP.
labels.[key]: valor de etiqueta identificado mediante la clave de etiqueta asociada con este recurso. Por ejemplo: “
labels.env:prod
”. Solo se permiten guiones (-
), guiones bajos (_
), caracteres en minúscula y números en las claves de etiqueta. Las claves deben comenzar con una letra minúscula. Se permite el uso de caracteres internacionales. Consulta los Requisitos para las etiquetas.networkTags: etiquetas de red asociadas con este recurso. Consulta Etiquetar y agrupar recursos de GCP.
kmsKey: La clave de encriptación administrada por el cliente que se usa para encriptar este recurso. Consulta CryptoKey y CryptoKeyVersion.
state: el valor de texto del estado de este recurso. Los diferentes tipos de recursos tienen definiciones de estado diferentes que se asignan a partir de varios campos de diferentes tipos de recursos. Ejemplo: Si el recurso es una instancia que proporciona Compute Engine, su estado incluirá PROVISIONING, STAGING, RUNNING, STOPPING, {12/}ING, {12/}ED, REPAIRING y TERMINATED. Consulta la definición de
status
en la referencia de la API. Si el recurso es un proyecto proporcionado por Cloud Resource Manager, su estado incluirá LIFECYCLE_STATE_UNSPECIFIED, ACTIVE, DELETE_REQUESTED y DELETE_IN_PROGRESS. Consulta la definición delifecycleState
en la referencia de la API.createTime: la marca de tiempo de creación de este recurso, en la que se creó el recurso. El nivel de detalle se expresa en segundos.
updateTime: la marca de tiempo de la última actualización de este recurso, en la que el recurso se modificó o eliminó por última vez. El nivel de detalle se expresa en segundos.
Ejemplos: Consulta por campo específico
Busca todos los recursos en tu
scope
cuyoname
contenga la palabraImportant
:name:Important
Encuentra todos los recursos en tu
scope
cuyodisplayName
contenga una palabra con el prefijoprod
:displayName:prod*
Busca todos los recursos en tu
scope
cuyolocation
contenga la palabraus
:location:us
Encuentra todos los recursos en tu
scope
cuyolocation
sea exactamente igual aus
:location=us
Busca todos los recursos en tu
scope
que tengan unlabel
donde la clave o el valor contenga la palabraprod
:labels:prod
Encuentra todos los recursos en tu
scope
que tengan unlabel
donde la clave seaenv
y el valor contenga la palabraprod
:labels.env:prod
Encuentra todos los recursos en tu
scope
que tengan unlabel
donde la clave seaenv
y el valor sea igual aprod
:labels.env=prod
Busca todos los recursos en tu
scope
que tengan unlabel
donde la clave seaenv
:labels.env:*
Busca todos los recursos en tu
scope
que uno denetworkTags
contenga la palabrainternal
:networkTags:internal
Encuentra todos los recursos en tu
scope
que uno denetworkTags
sea igual ainternal
:networkTags=internal
Encuentra todos los recursos en tu
scope
encriptados con una clave de encriptación administrada por el cliente cuyo nombre contenga la palabrakey
:kmsKey:key
Busca todos los recursos en tu
scope
cuyostate
contenga la palabraACTIVE
:state:ACTIVE
Encuentra todos los recursos en tu
scope
que se crearon antes de “2021-01-01 00:00:00 UTC” (1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00”. :00 UTC"):createTime<1609459200
Encuentra todos los recursos en tu
scope
que se hayan actualizado después de “2021-01-01 00:00:00 UTC” (1609459200 es la marca de tiempo del ciclo de entrenamiento en segundos de “2021-01-01 00:00”). :00 UTC"):updateTime>1609459200
Encuentra todos los recursos en tu
scope
cuyoname
contenga la palabraImportant
ydescription
contenga una palabra con el prefijoimport
:name:Important description:import*
Busca todos los recursos en tu
scope
cuyoname
contenga la palabraImportant
odescription
contenga una palabra con el prefijoimport
:name:Important OR description:import*
Consulta los recursos de Google Cloud por texto libre
También puedes usar una consulta de texto libre sin especificar un campo. Se mostrarán recursos siempre que haya un campo de los metadatos del recurso que coincida con la consulta.
Ejemplos: Consulta por texto libre
Encuentra todos los recursos en tu
scope
en el cual los campos de metadatos (p. ej.,name
,displayName
,description
) contiene la palabraImportant
:Important
Encuentra todos los recursos en tu
scope
en el cual los campos de metadatos (p. ej.,name
,displayName
,description
) contienen una palabra con el prefijoimport
:import*
Encuentra todos los recursos en tu
scope
en el cual los campos de metadatos (p. ej.,name
,displayName
,description
) contiene la palabraImportant
y también contiene una palabra con el prefijoprod
:Important prod*