Assets auflisten

Sie können Ihre Assets in Projekten, Ordnern oder Organisationen in Google Cloud auflisten.

Hinweise

  1. Aktivieren Sie die Cloud Asset Inventory API in dem Projekt, in dem Sie Cloud Asset Inventory-Befehle ausführen.

    Cloud Asset Inventory API aktivieren

  2. Prüfen Sie, ob Ihrem Konto die richtige Rolle zum Aufrufen der Cloud Asset Inventory API zugewiesen ist. Informationen zu den einzelnen Berechtigungen für jeden Anruftyp finden Sie unter Berechtigungen.

Beschränkungen

  • Beim Auflisten von BigQuery-Tabellendaten werden nicht alle Felder unterstützt.

  • Asset-Feldern in BigQuery-Metadaten, die sich häufig ändern, wie numBytes, numLongTermBytes, numPhysicalBytes und numRows, werden null-Werte zugewiesen.

Assets auflisten

gcloud

gcloud asset list \
    --SCOPE \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME"

Geben Sie folgende Werte an:

  • SCOPE: Verwenden Sie einen der folgenden Werte:

    • project=PROJECT_ID, wobei PROJECT_ID die ID des Projekts ist, das das Asset enthält, das Sie abrufen möchten.
    • folder=FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit dem Asset ist, das du abrufen möchtest.

      ID eines Ordners in Google Cloud ermitteln

      Google Cloud Console

      So rufen Sie die ID eines Ordners in Google Cloud ab:

      1. Rufen Sie die Google Cloud -Konsole auf.

        Rufen Sie die Google Cloud -Console auf.

      2. Klicken Sie in der Menüleiste auf das Listenfeld Schalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      Dabei ist TOP_LEVEL_FOLDER_NAME ein teilweiser oder vollständiger Stringabgleich mit dem Namen des Ordners. Entfernen Sie das --format-Flag, um weitere Informationen zu den gefundenen Ordnern aufzurufen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, zu der das Asset gehört, das Sie abrufen möchten.

      ID einer Google Cloud -Organisation ermitteln

      Google Cloud Console

      So ermitteln Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud -Konsole auf.

        Rufen Sie die Google Cloud -Console auf.

      2. Klicken Sie in der Menüleiste auf das Listenfeld Schalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud -Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: Optional. Eine durch Kommas getrennte Liste von suchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn --asset-types nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn --content-type nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, das Datum der letzten Aktualisierung der Assets und zu welchen Projekten, Ordnern und Organisationen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die abgerufen werden sollen. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit dies funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im gcloud topic datetime format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn --snapshot-time nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.

Eine vollständige Liste der Optionen finden Sie in der Referenz zur gcloud CLI.

Beispiel

Mit dem folgenden Befehl wird ein resource-Metadaten-Snapshot von Compute Engine-Instanzen vom 30. Januar 2024 (2024-01-30) im Projekt my-project abgerufen.

Bevor Sie diesen Befehl ausführen, ändern Sie den Zeitstempel des Snapshots in den letzten 35 Tage und ändern Sie den Projektnamen.

gcloud asset list \
    --project=my-project \
    --asset-types=compute.googleapis.com/Instance \
    --content-type=resource \
    --snapshot-time="2024-01-30"

Beispielantwort

---
ancestors:
- projects/000000000000
- folders/000000000000
- organizations/000000000000
assetType: compute.googleapis.com/Instance
name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name
resource:
  data:
    ASSET_METADATA
updateTime: '2024-01-30T00:00:00.000000Z'

REST

HTTP-Methode und URL:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH/assets

JSON-Text anfordern:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "pageSize": "PAGE_SIZE",
  "pageToken": "PAGE_TOKEN"
}

Geben Sie folgende Werte an:

  • SCOPE_PATH: Verwenden Sie einen der folgenden Werte:

    Zulässige Werte:

    • projects/PROJECT_ID, wobei PROJECT_ID die ID des Projekts ist, das das Asset enthält, das Sie abrufen möchten.
    • projects/PROJECT_NUMBER, wobei PROJECT_NUMBER die Nummer des Projekts ist, das das Asset enthält, das Sie abrufen möchten.

      Projektnummer für Google Cloud ermitteln

      Google Cloud Console

      So finden Sie die Projektnummer eines Google Cloud -Projekts:

      1. Rufen Sie in der Google Cloud -Console die Seite Willkommen auf.

        Zur Begrüßungsseite

      2. Klicken Sie in der Menüleiste auf das Listenfeld Schalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus und suchen Sie dann nach dem Projektnamen. Der Projektname, die Projektnummer und die Projekt-ID werden in der Nähe der Überschrift Willkommen angezeigt.

        Es werden bis zu 4.000 Ressourcen angezeigt. Wenn Sie das gewünschte Projekt nicht finden, rufen Sie die Seite Ressourcen verwalten auf und filtern Sie die Liste mit dem Namen des Projekts.

      gcloud-CLI

      Sie können die Projektnummer eines Google Cloud -Projekts mit dem folgenden Befehl abrufen:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, wobei FOLDER_ID die ID des Ordners mit dem Asset ist, das du abrufen möchtest.

      ID eines Ordners in Google Cloud ermitteln

      Google Cloud Console

      So rufen Sie die ID eines Ordners in Google Cloud ab:

      1. Rufen Sie die Google Cloud -Konsole auf.

        Rufen Sie die Google Cloud -Console auf.

      2. Klicken Sie in der Menüleiste auf das Listenfeld Schalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Suchen Sie nach dem Namen des Ordners. Die Ordner-ID wird neben dem Ordnernamen angezeigt.

      gcloud-CLI

      Sie können die ID eines Google Cloud -Ordners auf Organisationsebene mit dem folgenden Befehl abrufen:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      Dabei ist TOP_LEVEL_FOLDER_NAME ein teilweiser oder vollständiger Stringabgleich mit dem Namen des Ordners. Entfernen Sie das --format-Flag, um weitere Informationen zu den gefundenen Ordnern aufzurufen.

      Der vorherige Befehl gibt nicht die IDs von Unterordnern in Ordnern zurück. Führen Sie dazu den folgenden Befehl mit der ID eines Ordners der obersten Ebene aus:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, wobei ORGANIZATION_ID die ID der Organisation ist, zu der das Asset gehört, das Sie abrufen möchten.

      ID einer Google Cloud -Organisation ermitteln

      Google Cloud Console

      So ermitteln Sie die ID einer Google Cloud -Organisation:

      1. Rufen Sie die Google Cloud -Konsole auf.

        Rufen Sie die Google Cloud -Console auf.

      2. Klicken Sie in der Menüleiste auf das Listenfeld Schalter.
      3. Wählen Sie Ihre Organisation aus dem Listenfeld aus.
      4. Klicken Sie auf den Tab Alle. Die Organisations-ID wird neben dem Namen der Organisation angezeigt.

      gcloud-CLI

      Sie können die ID einer Google Cloud -Organisation mit dem folgenden Befehl abrufen:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_TYPE_#: Optional. Ein Array von suchbaren Asset-Typen. RE2-kompatible reguläre Ausdrücke werden unterstützt. Wenn der reguläre Ausdruck mit keinem unterstützten Asset-Typ übereinstimmt, wird ein INVALID_ARGUMENT-Fehler zurückgegeben. Wenn assetTypes nicht angegeben ist, werden alle Asset-Typen zurückgegeben.
  • CONTENT_TYPE: Optional. Der Inhaltstyp der Metadaten, die Sie abrufen möchten. Wenn contentType nicht angegeben ist, werden nur grundlegende Informationen zurückgegeben, z. B. Asset-Namen, das Datum der letzten Aktualisierung der Assets und zu welchen Projekten, Ordnern und Organisationen sie gehören.
  • RELATIONSHIP_TYPE_#: Optional. Erfordert Zugriff auf die Premium- oder Enterprise-Stufe von Security Command Center oder Gemini Cloud Assist. Eine durch Kommas getrennte Liste der Asset-Beziehungstypen, die abgerufen werden sollen. Sie müssen CONTENT_TYPE auf RELATIONSHIP setzen, damit dies funktioniert.
  • SNAPSHOT_TIME: Optional. Die Zeit, zu der Sie einen Snapshot Ihrer Assets erstellen möchten, im RFC 3339-Format. Der Wert darf maximal 35 Tage in der Vergangenheit liegen. Wenn readTime nicht angegeben ist, wird ein Snapshot zum aktuellen Zeitpunkt erstellt.
  • PAGE_SIZE: Optional. Die Anzahl der Ergebnisse, die pro Seite zurückgegeben werden sollen. Der Maximalwert beträgt 500. Wenn der Wert auf 0 oder einen negativen Wert festgelegt ist, wird ein geeigneter Standardwert ausgewählt. Ein nextPageToken wird zurückgegeben, um nachfolgende Ergebnisse abzurufen.

  • PAGE_TOKEN: Optional. Lange Antwortantworten werden auf mehrere Seiten verteilt. Wenn pageToken nicht angegeben ist, wird die erste Seite zurückgegeben. Nachfolgende Seiten können aufgerufen werden, indem der Wert nextPageToken der vorherigen Antwort als Wert für pageToken verwendet wird.

Weitere Informationen zu allen Optionen finden Sie in der REST-Referenz.

Befehlsbeispiele

Mit den folgenden Befehlen wird ein resource-Metadaten-Snapshot von Compute Engine-Instanzen vom 30. Januar 2024 (2024-01-30T00:00:00Z) im Projekt my-project abgerufen.

Bevor Sie einen dieser Befehle ausführen, ändern Sie die Zeit des Snapshots in den letzten 35 Tage und ändern Sie den Projektnamen.

curl (Linux, macOS oder Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "assetTypes": ["compute.googleapis.com/Instance"],
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z"
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/assets

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "assetTypes": ["compute.googleapis.com/Instance"],
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z"
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/assets" | Select-Object -Expand Content

Beispielantwort

{
  "readTime": "2024-01-30T00:00:00Z",
  "assets": [
    {
      "name": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-name",
      "assetType": "compute.googleapis.com/Instance",
      "resource": {
        "version": "v1",
        "discoveryDocumentUri": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
        "discoveryName": "Instance",
        "parent": "//cloudresourcemanager.googleapis.com/projects/000000000000",
        "data": {
          ASSET_METADATA
        },
        "location": "us-central1-a"
      },
      "ancestors": [
        "projects/000000000000",
        "folders/000000000000",
        "organizations/000000000000"
      ],
    "updateTime": "2024-01-30T00:00:00.000000Z"
    }
  ]
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Asset.V1;

public class ListAssetsSample
{
    public  PagedEnumerable<ListAssetsResponse, Asset> ListAssets(string projectId)
    {
        // Create the client.
        AssetServiceClient client = AssetServiceClient.Create();

        // Build the request.
        ListAssetsRequest request = new ListAssetsRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            ContentType = ContentType.Resource,
        };

        // Call the API.
         PagedEnumerable<ListAssetsResponse, Asset> response = client.ListAssets(request);

        // Return the result.
        return response;
    }
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


// Sample list-assets list assets.
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"google.golang.org/api/iterator"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
)

func main() {
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	assetType := "storage.googleapis.com/Bucket"
	req := &assetpb.ListAssetsRequest{
		Parent:      fmt.Sprintf("projects/%s", projectID),
		AssetTypes:  []string{assetType},
		ContentType: assetpb.ContentType_RESOURCE,
	}

	// Call ListAssets API to get an asset iterator.
	it := client.ListAssets(ctx, req)

	// Traverse and print the first 10 listed assets in response.
	for i := 0; i < 10; i++ {
		response, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println(response)
	}
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

// Imports the Google Cloud client library

public class ListAssetsExample {

  public static void listAssets() throws IOException, IllegalArgumentException {
    // The project id of the asset parent to list.
    String projectId = "YOUR_PROJECT_ID";
    // The asset types to list. E.g.,
    // ["storage.googleapis.com/Bucket", "bigquery.googleapis.com/Table"].
    // See full list of supported asset types at
    // https://cloud.google.com/asset-inventory/docs/supported-asset-types.
    String[] assetTypes = {"YOUR_ASSET_TYPES_TO_LIST"};
    // The asset content type to list. E.g., ContentType.CONTENT_TYPE_UNSPECIFIED.
    // See full list of content types at
    // https://cloud.google.com/asset-inventory/docs/reference/rpc/google.cloud.asset.v1#contenttype
    ContentType contentType = ContentType.CONTENT_TYPE_UNSPECIFIED;
    listAssets(projectId, assetTypes, contentType);
  }

  public static void listAssets(String projectId, String[] assetTypes, ContentType contentType)
      throws IOException, IllegalArgumentException {
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);

      // Build initial ListAssetsRequest without setting page token.
      ListAssetsRequest request =
          ListAssetsRequest.newBuilder()
              .setParent(parent.toString())
              .addAllAssetTypes(Arrays.asList(assetTypes))
              .setContentType(contentType)
              .build();

      // Repeatedly call ListAssets until page token is empty.
      ListAssetsPagedResponse response = client.listAssets(request);
      System.out.println(response);
      while (!response.getNextPageToken().isEmpty()) {
        request = request.toBuilder().setPageToken(response.getNextPageToken()).build();
        response = client.listAssets(request);
        System.out.println(response);
      }
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// const contentType = 'RESOURCE';

const util = require('util');
const {v1} = require('@google-cloud/asset');
const client = new v1.AssetServiceClient();

const projectId = await client.getProjectId();
const projectResource = `projects/${projectId}`;
// TODO(developer): Choose types of assets to list, such as 'storage.googleapis.com/Bucket':
//   const assetTypes = 'storage.googleapis.com/Bucket,bigquery.googleapis.com/Table';
// Or simply use empty string to list all types of assets:
//   const assetTypes = '';
const assetTypesList = assetTypes ? assetTypes.split(',') : [];

async function listAssets() {
  const request = {
    parent: projectResource,
    assetTypes: assetTypesList,
    contentType: contentType,
    // (Optional) Add readTime parameter to list assets at the given time instead of current time:
    //   readTime: { seconds: 1593988758 },
  };

  // Call cloud.assets.v1.ListAssets API.
  const result = await client.listAssets(request);
  // Handle the response.
  console.log(util.inspect(result, {depth: null}));
}
listAssets();

PHP

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\ListAssetsRequest;

/**
 * @param string   $projectId  Tthe project Id for list assets.
 * @param string[] $assetTypes (Optional) Asset types to list for.
 * @param int      $pageSize   (Optional) Size of one result page.
 */
function list_assets(
    string $projectId,
    array $assetTypes = [],
    int $pageSize = null
): void {
    // Instantiate a client.
    $client = new AssetServiceClient();

    // Run request
    $request = (new ListAssetsRequest())
        ->setParent("projects/$projectId")
        ->setAssetTypes($assetTypes)
        ->setPageSize($pageSize);
    $response = $client->listAssets($request);

    // Print the asset names in the result
    foreach ($response->getPage() as $asset) {
        print($asset->getName() . PHP_EOL);
    }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO asset_types = 'Your asset type list, e.g.,
# ["storage.googleapis.com/Bucket","bigquery.googleapis.com/Table"]'
# TODO page_size = 'Num of assets in one page, which must be between 1 and
# 1000 (both inclusively)'
# TODO content_type ="Content type to list"

project_resource = f"projects/{project_id}"
client = asset_v1.AssetServiceClient()

# Call ListAssets v1 to list assets.
response = client.list_assets(
    request={
        "parent": project_resource,
        "read_time": None,
        "asset_types": asset_types,
        "content_type": content_type,
        "page_size": page_size,
    }
)

for asset in response:
    print(asset)

Ruby

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Asset Inventory finden Sie hier.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Asset Inventory zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

require "google/cloud/asset"

asset_service = Google::Cloud::Asset.asset_service
# project_id = 'YOUR_PROJECT_ID'
formatted_parent = asset_service.project_path project: project_id

content_type = :RESOURCE
response = asset_service.list_assets(
  parent:           formatted_parent,
  content_type:     content_type
)

# Do things with the result
response.page.each do |resource|
  puts resource
end