Memecahkan masalah umum

Halaman ini mencantumkan berbagai masalah yang mungkin Anda alami saat mengonfigurasi Kontrol Layanan VPC.

Perilaku kebijakan dengan cakupan yang tidak terduga

Anda mungkin melihat beberapa pelanggaran Kontrol Layanan VPC yang tidak terduga yang seharusnya diizinkan oleh kebijakan cakupan Anda. Merupakan masalah umum jika Anda tidak memiliki kebijakan akses tingkat organisasi, Anda mungkin mengalami beberapa masalah yang tidak terduga terkait kebijakan akses terbatas Anda.

Untuk mengatasi masalah ini, buat kebijakan akses di tingkat organisasi menggunakan perintah berikut:

gcloud access-context-manager policies create --organization <var>ORGANIZATION_ID</var> --title <var>POLICY_TITLE</var>

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi.
  • POLICY_TITLE: Judul yang dapat dibaca manusia untuk kebijakan akses Anda.

Untuk mengetahui informasi selengkapnya, lihat Membuat kebijakan akses.

VPC Bersama

Saat menggunakan VPC Bersama, perimeter layanan yang mencakup project yang termasuk dalam jaringan VPC Bersama juga harus menyertakan project yang menghosting jaringan. Jika project yang termasuk dalam jaringan VPC Bersama tidak berada dalam perimeter yang sama dengan project host, layanan mungkin tidak berfungsi seperti yang diharapkan atau mungkin akan diblokir sepenuhnya.

Pastikan host jaringan VPC Bersama berada dalam perimeter layanan yang sama dengan project yang terhubung ke jaringan.

Permintaan di antara perimeter

Biasanya, tingkat akses digunakan untuk mengizinkan permintaan dari luar perimeter layanan untuk resource yang dilindungi di dalam perimeter.

Akan tetapi, permintaan dari project dalam perimeter untuk resource yang dilindungi di perimeter lain ditolak, meskipun tingkat akses biasanya mengizinkan permintaan tersebut.

Misalnya, anggaplah Proyek A di Perimeter 1 meminta sumber daya dari Proyek B. Resource di Project B dilindungi oleh Perimeter 2. Karena Project A berada dalam perimeter, meskipun tingkat akses untuk Perimeter 2 biasanya mengizinkan permintaan untuk resource yang dilindungi, permintaan tersebut akan ditolak.

Gunakan salah satu pendekatan berikut untuk memfasilitasi permintaan di antara perimeter:

  • Gunakan kebijakan keluar dan masuk. Untuk mengizinkan permintaan dari perimeter lain ke resource yang dilindungi di perimeter Anda, perimeter lain harus menggunakan kebijakan traffic keluar, dan Anda harus menetapkan kebijakan ingress di perimeter Anda.

  • Menggunakan jembatan perimeter. Bridge memungkinkan dua project atau lebih di perimeter yang berbeda untuk membuat permintaan ke layanan dalam project tersebut. Permintaan ini diizinkan meskipun layanan dilindungi oleh perimeter masing-masing.

  • Pastikan layanan yang meminta dan resource target tidak dilindungi oleh perimeter. Dalam skenario ini, operasi berhasil karena layanan tidak dilindungi.

Alamat email tidak valid atau tidak ada

Saat memperbarui perimeter yang berisi akun utama yang dihapus, Anda mungkin mendapati pesan error The email address is invalid or non-existent.

Untuk memperbaiki masalah ini, Anda dapat melakukan salah satu tugas berikut:

  • Hapus alamat email yang tidak valid dari perimeter, yang mencakup tingkat akses serta aturan masuk dan keluar.

    Anda dapat menggunakan konsol Google Cloud atau Google Cloud CLI.

  • Melakukan operasi massal (khusus Google Cloud CLI) jika alamat email berada di kedua, Dry Run dan perimeter yang diterapkan.

    1. Dapatkan semua perimeter Anda:
      gcloud access-context-manager perimeters list --format=list \
       --policy=<POLICY_NAME> > my-perimeters.yaml
    
    1. Hapus alamat email yang tidak valid dari file my-perimeters.yaml dan simpan sebagai my-perimeters-updated.yaml.

    2. Ganti semua perimeter Anda:

      gcloud access-context-manager perimeters replace-all --format=list \
        --source-file=my-perimeters-updated.yaml \
        --policy=<POLICY_NAME>
    

Pelanggaran aturan masuk dan keluar

Log audit berisi informasi tentang pelanggaran aturan masuk dan keluar yang membantu Anda memahami pelanggaran perimeter.

Pelanggaran aturan masuk

Pelanggaran aturan masuk menunjukkan bahwa klien API di luar perimeter mencoba mengakses resource di dalam perimeter. Perimeter layanan menolak permintaan karena tidak ada aturan masuk atau tingkat akses yang cocok.

Pelanggaran aturan masuk di log audit berisi detail berikut:

  • Nama perimeter tempat pelanggaran aturan masuk terjadi.
  • Resource di dalam perimeter yang dicoba diakses oleh klien API di luar perimeter.

Pada contoh pelanggaran aturan masuk berikut, klien API di luar perimeter mencoba mengakses bucket Cloud Storage prod-protected-storage-bucket di dalam perimeter prod-perimeter.

ingressViolations: [
  0: {
    targetResource: "projects/1234/buckets/prod-protected-storage-bucket"
    servicePerimeter: "accessPolicies/123456789/servicePerimeters/prod-perimeter"
  }
]

Pelanggaran aturan keluar

Pelanggaran aturan keluar di log audit menunjukkan salah satu peristiwa berikut:

  • Klien API di dalam perimeter mencoba mengakses resource di luar perimeter.
  • Permintaan API yang melibatkan resource di dalam perimeter dan resource di luar perimeter. Misalnya, klien Cloud Storage yang memanggil perintah salin dengan satu bucket berada dalam perimeter dan bucket lainnya berada di luar perimeter.

Perimeter layanan menolak permintaan karena tidak ada aturan traffic keluar yang cocok. Pelanggaran aturan keluar di log audit mencakup detail berikut:

  • Jenis sumber seperti jaringan atau resource.
  • Sumber, yang merupakan resource atau jaringan, yang perimeternya mengalami pelanggaran traffic keluar.
  • Perimeter yang mengalami pelanggaran traffic keluar.
  • Resource target di luar perimeter yang coba diakses oleh permintaan.

Dalam contoh pelanggaran aturan keluar berikut, permintaan API menyertakan resource dari projects/5678 yang berada di dalam perimeter prod-perimeter, dan objek dari bucket Cloud Storage external-storage-bucket yang berada di luar perimeter.

egressViolations: [
  0: {
    sourceType: "Resource"
    source: "projects/5678"
    targetResource: "projects/4321/buckets/external-storage-bucket/objects/corp-resources.json"
    servicePerimeter: "accessPolicies/123456789/servicePerimeters/prod-perimeter"
  }
]

Proses debug permintaan yang diblokir oleh Kontrol Layanan VPC

Log audit Kontrol Layanan VPC adalah alat utama untuk men-debug permintaan yang diblokir oleh Kontrol Layanan VPC.

Jika akses diblokir secara tidak terduga, lihat log audit di project yang dilindungi oleh perimeter layanan. Log ini berisi data signifikan tentang resource yang diminta dan alasan permintaan tersebut ditolak. Untuk mendapatkan informasi tentang log audit, lihat Mendiagnosis masalah menggunakan Pemecah masalah.

Bagian berikut mencantumkan nilai violationReason yang mungkin Anda temui saat menggunakan Kontrol Layanan VPC.

NETWORK_NOT_IN_SAME_SERVICE_PERIMETER

Penyebab masalah ini mungkin salah satu dari hal berikut:

  • Klien di jaringan VPC dalam perimeter layanan mencoba mengakses project yang tidak berada di perimeter yang sama. Permintaan ini menyebabkan pelanggaran traffic keluar. Buat aturan keluar untuk memperbaiki masalah ini.
  • Klien dalam jaringan VPC yang berada di luar perimeter layanan mencoba mengakses project yang dilindungi oleh perimeter layanan. Permintaan ini menyebabkan pelanggaran ingress. Buat aturan masuk untuk memperbaiki masalah ini.

Klien dapat mengirim permintaan dari VM Compute Engine atau Google Kubernetes Engine, atau dari jaringan lokal melalui Cloud Interconnect atau VPN yang dikonfigurasi menggunakan jaringan VPC.

Diagram berikut menunjukkan bahwa pelanggaran traffic keluar terjadi saat klien dalam jaringan VPC di dalam perimeter layanan mencoba mengakses project di luar perimeter:

Pelanggaran traffic keluar karena NETWORK_NOT_IN_SAME_SERVICE_PERIMETER.

Berikut adalah contoh pelanggaran traffic keluar:

egressViolations: [
{
  servicePerimeter: "accessPolicies/<POLICY_NAME>/servicePerimeters/<PERIMETER_NAME>"
  source: "projects/<NETWORK_PROJECT_NUMBER>"
  sourceType: "Network"
  targetResource: "projects/<RESOURCE_PROJECT_NUMBER>"
}
]

Dengan keterangan:

  • <POLICY_NAME> adalah nama numerik kebijakan akses Anda.
  • <PERIMETER_NAME> adalah nama perimeter layanan.
  • <NETWORK_PROJECT_NUMBER> adalah nomor project dari project Google Cloud yang menyimpan jaringan VPC Anda.
  • <RESOURCE_PROJECT_NUMBER> adalah nomor project untuk project Google Cloud yang berisi resource.

Diagram berikut menunjukkan bahwa pelanggaran ingress terjadi saat klien di luar perimeter mencoba mengakses project di dalam perimeter:

Pelanggaran masuk karena NETWORK_NOT_IN_SAME_SERVICE_PERIMETER.

Berikut adalah contoh pelanggaran masuk:

ingressViolations: [
{
          targetResource: "projects/<RESOURCE_PROJECT_NUMBER>",
      source: "projects/<NETWORK_PROJECT_NUMBER>"
          servicePerimeter: "accessPolicies/<POLICY_NAME>/servicePerimeters/<PERIMETER_NAME>"
}
]

Dengan keterangan:

  • <RESOURCE_PROJECT_NUMBER> adalah nomor project untuk project Google Cloud yang berisi resource.
  • <NETWORK_PROJECT_NUMBER> adalah nomor project dari project Google Cloud yang menyimpan jaringan VPC Anda.
  • <POLICY_NAME> adalah nama numerik kebijakan akses Anda.
  • <PERIMETER_NAME> adalah nama perimeter layanan.

Resolusi

Untuk mengatasi error ini, buat aturan masuk atau keluar untuk perimeter Anda.

RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER

Masalah ini terjadi saat satu permintaan mengakses beberapa resource, tetapi resource tidak berada dalam perimeter layanan yang sama. Masalah ini terjadi terlepas dari lokasi klien dan apakah klien memiliki akses ke resource.

Diagram berikut menunjukkan klien yang mengakses resource dari project di luar perimeter dan dari project di dalam perimeter layanan:

Pelanggaran traffic keluar karena klien mengakses resource dari project di luar
perimeter.

Diagram berikut menunjukkan klien yang mengakses resource dari project yang berada dalam dua perimeter layanan yang berbeda, tetapi perimeternya tidak saling berkomunikasi:

Pelanggaran traffic keluar karena klien mengakses resource dari project yang berada di dua perimeter layanan yang berbeda.

Berikut adalah contoh pelanggaran traffic keluar:

egressViolations: [
{
  servicePerimeter: "accessPolicies/<POLICY_NAME>/servicePerimeters/<PERIMETER_NAME>"
  source: "projects/<RESOURCE_PROJECT_INSIDE_THIS_PERIMETER>"
  sourceType: "Resource"
  targetResource: "projects/<RESOURCE_PROJECT_OUTSIDE_THIS-PERIMETER>"
}
]

Dengan keterangan:

  • <POLICY_NAME> adalah nama numerik kebijakan akses Anda.
  • <PERIMETER_NAME> adalah nama perimeter layanan.
  • <RESOURCE_PROJECT_INSIDE_THIS_PERIMETER> adalah nomor project dari project Google Cloud yang berada dalam perimeter.
  • <RESOURCE_PROJECT_OUTSIDE_THIS_PERIMETER> adalah nomor project untuk project Google Cloud yang berada di luar perimeter.

Resolusi

Untuk mengatasi masalah ini, buat aturan keluar untuk perimeter Anda.

NO_MATCHING_ACCESS_LEVEL

Masalah ini terjadi jika alamat IP, persyaratan perangkat, atau identitas pengguna tidak cocok dengan aturan masuk atau tingkat akses yang ditetapkan ke perimeter. Artinya, klien yang bukan bagian dari jaringan Google Cloud mencoba mengakses resource jaringan Google Cloud dari luar perimeter. Misalnya, alamat IP yang sesuai dengan kolom callerIp dari data audit tidak cocok dengan rentang CIDR apa pun yang ditentukan di tingkat akses untuk perimeter layanan.

Jika alamat IP pemanggil tidak ada atau muncul sebagai alamat IP internal, pelanggaran ini mungkin disebabkan oleh layanan Google Cloud yang tidak terintegrasi dengan Kontrol Layanan VPC. Penyebabnya mungkin karena layanan Google Cloud mencoba mengakses layanan yang dilindungi dan gagal, seperti yang diharapkan.

Untuk memperbaiki masalah ini, sebaiknya buat aturan masuk, bukan tingkat akses karena aturan masuk menyediakan kontrol akses terperinci.

Diagram berikut menunjukkan klien yang mencoba mengakses resource dari luar perimeter:

Pelanggaran masuk karena NO_MATCHING_ACCESS_LEVEL.

Berikut adalah contoh pelanggaran masuk:

authenticationInfo: {
  principalEmail: "EMAIL"
}
requestMetadata: {
callerIp: "<PUBLIC_IP_ADDRESS>"
deviceState: "Cross Organization"
}
ingressViolations: [
        {
          targetResource: "projects/<RESOURCE_PROJECT_NUMBER>",
          servicePerimeter: "accessPolicies/<POLICY_NAME>/servicePerimeters/<PERIMETER-NAME>"
        }
  ]

Dengan keterangan:

  • <EMAIL> adalah alamat email akun layanan atau pengguna yang diautentikasi.

    Jika Anda menggunakan layanan Google Cloud yang tidak didukung oleh Kontrol Layanan VPC, alamat email yang termasuk dalam domain google.com akan disamarkan dan diganti dengan google-internal. google-internal mengacu pada identitas internal milik Google.

  • <PUBLIC_IP_ADDRESS> adalah alamat IP pemanggil. Untuk penelepon dari internet, ini akan menjadi alamat IPv4 atau IPv6 publik.

  • <RESOURCE_PROJECT_NUMBER> adalah nomor project untuk project Google Cloud yang berisi resource.

  • <POLICY_NAME> adalah nama numerik kebijakan akses Anda.

  • <PERIMETER_NAME> adalah nama perimeter layanan.

Perhatikan bahwa dalam kasus ini, metadata.accessLevels masih dapat ada karena tingkat akses ini mungkin tidak ditentukan dalam perimeter yang dilanggar.

SERVICE_NOT_ALLOWED_FROM_VPC

Masalah ini terjadi saat klien mencoba mengakses resource Google Cloud dari jaringan VPC. Klien dapat mengirim permintaan dari Compute Engine atau VM Google Kubernetes Engine, atau dari jaringan lokal melalui Cloud Interconnect atau VPN yang dikonfigurasi menggunakan jaringan VPC.

Untuk memperbaiki masalah ini, pastikan layanan yang dipanggil diizinkan oleh konfigurasi layanan yang dapat diakses VPC di perimeter layanan.

Contoh skenario

Contoh berikut mencakup masalah yang mungkin Anda alami saat menggunakan Kontrol Layanan VPC.

Akses Cloud Storage dari infrastruktur lokal

Dalam contoh ini, Kontrol Layanan VPC memblokir permintaan dari workstation karyawan (diidentifikasi oleh callerIp) ke bucket Cloud Storage di project corp-storage.

Permintaan tersebut menghasilkan data log audit berikut:

{
 insertId:  "222lvajc6f7"
 logName:  "projects/corp-storage/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "someone@google.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/_"
   ]
   violationReason:  "NO_MATCHING_ACCESS_LEVEL"
  }
  methodName:  "google.storage.NoBillingOk"
  requestMetadata: {
   callerIp:  "b1d5:d26d:5b17:43fe:d358:586b:db59:9617"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/690885588241"
  serviceName:  "storage.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-27T21:40:43.823209571Z"
 resource: {
  labels: {
   method:  "google.storage.NoBillingOk"
   project_id:  "corp-storage"
   service:  "storage.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-27T21:40:42.973784140Z"
}

Project corp-storage disertakan dalam perimeter layanan. Workstation karyawan bukan bagian dari jaringan apa pun dalam perimeter tersebut. Karena workstation karyawan berada di luar perimeter, permintaan akan diblokir.

Akses BigQuery dari VM di luar project

Dalam contoh ini, VM yang termasuk dalam project 458854174376 (data-collector) mencoba menjalankan kueri BigQuery terhadap set data dalam project 798816221974 (corp-resources-protected), dan permintaan tersebut ditolak.

VM menggunakan kueri berikut:

bq --project=corp-resources-protected query 'select count(*) from babynames.yob2000'

Kueri menampilkan output berikut:

BigQuery error in query operation: VPC Service Controls: Request is
prohibited by organization's policy. Operation ID:
33643962-6a0f-4091-9283-bcdf7e9271f0

Data log audit berikut dibuat:

{
 insertId:  "1ei551d2pdq"
 logName:  "projects/corp-resources-protected/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "714877721106-compute@example.gserviceaccount.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/1004338142803"
   ]
   violationReason:  "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "bigquery.googleapis.com/bigquery.jobs.create"
  requestMetadata: {
   callerIp:  "10.105.0.2"
   callerNetwork:  "//compute.googleapis.com/projects/ameet-dataflow/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/1004338142803"
  serviceName:  "bigquery.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-28T23:06:13.579882505Z"
 resource: {
  labels: {
   method:  "bigquery.googleapis.com/bigquery.jobs.create"
   project_id:  "corp-resources-protected"
   service:  "bigquery.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-28T23:06:12.799656975Z"
}

Dalam contoh ini, violationReason adalah NETWORK_NOT_IN_SAME_SERVICE_PERIMETER. callerNetwork disertakan selain callerIp. Alamat IP bersifat pribadi dan jaringan disediakan untuk membedakannya. Resource relevan yang dibahas di sini tercantum di dua tempat: VpcServiceControlAuditMetadata.resourceNames dan requestMetadata.callerNetwork (project yang memiliki jaringan).

Masalahnya adalah project corp-resources-protected berada di dalam perimeter layanan, sedangkan data-collector, project yang mencakup jaringan tempat VM berada, tidak. Dalam kasus ini, akses ditolak seperti yang diharapkan.

Kueri BigQuery lintas project

Dalam contoh ini, VM yang termasuk dalam project perimeter-network mencoba mengkueri instance BigQuery dari dua project berbeda: corp-resources-protected yang berada di perimeter layanan yang sama dengan perimeter-network, dan corp-resources-public yang tidak berada di perimeter layanan yang sama.

VM menggunakan perintah berikut:

bq query --use_legacy_sql=false \
  'select count(priv.name),count(pub.name) from \
  `corp-resources-protected.babynames.yob2000` as priv, \
  `corp-resources-public.babynames.yob2000` as pub'

Kueri menampilkan output berikut:

BigQuery error in query operation: Error processing job
'example:bqjob_r211e6f6eec928ffb_000001675c996aa8_1': VPC Service Controls:
Request is prohibited by organization's policy. Operation ID:
dc4fc177-4850-4fc5-b2e7-8c33f302149a

Data log audit berikut dibuat:

{
 insertId:  "17kg4exd24ag"
 logName:  "projects/perimeter-network/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/117961063178"
    1:  "projects/690885588241"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "bigquery.googleapis.com/bigquery.tables.getData"
  requestMetadata: {
   callerIp:  "130.211.225.66"
   callerNetwork:  "//compute.googleapis.com/projects/perimeter-network/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/927005422713"
  serviceName:  "bigquery.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-28T20:48:51.384237810Z"
 resource: {
  labels: {
   method:  "bigquery.googleapis.com/bigquery.tables.getData"
   project_id:  "perimeter-network"
   service:  "bigquery.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-28T20:48:50.561884949Z"
}

Dengan melihat callerNetwork dan VpcServiceControlAuditMetadata.resourceNames, kita dapat melihat tiga project: perimeter-network, 117961063178 (corp-resources-public), dan 690885588241 (corp-resources-protected). Perlu diingat bahwa corp-resources-public tidak berada dalam perimeter layanan yang sama dengan perimeter-network dan corp-resources-protected.

violationReason, RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER menunjukkan bahwa beberapa resource dalam permintaan berada di luar perimeter yang berlaku untuk permintaan tersebut. Dalam hal ini, resource tersebut adalah corp-resources-public.

Memindahkan file Cloud Storage ke dalam perimeter

Dalam contoh ini, VM di project perimeter-network menggunakan perintah untuk memindahkan file dari satu bucket Cloud Storage, yang terletak di project corp-resources-protected, ke bucket lain, yang terletak di project corp-resources-public.

VM menggunakan perintah berikut:

gsutil mv gs://corp-resources-private-1/yob2000.txt gs://corp-resources-public-1/babynames/

Perintah akan menampilkan output berikut:

Copying gs://corp-resources-private-1/yob2000.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Request violates VPC Service Controls.

Data log audit berikut dibuat:

{
 insertId:  "1xxnssmd2hqo"
 logName:  "projects/perimeter-network/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "storage-accessing@example.iam.gserviceaccount.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/_/buckets/corp-resources-public-1"
   ]
   violationReason:  "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "google.storage.BillingRequiredRead"
  requestMetadata: {
   callerIp:  "130.211.225.66"
   callerNetwork:  "//compute.googleapis.com/projects/perimeter-network/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/927005422713"
  serviceName:  "storage.googleapis.com"
  status: {…}
 }
 receiveTimestamp:  "2018-11-28T00:45:31.531623485Z"
 resource: {
  labels: {
   method:  "google.storage.BillingRequiredRead"
   project_id:  "perimeter-network"
   service:  "storage.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-28T00:45:31.351140381Z"
}

Dalam hal ini, log menjadi kurang jelas karena metode yang tercantum adalah BillingRequiredRead dan tindakan yang diambil adalah move. Ini adalah keterbatasan fungsi log audit Kontrol Layanan VPC saat ini.

Meskipun alasannya kurang jelas, data log audit ini menunjukkan bahwa beberapa resource dalam permintaan berada di luar perimeter yang berlaku untuk permintaan tersebut. Dalam hal ini, resource tersebut adalah corp-resources-public.

Memindahkan file Cloud Storage ke luar perimeter

Dalam contoh ini, VM di project public-network menggunakan perintah untuk memindahkan file dari satu bucket Cloud Storage, yang terletak di project corp-resources-protected, ke bucket lain, yang terletak di project corp-resources-public.

Project corp-resources-protected dilindungi oleh perimeter layanan. Project public-network dan corp-resources-public berada di luar perimeter.

VM menggunakan perintah berikut:

gsutil mv gs://corp-resources-private-1/yob2000.txt gs://corp-resources-public-1/babynames/

Perintah akan menampilkan output berikut:

Copying gs://corp-resources-private-1/yob2000.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Request violates VPC Service Controls.

Data log audit berikut dibuat:

{
 insertId:  "10moqhsch9v"
 logName:  "projects/corp-resources-private/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "user@example.biz"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/_/buckets/corp-resources-private-1/objects/yob2000.txt"
    1:  "projects/_/buckets/corp-resources-public-1/objects/out.txt"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "google.storage.Write"
  requestMetadata: {
   callerIp:  "2620:15c:2c4:203:63d6:5eb8:418d:c034"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/1004338142803"
  serviceName:  "storage.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-30T16:34:46.948010626Z"
 resource: {
  labels: {
   method:  "google.storage.Write"
   project_id:  "corp-resources-private"
   service:  "storage.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-30T16:34:46.898098978Z"
}

Dalam contoh ini, log audit menunjukkan bahwa seseorang tidak dapat menyalin data di seluruh batas perimeter layanan (kedua resource ada dalam data log audit). Ingat kembali bahwa permintaan berasal dari luar perimeter (VM di public-network), dan salah satu bucket ada di luar perimeter (corp-resources-public-1).

Dari luar perimeter, satu dapat menulis ke bucket corp-resources-public-1, sehingga pemeriksaan yang gagal pada contoh sebelumnya akan lulus. Namun, pemeriksaan berikutnya untuk benar-benar menyalin data gagal.

Contoh ini menunjukkan bagaimana terkadang satu operasi pengguna menghasilkan beberapa operasi internal yang harus lulus penerapan Kontrol Layanan VPC.

Salin set data BigQuery dari VM di dalam perimeter

Dalam contoh ini, VM di project 927005422713 (perimeter-network) mencoba menyalin set data BigQuery dari project corp-resources-private ke corp-resources-public (117961063178). perimeter-network dan corp-resources-private berbagi perimeter, sedangkan corp-resources-public ada di luar perimeter.

VM menggunakan perintah berikut:

bq cp corp-resources-private:babynames.yob2000 \
  corp-resources-public:babynames.yob2000

Perintah akan menampilkan output berikut:

BigQuery error in cp operation: VPC Service Controls: Request is prohibited by
organization's policy. Operation ID: c00dbc44-460f-4bd0-9d09-cda98ac800f9

Data log audit berikut dibuat:

{
 insertId:  "146o5fd2hbp"
 logName:  "projects/perimeter-network/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/117961063178"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "bigquery.googleapis.com/bigquery.tables.get"
  requestMetadata: {
   callerIp:  "131.201.221.16"
   callerNetwork:  "//compute.googleapis.com/projects/perimeter-network/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/927005422713"
  serviceName:  "bigquery.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-28T00:27:05.688803777Z"
 resource: {
  labels: {
   method:  "bigquery.googleapis.com/bigquery.tables.get"
   project_id:  "perimeter-network"
   service:  "bigquery.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-28T00:27:05.378584819Z"
}

Dalam contoh ini, tidak ada tindakan API dasar tunggal yang menampilkan semua resource yang berperan dalam permintaan ini karena keterbatasan mekanisme logging dan arsitektur BigQuery yang terdistribusi.

Data log audit menunjukkan bahwa operasi gagal karena untuk menyalin data, BigQuery harus mengakses project target (corp-resources-public) menggunakan jaringan dalam project perimeter-network (sumber permintaan). Ingat kembali bahwa corp-resources-public berada di luar perimeter yang melindungi perimeter-network. Permintaan ini ditolak sebagai upaya untuk memindahkan data secara tidak sah ke corp-resources-public.

Contoh ini menggambarkan bahwa satu operasi konseptual, seperti menyalin data, dapat memicu beberapa upaya untuk mengakses data dari sistem penyimpanan yang berbeda, seperti Cloud Storage, BigQuery, dan Bigtable. Berdasarkan cara operasi dijalankan, catatan log audit yang dihasilkan berbeda dengan perintah pengguna asli. Selain itu, jika beberapa pemeriksaan dalam layanan tertentu dilakukan dan berpotensi gagal, data log audit yang dihasilkan akan terlihat berbeda dari perintah pengguna asli.

Pembacaan tugas Dataproc dari project

Contoh ini menunjukkan cara men-debug error Kontrol Layanan VPC tidak langsung yang terjadi saat menggunakan layanan pemrosesan data seperti Dataproc.

Dalam contoh ini, cluster Dataproc berjalan di project yang dilindungi oleh Kontrol Layanan VPC. Hello-world.py adalah tugas pyspark yang mencoba mengakses data dari bucket Cloud Storage di dalam perimeter, lalu menulisnya ke bucket lain yang ada di luar perimeter. Kontrol Layanan VPC memblokir operasi yang menulis data ke bucket di luar perimeter.

Perintah berikut digunakan untuk menjalankan Hello-world.py:

gcloud dataproc jobs submit pyspark hello-world.py --cluster test-cluster-new2

Perintah akan menampilkan output berikut:

Job [50f16ca8-5102-442b-a545-eed5e4f5f5da] submitted.
Waiting for job output...
18/11/29 00:31:34 INFO org.spark_project.jetty.util.log: Logging initialized @2552ms
18/11/29 00:31:34 INFO org.spark_project.jetty.server.Server: jetty-9.3.z-SNAPSHOT
18/11/29 00:31:34 INFO org.spark_project.jetty.server.Server: Started @2640ms
18/11/29 00:31:34 INFO org.spark_project.jetty.server.AbstractConnector: Started ServerConnector@1f1c18ec{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
18/11/29 00:31:34 INFO com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase: GHFS version: 1.6.4-hadoop2
18/11/29 00:31:35 INFO org.apache.hadoop.yarn.client.RMProxy: Connecting to ResourceManager at test-cluster-new2-m/10.246.0.3:8032
18/11/29 00:31:37 INFO org.apache.hadoop.yarn.client.api.impl.YarnClientImpl: Submitted application application_1522454176466_0005
Traceback (most recent call last):
  File "/tmp/50f16ca8-5102-442b-a545-eed5e4f5f5da/hello-world.py", line 8, in <module>
    lear.saveAsTextFile("gs://corp-resources-public-1/out.txt")
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 1553, in saveAsTextFile
  File "/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
  File "/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o49.saveAsTextFile.
: java.io.IOException: Error accessing: bucket: corp-resources-public-1, object: out.txt
    at com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.wrapException(GoogleCloudStorageImpl.java:1767)
$sp(PairRDDFunctions.scala:961)

 (truncated)

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Request violates VPC Service Controls.",
    "reason" : "vpcServiceControls"
  } ],
  "message" : "Request violates VPC Service Controls."
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)

 (truncated)

18/11/29 00:31:43 INFO org.spark_project.jetty.server.AbstractConnector: Stopped Spark@1f1c18ec{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
ERROR: (gcloud.dataproc.jobs.submit.pyspark) Job [50f16ca8-5102-442b-a545-eed5e4f5f5da] entered state [ERROR] while waiting for [DONE].

Perhatikan pengecualian IO yang terjadi saat metode saveAsTextFile dipanggil. Cloud Storage menampilkan error 403 dengan pesan Request violates VPC Service Controls. Error tersebut menunjukkan bahwa operasi log audit Cloud Storage harus ditinjau.

Dalam log audit untuk project perimeter-network, tempat perintah dieksekusi, terdapat data log audit untuk operasi saveAsTextFile:

{
 insertId:  "qdj1o9d1run"
 logName:  "projects/corp-resources-private/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "1004338142803-compute@example.gserviceaccount.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/_/buckets/corp-resources-public-1/objects/out.txt"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "google.storage.BillingRequiredRead"
  requestMetadata: {
   callerIp:  "10.246.0.3"
   callerNetwork:  "//compute.googleapis.com/projects/corp-resources-private/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/1004338142803"
  serviceName:  "storage.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-29T00:31:43.666227930Z"
 resource: {
  labels: {
   method:  "google.storage.BillingRequiredRead"
   project_id:  "corp-resources-private"
   service:  "storage.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-29T00:31:43.608250320Z"
}

Karena batasan log audit, methodName untuk Cloud Storage tercantum sebagai Read meskipun sebenarnya merupakan operasi write. Data log audit menunjukkan bahwa operasi gagal karena jaringan dalam project corp-resources-private mencoba mengakses data (dalam hal ini, penulisan) resource dalam bucket corp-resources-public-1. Karena keterbatasan log audit Cloud Storage, tidak jelas termasuk bucket project mana corp-resources-public-1.

Untuk mengidentifikasi project yang berisi corp-resources-public-1, gunakan perintah berikut:

gsutil --debug ls -L -b gs://corp-resources-public-1 2>&1 | grep projectNumber

Perintah akan menampilkan output berikut:

projectNumber: u'117961063178'

117961063178 adalah project corp-resources-public, yang berada di luar perimeter. Dengan demikian, kegagalan yang diharapkan.

Error karena layanan yang tidak didukung

Beberapa layanan Google Cloud bergantung pada layanan Google Cloud lainnya sebagai bagian dari implementasinya. Jika layanan yang tidak didukung seperti App Engine digunakan di dalam project yang dilindungi oleh perimeter, resource layanan tersebut mungkin tidak dapat diakses.

Untuk mengetahui informasi tentang kasus masalah umum, lihat Batasan layanan umum.

Layanan tidak didukung dengan VIP yang dibatasi

Mencoba mengakses API yang tidak didukung oleh Kontrol Layanan VPC VIP terbatas akan menghasilkan error 403. Misalnya, Kontrol Layanan VPC tidak mendukung App Engine, sehingga App Engine Admin API tidak tersedia saat menggunakan VIP yang dibatasi.

Misalnya, perintah berikut digunakan untuk menampilkan daftar semua layanan App Engine dalam perimeter layanan:

gcloud app services list

Perintah akan menampilkan output berikut:

ERROR: (gcloud.app.services.list) User [***] does not have permission to access apps instance [***] (or it may not exist): <!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 403 (Forbidden)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){ #logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){ #logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>403.</b> <ins>That's an error.</ins>
  <p>Your client does not have permission to get URL <code>/v1/apps/***/services</code> from this server.  <ins>That's all we know.</ins>

Jenis error ini diperkirakan akan terjadi untuk layanan yang tidak didukung oleh Kontrol Layanan VPC dan tidak tersedia pada VIP yang dibatasi. Jika error ini terjadi pada layanan yang didukung oleh Kontrol Layanan VPC, sebaiknya periksa batasan layanan yang diketahui untuk layanan tersebut guna melihat apakah ini merupakan batasan yang diketahui. Jika tidak, masalah tersebut harus dilaporkan.

Ekspor log ke project di luar perimeter

Dalam contoh ini, ekspor log diblokir oleh Kontrol Layanan VPC. Tujuan ekspor, project corp-resources-public, berada di luar perimeter Kontrol Layanan VPC, sedangkan sink dibuat di project perimeter-network yang berada di dalam perimeter.

Misalnya, perintah berikut digunakan:

gcloud logging sinks describe example-sink

Perintah akan menampilkan output berikut:

destination: bigquery.googleapis.com/projects/corp-resources-public/datasets/logs
filter: |-
  resource.type="audited_resource"
  resource.labels.service="bigquery.googleapis.com"
name: example-sink
outputVersionFormat: V2
writerIdentity: serviceAccount:p927005422713-439672@gcp-sa-logging.iam.gserviceaccount.com

Data log audit berikut dibuat:

{
 insertId:  "e5i2i8cbqw"
 logName:  "projects/perimeter-network/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "p927005422713-439672@gcp-sa-logging.iam.gserviceaccount.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "corp-resources-public"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "google.cloud.bigquery.v2.TableDataService.InsertAll"
  requestMetadata: {
   callerIp:  "2002:a49:8c51::"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/927005422713"
  serviceName:  "bigquery.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-11-29T17:32:19.287138882Z"
 resource: {
  labels: {
   method:  "google.cloud.bigquery.v2.TableDataService.InsertAll"
   project_id:  "perimeter-network"
   service:  "bigquery.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-11-29T17:32:19.054662413Z"
}

Data log audit dibuat untuk BigQuery, bukan untuk Logging. Ini karena BigQuery adalah layanan sink yang menjadi tujuan penulisan oleh Logging.

Ekspor gagal karena corp-resources-public ada di luar perimeter yang melindungi perimeter-network.

Contoh ini menunjukkan bahwa untuk kasus saat satu layanan Google Cloud memanggil layanan lainnya menggunakan akun layanan terkelola yang bersifat internal untuk Google Cloud, seperti p927005422713-439672@gcp-sa-logging.iam.gserviceaccount.com, "project jaringan" (dalam hal ini, perimeter-network) permintaan berasal dari identitas tersebut. Identitas yang sama mewakili resource ekspor log itu sendiri.

Pola ini umum terjadi di Google Cloud dan berlaku untuk banyak kasus interaksi antarlayanan.

Ekstrak BigQuery ke Cloud Storage

Contoh ini menjelaskan cara men-debug ekstraksi BigQuery yang gagal ke Cloud Storage.

Dalam contoh ini, corp-resources-private dan perimeter-network adalah project yang dilindungi oleh perimeter layanan. corp-resources-public adalah project yang ada di luar perimeter.

Misalkan perintah berikut digunakan:

bq extract babynames.yob2000

Perintah akan menampilkan output berikut:

gs://corp-resources-public-1/export.txt
Waiting on bqjob_r47ee34109d02b41_000001676b27157c_1 ... (1s) Current status: DONE
BigQuery error in extract operation: Error processing job 'corp-resources-private:bqjob_r47ee34109d02b41_000001676b27157c_1': Access
Denied: BigQuery BigQuery: Permission denied while writing data.

Dalam hal ini, error tersebut tidak secara spesifik melibatkan Kontrol Layanan VPC. Error serupa akan ditampilkan jika terjadi kegagalan Identity and Access Management.

Data log audit berikut dibuat:

{
 insertId:  "4gbh6pe8jld7"
 logName:  "projects/corp-resources-private/logs/cloudaudit.googleapis.com%2Fdata_access"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "storage-accessing@example.iam.gserviceaccount.com"
  }
  methodName:  "jobservice.jobcompleted"
  requestMetadata: {
   callerIp:  "10.5.0.4"
   callerNetwork:  "//compute.googleapis.com/projects/perimeter-network/global/networks/__unknown__"
   callerSuppliedUserAgent:  "google-api-python-client/1.6.5 (gzip),gzip(gfe)"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/corp-resources-private/jobs/bqjob_r47ee34109d02b41_000001676b27157c_1"
  serviceData: {
   @type:  "type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData"
   jobCompletedEvent: {
    eventName:  "extract_job_completed"
    job: {
     jobConfiguration: {
      extract: {
       destinationUris: [
        0:  "gs://corp-resources-public-1/export.txt"
       ]
       sourceTable: {
        datasetId:  "babynames"
        projectId:  "corp-resources-private"
        tableId:  "yob2000"
       }
      }
     }
     jobName: {
      jobId:  "bqjob_r47ee34109d02b41_000001676b27157c_1"
      location:  "US"
      projectId:  "corp-resources-private"
     }
     jobStatistics: {
      createTime:  "2018-12-01T19:03:03.908Z"
      endTime:  "2018-12-01T19:03:05.494Z"
      startTime:  "2018-12-01T19:03:04.013Z"
     }
     jobStatus: {
      additionalErrors: [
       0: {
        code:  7
        message:  "Access Denied: BigQuery BigQuery: Permission denied while writing data."
       }
      ]
      error: {
       code:  7
       message:  "Access Denied: BigQuery BigQuery: Permission denied while writing data."
      }
      state:  "DONE"
     }
    }
   }
  }
  serviceName:  "bigquery.googleapis.com"
  status: {
   code:  7
   message:  "Access Denied: BigQuery BigQuery: Permission denied while writing data."
  }
 }
 receiveTimestamp:  "2018-12-01T19:03:05.532169998Z"
 resource: {
  labels: {
   project_id:  "corp-resources-private"
  }
  type:  "bigquery_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-12-01T19:03:05.503Z"
}

Dalam data log audit ini, storage-accessing@example.iam.gserviceaccount.com diidentifikasi sebagai identitas yang mencoba menjalankan operasi. Dalam contoh ini, asumsikan bahwa storage-accessing@example.iam.gserviceaccount.com memiliki izin IAM yang diperlukan untuk menjalankan perintah.

Karena izin IAM bukan masalah, langkah berikutnya adalah memeriksa kegagalan Kontrol Layanan VPC.

Data log audit untuk layanan tujuan (Cloud Storage) berisi alasan mendetail kegagalan:

{
 insertId:  "1bq397kcfj1"
 logName:  "projects/corp-resources-private/logs/cloudaudit.googleapis.com%2Fpolicy"
 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail:  "storage-accessing@example.iam.gserviceaccount.com"
  }
  metadata: {
   @type:  "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
   resourceNames: [
    0:  "projects/1004338142803"
    1:  "projects/_/buckets/corp-resources-public-1"
   ]
   violationReason:  "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
  }
  methodName:  "google.storage.BillingRequiredRead"
  requestMetadata: {
   callerIp:  "10.5.0.4"
   callerNetwork:  "//compute.googleapis.com/projects/perimeter-network/global/networks/__unknown__"
   destinationAttributes: {
   }
   requestAttributes: {
   }
  }
  resourceName:  "projects/1004338142803"
  serviceName:  "storage.googleapis.com"
  status: {
   code:  7
   details: [
    0: {
     @type:  "type.googleapis.com/google.rpc.PreconditionFailure"
     violations: [
      0: {
       type:  "VPC_SERVICE_CONTROLS"
      }
     ]
    }
   ]
   message:  "Request is prohibited by organization's policy"
  }
 }
 receiveTimestamp:  "2018-12-01T19:03:05.617451586Z"
 resource: {
  labels: {
   method:  "google.storage.BillingRequiredRead"
   project_id:  "corp-resources-private"
   service:  "storage.googleapis.com"
  }
  type:  "audited_resource"
 }
 severity:  "ERROR"
 timestamp:  "2018-12-01T19:03:05.420005215Z"
}

Dari log ini, jelas bahwa dua project 1004338142803 (corp-resources-private-1) dan corp-resources-public digunakan untuk menyelesaikan perintah. Karena project tersebut tidak berbagi perimeter, tugas ekstrak akan gagal.

Contoh ini menggambarkan bahwa dalam operasi multi-layanan yang kompleks, log audit untuk layanan sumber dan tujuan mungkin berisi data proses debug yang berguna.

Langkah selanjutnya