Pertanyaan umum (FAQ) dan pemecahan masalah

Apakah Inventaris Aset Cloud merupakan layanan global?

Ya. Cloud Asset API tidak bergantung pada lokasi. Layanan ini memiliki endpoint global, yang menyalurkan metadata dari semua aset regional dan global yang didukung dalam Inventaris Aset Cloud. Cloud Asset API dapat diakses di zona mana pun.

Apa jenis konsistensi data yang disediakan Inventaris Aset Cloud?

Inventaris Aset Cloud memberikan konsistensi tertunda pada data saat ini dan konsistensi upaya terbaik pada data historis. Meskipun peluangnya rendah dalam praktiknya, Inventaris Aset Cloud tetap dapat melewatkan beberapa pembaruan aset di masa lalu.

Mengapa saya tidak memiliki izin untuk menggunakan Cloud Asset API?

Error akan ditampilkan jika Anda tidak memiliki izin untuk mengekspor aset atau mendapatkan histori tentang organisasi, project, atau folder.

Misalnya, jika Anda tidak memiliki izin, jalankan perintah berikut:

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

Menampilkan error berikut:

{
  "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."
      }
    ]
  }
}

Untuk mengatasi masalah ini, minta akses dari admin project, folder, atau organisasi Anda. Bergantung pada aset yang ingin Anda ekspor atau dapatkan historinya, Anda memerlukan salah satu peran berikut atau peran lain yang mencakup izin Cloud Asset API yang diperlukan:

  • cloudasset.viewer

  • cloudasset.owner

Untuk informasi selengkapnya tentang peran dan izin, lihat Memahami peran.

Untuk mengetahui informasi selengkapnya tentang opsi kontrol akses untuk Cloud Asset API, lihat Kontrol Akses.

Mengapa ekspor saya menampilkan error izin ditolak?

Kecuali jika Anda menentukan lain, Inventaris Aset Cloud akan menggunakan akun layanan Inventaris Aset Cloud default dalam project aktif untuk mengelola resource seperti topik Pub/Sub, bucket Cloud Storage, dan tabel BigQuery. Akun layanan ini dibuat saat pertama kali Anda memanggil Cloud Asset Inventory API dari project, dan secara default memiliki izin untuk mengelola resource ini selama resource tersebut berada di project yang sama.

Anda dapat menerima error izin ditolak dalam situasi berikut:

  • Saat menggunakan REST API, yang tidak menetapkan project aktif sehingga Inventaris Aset Cloud tidak tahu akun layanan mana yang akan digunakan.

  • Saat menggunakan gcloud CLI dari project yang berbeda dengan tempat topik Pub/Sub, bucket Cloud Storage, atau tabel BigQuery berada. Artinya, akun layanan Inventaris Aset Cloud default project yang aktif digunakan untuk melakukan tugas (jika ada), dan mungkin tidak memiliki izin untuk menulis ke resource project lain.

Untuk memastikan akun layanan yang benar digunakan saat membuat permintaan untuk mengekspor ke topik Pub/Sub, bucket Cloud Storage, atau tabel BigQuery, Anda dapat menentukan project ID yang berisi akun layanan Inventaris Aset Cloud default yang benar. Jika mengekspor dari satu project ke project lain, Anda juga perlu memberikan peran tertentu ke akun layanan.

gcloud

Untuk gcloud CLI, tambahkan flag --billing-project ke perintah Anda untuk menentukan project ID yang berisi akun layanan yang benar:

--billing-project=BILLING_PROJECT_ID

Atau, Anda dapat menetapkan project penagihan sebelum menjalankan perintah dengan gcloud CLI. Pertama, periksa apakah project penagihan berbeda dengan project inti:

gcloud config list

Kemudian, jika perlu, tetapkan project penagihan:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Berikan nilai berikut:

  • BILLING_PROJECT_ID: Project ID yang mengaktifkan Cloud Asset Inventory API, dan akun layanan dengan izin untuk mengelola topik Pub/Sub target, bucket Cloud Storage, atau tabel BigQuery.

REST

Untuk REST API ini, tambahkan header X-Goog-User-Project untuk menentukan project ID yang berisi akun layanan yang benar. Saat menggunakan curl, Anda menetapkan header dengan flag -H:

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

Berikan nilai berikut:

  • BILLING_PROJECT_ID: Project ID yang mengaktifkan Cloud Asset Inventory API, dan akun layanan dengan izin untuk mengelola topik Pub/Sub target, bucket Cloud Storage, atau tabel BigQuery.

Mengekspor metadata aset dari satu project ke project lainnya

Untuk mengekspor metadata aset dari satu project, PROJECT_A, ke project lainnya, PROJECT_B, Anda harus memberi akun layanan Inventaris Aset Cloud default di PROJECT_A akses ke resource di PROJECT_B. Hal ini memungkinkan dua hal:

  • Anda dapat mengekspor metadata aset dari PROJECT_A ke topik Pub/Sub, bucket Cloud Storage, atau tabel BigQuery yang berada di PROJECT_B.

  • Anda dapat menggunakan PROJECT_A untuk mengekspor metadata aset dari PROJECT_B ke dalam topik Pub/Sub, bucket Cloud Storage, atau tabel BigQuery yang berada di PROJECT_B.

Untuk mengekspor metadata aset dari satu project ke project lain, selesaikan petunjuk berikut:

  1. Pastikan Cloud Asset Inventory API diaktifkan di project tempat Anda ingin menjalankan permintaan, PROJECT_A.

  2. Buat setidaknya satu panggilan ke Cloud Asset Inventory API di PROJECT_A untuk membuat akun layanan Inventaris Aset Cloud default. Atau, Anda dapat membuatnya secara 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
    

    Cara menemukan nomor project Google Cloud

    Konsol

    Untuk menemukan nomor project Google Cloud, selesaikan langkah-langkah berikut:

    1. Buka halaman Dasbor di Konsol Google Cloud.

      Buka Dasbor

    2. Klik kotak pengalih di panel menu.
    3. Pilih organisasi dari kotak Pilih dari, lalu telusuri nama project Anda.
    4. Klik nama project untuk beralih ke project tersebut. Nomor project ditampilkan di kartu Project info.

    gcloud CLI

    Anda dapat mengambil nomor project Google Cloud dengan perintah berikut:

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

  3. Berikan izin yang benar ke akun layanan.

    • Untuk memublikasikan ke feed melalui Pub/Sub, berikan peran roles/pubsub.publisher ke akun layanan pada topik tersebut:

      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
      
    • Untuk menulis ke bucket Cloud Storage, berikan peran roles/storage.admin ke akun layanan di bucket tersebut:

      gsutil iam ch \
        serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com:objectCreator \
        gs://BUCKET_NAME
      
    • Untuk menulis ke tabel BigQuery, berikan peran roles/bigquery.dataEditor dan roles/bigquery.user ke akun layanan di project tersebut:

      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
      

Saat membuat permintaan Inventaris Aset Cloud, pastikan untuk menentukan PROJECT_A sebagai project yang ingin Anda gunakan. Untuk melakukannya pada gcloud CLI, tetapkan flag --billing-project ke PROJECT_A_ID. Untuk REST, tetapkan header X-Goog-User-Project ke PROJECT_A_ID.

Mengapa hasil Cloud Asset API sudah tidak berlaku?

Keaktualan data di Cloud Asset API dilakukan atas dasar upaya terbaik. Meskipun hampir semua pembaruan aset tersedia untuk klien dalam hitungan menit, dalam kasus yang jarang terjadi, kemungkinan hasil metode Cloud Asset API tidak akan menyertakan pembaruan aset terbaru.

Mengapa file sementara akan ditampilkan setelah menjalankan ExportAssets?

Operasi ExportAssets dapat membuat file sementara di folder output. Jangan menghapus file sementara ini saat operasi sedang berlangsung. Setelah operasi selesai, file sementara akan dihapus secara otomatis.

Jika file sementara tetap ada, Anda dapat menghapusnya dengan aman setelah operasi ExportAssets selesai.

Mengapa kredensial Google Cloud CLI atau Cloud Shell saya ditolak?

Jika project pengguna dalam permintaan dikirim ke cloudasset.googleapis.com dari Google Cloud CLI atau Cloud Shell, Anda akan menerima pesan error seperti berikut:

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/.

Untuk memperbaiki masalah ini, tetapkan project pengguna ke ID project pengguna yang mengaktifkan Cloud Asset API. Hal ini dapat dilakukan dengan menentukan X-Goog-User-Project header HTTP dalam permintaan HTTP.

Jika Anda menggunakan curl, hal ini dapat dilakukan dengan menambahkan parameter berikut:

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

Jika Anda menggunakan gcloud CLI, tentukan flag --billing-project PROJECT_ID bersama dengan perintah gcloud asset, atau gunakan perintah berikut:

gcloud config set billing/quota_project PROJECT_ID

Mengapa saya melihat ancestor yang berbeda untuk aset yang sama?

Saat memanggil Cloud Asset API untuk mendapatkan jenis metadata yang berbeda, seperti metadata RESOURCE dan metadata IAM POLICY untuk aset yang sama, kolom ancestors mungkin tidak konsisten di seluruh jenis konten. Hal ini karena ada jadwal penyerapan data yang berbeda untuk setiap jenis konten, dan hingga proses penyerapan selesai, jadwal penyerapan data tersebut mungkin tidak konsisten. Periksa kolom update_time untuk memastikan bahwa aset memiliki informasi terbaru.

Hubungi kami jika ketidaksesuaian ini berlangsung selama lebih dari 24 jam.

Seberapa sering saya harus memanggil ExportAssets API?

Sebaiknya panggil ExportAssets API untuk project, folder, atau organisasi yang sama secara berurutan; Misalnya, lakukan panggilan kedua setelah panggilan sebelumnya selesai. Jika Anda ingin merekam pembaruan aset secara real time, sebaiknya gunakan notifikasi real-time.

Menerima pembaruan aset duplikat

Setelah menyiapkan notifikasi real-time, Anda dapat menerima pembaruan aset duplikat dalam topik Pub/Sub. Hal ini disebabkan oleh upaya otomatis untuk mencoba kembali pengiriman, karena Pub/Sub tidak menjamin penayangan setidaknya satu kali.

Mengapa saya tidak menerima notifikasi untuk penghapusan project?

Saat menghentikan project, Anda memiliki waktu 30 hari untuk mengurungkan operasi tersebut. Kolom deleted dalam notifikasi tidak ditetapkan hingga project dihapus secara permanen. Untuk memantau project yang menunggu penghapusan, Anda dapat menetapkan feed dengan kondisi pada lifecycleState project, misalnya temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED".

Bagaimana cara mengambil representasi JSON resource dengan SearchAllResources API?

Secara default, SearchAllResources menampilkan kolom standar berikut jika read_mask tidak ditentukan:

  • name

  • assetType

  • project

  • folders

  • organization

  • displayName

  • description

  • location

  • labels

  • networkTags

  • kmsKeys

  • createTime

  • updateTime

  • state

  • additionalAttributes

  • parentFullResourceName

  • parentAssetType

Jika ingin mengambil semua kolom dalam metadata resource selain kolom yang tercantum di atas, Anda dapat menentukan flag read_mask (--read-mask dalam gcloud) dalam permintaan penelusuran.

read_mask adalah daftar kolom, yang dipisahkan dengan koma, yang ingin ditampilkan dalam hasil Anda. Beberapa kolom terlalu besar, seperti versionedResources dan attachedResources, sehingga tidak disertakan dalam hasil secara default. Untuk menyertakan kolom ini, Anda dapat menentukannya dalam read_mask; atau menggunakan "*" untuk menyertakan semua kolom yang tersedia. Contoh nilai read_mask mencakup: "name,location", "name,versionedResources", dan "*".

Berikut adalah contoh gcloud:

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