Pemecahan masalah

Halaman ini berisi penjelasan seputar metode pemecahan masalah terkait error umum yang mungkin Anda alami saat menggunakan Cloud Storage.

Lihat Dasbor Google Cloud Service Health untuk mendapatkan informasi tentang insiden yang memengaruhi layanan Google Cloud seperti Cloud Storage.

Logging permintaan mentah

Saat menggunakan alat seperti gcloud atau library klien Cloud Storage, sebagian besar informasi permintaan dan respons ditangani oleh alat tersebut. Namun, terkadang ada baiknya melihat detail untuk membantu pemecahan masalah atau saat memposting pertanyaan ke forum seperti Stack Overflow. Gunakan petunjuk berikut untuk menampilkan header permintaan dan respons di alat Anda:

Konsol

Tampilan informasi permintaan dan respons bergantung pada browser yang Anda gunakan untuk mengakses Konsol Google Cloud. Untuk browser Google Chrome:

  1. Klik tombol menu utama Chrome ().

  2. Pilih Alat Lainnya.

  3. Klik Alat Developer.

  4. Klik tab Jaringan di panel yang muncul.

Command line

Gunakan flag proses debug global dalam permintaan Anda. Contoh:

gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug

Library klien

C++

  • Tetapkan variabel lingkungan CLOUD_STORAGE_ENABLE_TRACING=http untuk mendapatkan traffic HTTP lengkap.

  • Tetapkan variabel lingkungan CLOUD_STORAGE_ENABLE_CLOG=yes untuk mendapatkan logging dari setiap RPC.

C#

Tambahkan logger melalui ApplicationContext.RegisterLogger, dan tetapkan opsi logging di pengendali pesan HttpClient. Untuk mengetahui informasi selengkapnya, lihat halaman entri FAQ:

Go

Tetapkan variabel lingkungan GODEBUG=http2debug=1. Untuk mengetahui informasi selengkapnya, lihat halaman Go package net/http.

Jika Anda ingin mencatat log isi permintaan, gunakan klien HTTP kustom.

Java

  1. Buat file bernama "logging.properties" menggunakan konten berikut:

    # Properties file which configures the operation of the JDK logging facility.
    # The system will look for this config file to be specified as a system property:
    # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties
    
    # Set up the console handler (uncomment "level" to show more fine-grained messages)
    handlers = java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = CONFIG
    
    # Set up logging of HTTP requests and responses (uncomment "level" to show)
    com.google.api.client.http.level = CONFIG
  2. Gunakan logging.properties dengan Maven

    mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command

Untuk mengetahui informasi selengkapnya, lihat Pluggable HTTP Transport.

Node.js

Tetapkan variabel lingkungan NODE_DEBUG=https sebelum memanggil skrip Node.

PHP

Berikan pengendali HTTP Anda ke klien menggunakan httpHandler dan siapkan middleware untuk mencatat log permintaan dan respons.

Python

Gunakan modul logging. Contoh:

import logging
import http.client

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel=5

Ruby

Di bagian atas .rb file setelah require "google/cloud/storage", tambahkan kode berikut:

ruby
Google::Apis.logger.level = Logger::DEBUG

Menambahkan header kustom

Penambahan header kustom ke permintaan adalah alat yang umum digunakan untuk tujuan proses debug, seperti untuk mengaktifkan header debug atau melacak permintaan. Contoh berikut menunjukkan cara menetapkan header permintaan untuk berbagai alat Cloud Storage:

Command line

Gunakan flag --additional-headers, yang tersedia untuk sebagian besar perintah. Contoh:

gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE

Dengan HEADER_NAME dan HEADER_VALUE adalah header yang Anda tambahkan ke permintaan.

Library klien

C++

namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));

C#

Contoh berikut akan menambahkan header kustom ke setiap permintaan yang dibuat oleh library klien.

using Google.Cloud.Storage.V1;

var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");

var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)

{
  Console.WriteLine(bucket.Name);
}

Go

Untuk menambahkan header kustom ke permintaan yang dibuat oleh library klien Go, diperlukan penggabungan transpor yang digunakan untuk klien dengan RoundTripper kustom. Contoh berikut akan mengirimkan header debug dan mencatat log header respons yang sesuai:

package main

import (
  "context"
  "io/ioutil"
  "log"
  "net/http"

  "cloud.google.com/go/storage"
  "google.golang.org/api/option"
  raw "google.golang.org/api/storage/v1"
  htransport "google.golang.org/api/transport/http"
)

func main() {

  ctx := context.Background()

  // Standard way to initialize client:
  // client, err := storage.NewClient(ctx)
  // if err != nil {
  //      // handle error
  // }

  // Instead, create a custom http.Client.
  base := http.DefaultTransport
  trans, err := htransport.NewTransport(ctx, base, option.WithScopes(raw.DevstorageFullControlScope),
            option.WithUserAgent("custom-user-agent"))
  if err != nil {
            // Handle error.
  }
  c := http.Client{Transport:trans}

  // Add RoundTripper to the created HTTP client.
  c.Transport = withDebugHeader{c.Transport}

  // Supply this client to storage.NewClient
  client, err := storage.NewClient(ctx, option.WithHTTPClient(&c))
  if err != nil {
              // Handle error.
  }

  // Use client to make a request
 }

type withDebugHeader struct {
  rt http.RoundTripper
}

func (wdh withDebugHeader) RoundTrip(r *http.Request) (*http.Response, error) {
  headerName := "X-Custom-Header"
  r.Header.Add(headerName, "value")
  resp, err := wdh.rt.RoundTrip(r)
  if err == nil {
    log.Printf("Resp Header: %+v, ", resp.Header.Get(headerName))
  } else {
    log.Printf("Error: %+v", err)
  }
  return resp, err
}

Java

import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;

public class Example {

  public void main(String args[]) throws IOException {
    HeaderProvider headerProvider =
            FixedHeaderProvider.create("custom-header", "custom-value");
    Storage storage = StorageOptions.getDefaultInstance()
            .toBuilder()
            .setHeaderProvider(headerProvider)
            .build().getService();
    String bucketName = "example-bucket";
    String blobName = "test-custom-header";

    // Use client with custom header
    BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
    byte[] stringBytes;
    try (WriteChannel writer = storage.writer(blob)) {
      stringBytes = "hello world".getBytes(UTF_8);
      writer.write(ByteBuffer.wrap(stringBytes));
    }
  }
}

Node.js

const storage = new Storage();

storage.interceptors.push({
  request: requestConfig => {
    Object.assign(requestConfig.headers, {
      'X-Custom-Header': 'value',
      });
    return requestConfig;
  },
});

PHP

Semua panggilan metode yang memicu permintaan http menerima argumen $restOptions opsional sebagai argumen terakhir. Anda dapat memberikan header kustom ke setiap permintaan atau setiap klien.

use Google\Cloud\Storage\StorageClient;

$client = new StorageClient([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bat'
       ]
   ]
]);

$bucket = $client->bucket('my-bucket');

$bucket->info([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bar'
       ]
   ]
]);

Python

from google.cloud import storage

client = storage.Client(
    extra_headers={
        "x-custom-header": "value"
    }
)

Ruby

require "google/cloud/storage"

storage = Google::Cloud::Storage.new

storage.add_custom_headers { 'X-Custom-Header'=> 'value' }

Mengakses bucket dengan konfigurasi CORS

Jika Anda telah menetapkan konfigurasi CORS di bucket dan melihat bahwa permintaan masuk dari browser klien gagal, coba langkah-langkah pemecahan masalah berikut:

  1. Tinjau konfigurasi CORS pada bucket target. Jika ada beberapa entri konfigurasi CORS, pastikan nilai permintaan yang Anda gunakan untuk memecahkan masalah dipetakan ke nilai dalam satu entri konfigurasi CORS.

  2. Saat menguji penerbitan permintaan CORS, pastikan Anda tidak membuat permintaan ke endpoint storage.cloud.google.com, yang tidak mengizinkan permintaan CORS. Untuk mengetahui informasi selengkapnya tentang endpoint yang didukung untuk CORS, lihat Dukungan CORS Cloud Storage.

  3. Tinjau permintaan dan respons menggunakan alat pilihan Anda. Di browser Chrome, Anda dapat menggunakan alat developer standar untuk melihat informasi ini:

    1. Klik menu Chrome () di toolbar browser.
    2. Pilih Alat Lainnya > Alat Developer.
    3. Klik tab Jaringan.
    4. Dari aplikasi atau command line, kirim permintaan tersebut.
    5. Di panel yang menampilkan aktivitas jaringan, cari permintaan tersebut.
    6. Di kolom Name, klik nama yang sesuai dengan permintaan.
    7. Klik tab Header untuk melihat header respons, atau tab Response untuk melihat isi respons.

    Jika Anda tidak melihat permintaan dan respons, mungkin browser telah meng-cache upaya permintaan preflight yang gagal sebelumnya. Menghapus cache browser juga akan menghapus cache preflight. Jika tidak, tetapkan nilai MaxAgeSec dalam konfigurasi CORS Anda ke nilai yang lebih rendah dari nilai default 1800 (30 menit), tunggu selama durasi MaxAgeSec lama, lalu coba ulangi permintaan tersebut. Tindakan ini akan melakukan permintaan preflight baru, yang mengambil konfigurasi CORS baru dan menghapus permanen entri cache. Setelah men-debug masalah, naikkan MaxAgeSec kembali ke nilai yang lebih tinggi untuk mengurangi traffic preflight ke bucket Anda.

  4. Pastikan permintaan memiliki header Origin dan nilai header-nya cocok setidaknya dengan salah satu nilai Origins dalam konfigurasi CORS bucket. Perhatikan bahwa skema, host, dan port nilai harus sama persis. Beberapa contoh kecocokan yang dapat diterima adalah sebagai berikut:

    • http://origin.example.com cocok dengan http://origin.example.com:80 (karena 80 adalah port HTTP default), tetapi tidak cocok dengan https://origin.example.com, http://origin.example.com:8080, http://origin.example.com:5151, atau http://sub.origin.example.com.

    • https://example.com:443 cocok dengan https://example.com, tetapi tidak cocok dengan http://example.com atau http://example.com:443.

    • http://localhost:8080 hanya cocok persis dengan http://localhost:8080 dan tidak cocok dengan http://localhost:5555 atau http://localhost.example.com:8080.

  5. Untuk permintaan sederhana, pastikan metode HTTP permintaan cocok dengan setidaknya salah satu nilai Methods dalam konfigurasi CORS bucket. Untuk permintaan preflight, pastikan metode yang ditentukan dalam Access-Control-Request-Method cocok dengan setidaknya salah satu nilai Methods.

  6. Untuk permintaan preflight, periksa apakah permintaan menyertakan satu atau beberapa header Access-Control-Request-Header. Jika demikian, pastikan setiap nilai Access-Control-Request-Header cocok dengan nilai ResponseHeader dalam konfigurasi CORS bucket. Semua header yang disebutkan dalam Access-Control-Request-Header harus ada dalam konfigurasi CORS agar permintaan preflight berhasil dan menyertakan header CORS dalam respons.

Kode error

Berikut adalah kode status HTTP umum yang mungkin Anda temui.

400: Bad Request

Masalah: Saat melakukan upload yang dapat dilanjutkan, saya mendapatkan error ini dan pesan Failed to parse Content-Range header.

Solusi: Nilai yang Anda gunakan dalam header Content-Range tidak valid. Sebagai contoh, Content-Range: */* tidak valid dan harus ditetapkan sebagai Content-Range: bytes */*. Jika error ini muncul, artinya proses upload yang dapat dilanjutkan saat ini tidak aktif lagi, dan Anda harus memulai proses upload baru yang dapat dilanjutkan.

401: Unauthorized

Masalah: Permintaan langsung ke bucket publik, atau menggunakan Cloud CDN, gagal dengan respons HTTP 401: Unauthorized dan Authentication Required.

Solusi: Pastikan klien Anda, atau proxy perantara apa pun, tidak menambahkan header Authorization ke permintaan ke Cloud Storage. Setiap permintaan dengan header Authorization, meskipun kosong, akan divalidasi seolah-olah permintaan tersebut merupakan upaya autentikasi.

403: Account Disabled

Masalah: Saya mencoba membuat bucket, tetapi malah mendapatkan error 403 Account Disabled.

Solusi: Error ini menunjukkan bahwa Anda belum mengaktifkan penagihan untuk project terkait. Untuk mengetahui langkah-langkah mengaktifkan penagihan, lihat Mengaktifkan penagihan untuk project.

Jika penagihan diaktifkan dan pesan error ini terus muncul, Anda dapat menghubungi dukungan dengan memberikan project ID dan deskripsi masalah ini.

403: Forbidden

Masalah: Saya seharusnya memiliki izin untuk mengakses bucket atau objek tertentu, tetapi saat mencobanya, saya malah mendapatkan error 403 - Forbidden dengan pesan yang mirip dengan: example@email.com does not have storage.objects.get access to the Google Cloud Storage object.

Solusi: Anda tidak memiliki izin IAM pada bucket atau objek yang diperlukan untuk menyelesaikan permintaan. Jika tidak dapat membuat permintaan sesuai ekspektasi Anda, lakukan pemeriksaan berikut:

  1. Apakah penerima akses yang disebutkan dalam pesan error sudah sesuai dengan ekspektasi Anda? Jika pesan error merujuk ke alamat email yang tidak terduga atau pada "Pemanggil anonim", artinya permintaan Anda tidak menggunakan kredensial seperti yang diinginkan. Hal ini dapat terjadi karena alat yang digunakan untuk membuat permintaan dibuat dengan kredensial dari alias atau entity lain. Alasan lain adalah karena permintaan dibuat atas nama Anda oleh akun layanan.

  2. Apakah izin yang disebutkan dalam pesan error sesuai dengan yang Anda perlukan? Jika izinnya ternyata tidak sesuai ekspektasi, kemungkinan besar karena alat yang digunakan memerlukan akses tambahan untuk menyelesaikan permintaan Anda. Misalnya, untuk menghapus objek dalam bucket secara massal, gcloud harus terlebih dahulu membuat daftar objek di bucket yang ingin dihapus. Bagian penghapusan massal ini memerlukan izin storage.objects.list, yang mungkin mengejutkan, mengingat sasarannya adalah penghapusan objek, yang biasanya hanya memerlukan izin storage.objects.delete. Jika pesan error muncul karena masalah ini, pastikan Anda telah diberi peran IAM yang memiliki izin tambahan yang diperlukan.

  3. Apakah Anda diberi peran IAM tersebut di resource yang dimaksud atau di resource induk? Sebagai contoh, jika Anda diberi peran Storage Object Viewer untuk suatu project lalu Anda mencoba mendownload objek, pastikan objek berada dalam bucket yang ada di project tersebut. Anda mungkin tidak sengaja memiliki izin Storage Object Viewer untuk project yang berbeda.

  4. Apakah izin Anda untuk mengakses bucket atau objek tertentu diberikan melalui nilai kemudahan? Penghapusan akses yang diberikan ke nilai kemudahan dapat menyebabkan akun utama yang sebelumnya diaktifkan kehilangan akses ke resource.

    Misalnya, jane@example.com memiliki peran dasar Pemilik (roles/owner) untuk project bernama my-example-project, dan kebijakan IAM project tersebut memberikan peran Storage Object Creator (roles/storage.objectCreator) ke nilai kemudahan projectOwner:my-example-project. Artinya, jane@example.com memiliki izin yang terkait dengan peran Storage Object Creator untuk bucket dalam my-example-project. Jika pemberian ini dihapus, jane@example.com akan kehilangan izin yang terkait dengan peran Storage Object Creator.

    Dalam skenario seperti itu, Anda dapat mendapatkan kembali akses ke bucket atau objek dengan memberikan izin level bucket atau level objek yang diperlukan untuk melakukan tindakan yang Anda perlukan.

  5. Apakah ada kebijakan Tolak IAM yang mencegah Anda menggunakan izin tertentu? Anda dapat menghubungi administrator organisasi untuk mengetahui apakah kebijakan IAM Deny telah diterapkan.

409: Conflict

Masalah: Saya mencoba membuat bucket, tetapi malah mendapatkan error berikut:

409 Conflict. Sorry, that name is not available. Please try a different one.

Solusi: Nama bucket yang Anda coba buat (misalnya, gs://cats atau gs://dogs) sudah digunakan. Cloud Storage memiliki namespace global sehingga Anda tidak dapat memberi bucket dengan nama yang sama seperti bucket yang ada. Pilih nama yang tidak digunakan.

412: Batasan kustom dilanggar

Masalah: Permintaan saya ditolak dengan error 412 orgpolicy.

Masalah: Permintaan saya ditolak dengan error 412 Multiple constraints were violated.

Solusi: Hubungi tim administrator keamanan Anda untuk mengetahui apakah bucket yang Anda gunakan untuk mengirim permintaan terpengaruh oleh kebijakan organisasi yang menggunakan batasan kustom. Bucket Anda mungkin juga terpengaruh oleh kebijakan organisasi yang berbeda-beda dan saling bertentangan. Misalnya, jika satu kebijakan menentukan bahwa bucket harus memiliki class penyimpanan Standard dan kebijakan lain menentukan bahwa bucket harus memiliki class penyimpanan Coldline.

429: Too Many Requests

Masalah: Permintaan saya ditolak dengan error 429 Too Many Requests.

Solusi: Anda mencapai batas jumlah permintaan Cloud Storage yang diperbolehkan untuk resource tertentu. Lihat Kuota Cloud Storage untuk membaca penjelasan mengenai batasan di Cloud Storage.

  • Jika beban kerja Anda terdiri dari 1.000 permintaan per detik ke bucket, lihat Pedoman rasio permintaan dan distribusi akses untuk membaca penjelasan mengenai praktik terbaik, termasuk cara meningkatkan beban kerja secara bertahap dan menghindari nama file berurutan.

  • Jika beban kerja Anda berpotensi menggunakan traffic keluar jaringan sebesar 50 Gbps atau lebih ke lokasi tertentu, periksa penggunaan bandwidth Anda untuk memastikan Anda tidak mengalami kuota bandwidth.

Mendiagnosis error Konsol Google Cloud

Masalah: Saya mendapatkan pesan error generik saat menggunakan Konsol Google Cloud untuk melakukan suatu operasi. Contohnya, saya melihat pesan error saat mencoba menghapus bucket, tetapi tidak ada detail informasi terkait alasan operasi itu gagal.

Solusi: Gunakan notifikasi Konsol Google Cloud untuk melihat informasi mendetail tentang operasi yang gagal tersebut.

  1. Klik tombol Notifications () di header Konsol Google Cloud.

    Dropdown akan menampilkan operasi terbaru yang dilakukan oleh konsol Google Cloud.

  2. Klik item yang ingin Anda lihat detailnya lebih lanjut.

    Halaman yang menampilkan detail informasi tentang operasi akan terbuka.

  3. Klik setiap baris untuk memperluas detail informasi error.

Masalah: Saat menggunakan Konsol Google Cloud, saya tidak melihat kolom tertentu ditampilkan.

Solusi: Untuk melihat kolom tertentu yang ditampilkan di konsol Google Cloud, klik ikon Column display options (), lalu pilih kolom yang ingin ditampilkan.

Folder simulasi dan folder terkelola

Masalah: Saya menghapus beberapa objek di bucket, dan sekarang folder tempat objek tersebut disimpan tidak muncul di Konsol Google Cloud.

Solusi: Meskipun Konsol Google Cloud menampilkan konten bucket Anda seolah-olah ada struktur direktori, folder sebenarnya tidak benar-benar ada di Cloud Storage. Karena itu, saat Anda menghapus semua objek dengan awalan umum dari bucket, ikon folder yang merepresentasikan grup objek tersebut tidak muncul kembali di Konsol Google Cloud.

Masalah: Saya tidak dapat membuat folder terkelola.

Solusi: Untuk membuat folder terkelola, pastikan persyaratan berikut terpenuhi:

  • Anda memiliki peran IAM yang berisi izin storage.managedfolders.create, seperti peran Storage Object Admin (roles/storage.objectAdmin). Untuk mengetahui petunjuk tentang cara memberikan peran, lihat Menggunakan izin IAM.

  • Akses level bucket yang seragam diaktifkan di bucket tempat Anda ingin membuat folder terkelola.

  • Tidak ada IAM Conditions di bucket atau project yang menggunakan jenis resource bucket (storage.googleapis.com/Bucket) atau jenis resource objek (storage.googleapis.com/Object). Jika ada bucket dalam project yang memiliki IAM Conditions yang menggunakan salah satu jenis resource ini, folder terkelola tidak dapat dibuat di salah satu bucket dalam project tersebut, meskipun kondisi tersebut dihapus nanti.

Masalah: Saya tidak dapat menonaktifkan akses level bucket yang seragam karena ada folder yang dikelola di bucket saya.

Solusi: Akses level bucket seragam tidak dapat dinonaktifkan jika ada folder terkelola di bucket. Untuk menonaktifkan akses level bucket yang seragam, Anda harus menghapus semua folder terkelola di bucket terlebih dahulu.

Latensi

Berikut adalah masalah latensi umum yang mungkin Anda temui. Selain itu, Dasbor Google Cloud Service Health memberikan informasi tentang insiden yang memengaruhi layanan Google Cloud seperti Cloud Storage.

Latensi upload atau download

Masalah: Saya melihat adanya peningkatan latensi saat mengupload atau mendownload.

Solusi: Pertimbangkan penyebab umum latensi upload dan download berikut:

  • Batasan CPU atau memori: Sistem operasi lingkungan yang terpengaruh harus memiliki alat yang dapat mengukur konsumsi resource lokal seperti penggunaan CPU dan memori.

  • Batasan IO disk: Dampak performa mungkin disebabkan oleh IO disk lokal.

Latensi library klien atau CLI

Masalah: Saya melihat adanya peningkatan latensi saat mengakses Cloud Storage dengan Google Cloud CLI atau salah satu library klien.

Solusi: CLI gcloud dan library klien secara otomatis mencoba lagi permintaan jika diperlukan, dan perilaku ini dapat secara efektif meningkatkan latensi seperti yang terlihat dari pengguna akhir. Gunakan metrik Cloud Monitoring storage.googleapis.com/api/request_count untuk melihat apakah Cloud Storage secara konsisten menyajikan kode respons yang dapat dicoba lagi, seperti 429 atau 5xx.

Server proxy

Masalah: Saya terhubung melalui server proxy. Apa yang harus saya lakukan?

Solusi: Untuk mengakses Cloud Storage melalui server proxy, Anda harus mengizinkan akses ke domain berikut:

  • accounts.google.com untuk membuat token autentikasi OAuth2
  • oauth2.googleapis.com untuk melakukan pertukaran token OAuth2
  • *.googleapis.com untuk permintaan penyimpanan

Jika server proxy atau kebijakan keamanan tidak mendukung daftar izin menurut domain, tetapi hanya mendukung daftar izin menurut pemblokiran jaringan IP, sebaiknya konfigurasikan server proxy untuk semua rentang alamat IP Google. Anda dapat menemukan rentang alamat dengan membuat kueri data WHOIS di ARIN. Sebagai praktik terbaik, Anda harus meninjau setelan proxy secara berkala untuk memastikan setelan tersebut cocok dengan alamat IP Google.

Sebaiknya jangan mengonfigurasi proxy dengan alamat IP individual yang Anda dapatkan dari pencarian satu kali oauth2.googleapis.com dan storage.googleapis.com. Karena layanan Google diekspos menggunakan nama DNS yang memetakan ke sejumlah besar alamat IP yang dapat berubah seiring waktu, mengonfigurasi proxy berdasarkan pencarian satu kali dapat menyebabkan kegagalan untuk terhubung ke Cloud Storage.

Jika permintaan dirutekan melalui server proxy, sebaiknya hubungi administrator jaringan untuk memastikan bahwa header Authorization yang berisi kredensial Anda tidak dihapus oleh proxy. Tanpa header Authorization, permintaan akan ditolak dan Anda akan mendapatkan error MissingSecurityHeader.

Langkah selanjutnya