Memecahkan masalah Login OS


Dokumen ini menjelaskan cara memecahkan masalah Login OS menggunakan server metadata. Untuk informasi tentang cara menyiapkan Login OS atau untuk mendapatkan petunjuk langkah demi langkah, lihat Menyiapkan Login OS.

Anda dapat membuat kueri server metadata dari dalam instance virtual machine (VM). Untuk mengetahui informasi selengkapnya, baca Menyimpan dan mengambil metadata instance.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Pesan error umum

Berikut adalah contoh error umum yang mungkin Anda alami saat menggunakan Login OS.

Tidak dapat menemukan nama untuk grup

Pada beberapa VM yang menggunakan Login OS, Anda mungkin menerima pesan error berikut setelah koneksi dibuat:

/usr/bin/id: cannot find name for group ID 123456789

Abaikan pesan error ini. Error ini tidak memengaruhi VM Anda.

Gagal mendapatkan grup

Anda mungkin melihat log yang mirip dengan yang berikut ini saat membuat VM:

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

Log ini menunjukkan bahwa organisasi Anda belum mengonfigurasi grup Linux Login OS. Abaikan pesan ini.

Prasyarat yang gagal

Anda mungkin melihat error yang mirip dengan berikut ini saat terhubung ke VM menggunakan SSH:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

Error ini terjadi saat Login OS mencoba membuat nama pengguna yang sudah ada di dalam organisasi. Hal ini biasa terjadi ketika akun pengguna dihapus dan pengguna baru dengan alamat email yang sama dibuat tidak lama setelahnya. Setelah akun pengguna dihapus, diperlukan waktu hingga 48 jam untuk menghapus informasi POSIX pengguna.

Untuk menyelesaikan masalah ini, lakukan salah satu tindakan berikut:

Argumen tidak valid

Anda mungkin melihat error yang mirip dengan berikut ini saat terhubung ke VM menggunakan SSH atau menggunakan SCP untuk mentransfer file:

ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

Untuk mengatasi error ini, lakukan tindakan berikut:

  1. Lihat profil Login OS Anda dengan menjalankan perintah gcloud compute os-login describe-profile:

    gcloud compute os-login describe-profile
    

    Outputnya terlihat mirip dengan yang berikut ini:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Tinjau output untuk mengidentifikasi kunci SSH yang tidak digunakan.

  3. Hapus kunci yang tidak digunakan dari output menggunakan perintah gcloud compute os-login ssh-keys remove:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Ganti KEY dengan sidik jari kunci atau string kunci.

Untuk mencegah masalah ini terjadi di masa mendatang, tambahkan waktu habis masa berlaku untuk kunci SSH. Kunci yang sudah tidak berlaku akan otomatis dihapus dari profil login Anda 48 jam setelah masa berlakunya habis, atau saat Anda menambahkan kunci baru ke profil Anda.

Kode respons HTTP: 503

Anda mungkin melihat error berikut saat mencoba terhubung ke VM menggunakan SSH:

Failed to validate organization user USERNAME has login permission, got HTTP response code: 503

Masalah ini disebabkan oleh batas kapasitas server metadata sebesar 100 kueri per detik per instance virtual machine. Batas ini tidak dapat disesuaikan. Untuk mengatasi masalah ini, tunggu beberapa detik, lalu coba hubungkan lagi.

Untuk mencegah masalah ini di masa mendatang, coba langkah berikut:

  • Terapkan mekanisme percobaan ulang dalam kode aplikasi. Untuk informasi selengkapnya, lihat:
  • Menggunakan kembali koneksi SSH yang ada.
  • Kirim perintah secara massal untuk mengurangi koneksi SSH dan kueri metadata Login OS.

Entri metadata Login OS default

Compute Engine menentukan kumpulan entri metadata default yang menyajikan informasi Login OS. Metadata default selalu ditentukan dan disetel oleh server. Kunci metadata default peka huruf besar/kecil.

Tabel berikut menjelaskan entri yang dapat Anda kueri.

Relatif terhadap http://metadata.google.internal/computeMetadata/v1/
Entri metadata Deskripsi
project/attributes/enable-oslogin Memeriksa apakah Login OS diaktifkan pada project Google Cloud saat ini.
instance/attributes/enable-oslogin Memeriksa apakah Login OS diaktifkan pada VM saat ini.
oslogin/users/ Mengambil informasi profil untuk pengguna Login OS. Anda dapat meneruskan parameter kueri seperti username, uid, pagesize, dan pagetoken.
oslogin/authorize/

Mengambil setelan izin level login atau administratif untuk pengguna Login OS.

Untuk memeriksa izin, Anda harus menentukan parameter kueri policy. Nilai parameter kebijakan harus ditetapkan ke login (untuk memeriksa izin login) atau adminLogin (untuk memeriksa akses sudo).

Memeriksa apakah Login OS dikonfigurasi

Gunakan konsol Google Cloud atau Google Cloud CLI untuk membuat kueri metadata guna menentukan apakah Login OS diaktifkan atau tidak. Login OS diaktifkan jika kunci metadata enable-oslogin ditetapkan ke TRUE dalam metadata project atau instance. Jika instance dan metadata project ditetapkan, nilai yang ditetapkan dalam metadata instance akan lebih diutamakan.

Melihat pengguna Login OS

Untuk melihat informasi profil beberapa pengguna, Anda harus menentukan parameter pagesize dan pagetoken. Ganti pagesize dan pagetoken dengan nilai numerik yang diperlukan.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

Misalnya, untuk menetapkan pagesize menjadi 1 dan pagetoken menjadi 0, jalankan perintah berikut:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

Di sebagian besar distribusi, Anda juga dapat menjalankan perintah Unix getent passwd untuk mengambil entri sandi bagi pengguna organisasi.

Melihat pengguna Login OS tertentu

Untuk melihat informasi profil bagi pengguna tertentu di VM Anda, jalankan perintah berikut:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

Ganti USERNAME dengan nama pengguna yang ingin Anda kueri.

Misalnya, Anda dapat melakukan permintaan untuk mencari user_example_com pengguna. Perintah dan output berikut menunjukkan pemformatan tambahan agar lebih mudah dibaca.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

Outputnya mirip dengan yang berikut ini:

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

Di sebagian besar distribusi, Anda juga dapat menjalankan perintah Unix seperti getent passwd username atau getent passwd uid untuk mengambil informasi profil.

Untuk mengambil kunci SSH bagi pengguna, Anda juga dapat menjalankan /usr/bin/google_authorized_keys USERNAME. Jika tidak ada kunci yang ditampilkan, pengguna mungkin tidak memiliki izin yang diperlukan untuk login ke VM.

Memeriksa izin login

Untuk melihat izin level login dan administratif, Anda harus memberikan parameter kueri policy=login&email=LOGIN_NAME.

  1. Buat kueri profil pengguna untuk mendapatkan nilai kolom name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. Dalam output, catat name.

  3. Jalankan perintah login berikut menggunakan nilai name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

Misalnya, Anda dapat membuat kueri izin login untuk user_example_com pengguna yang dilihat di bagian sebelumnya:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

Output perintah menunjukkan bahwa pengguna diberi otorisasi untuk login ke VM:

{"success":true}

Memeriksa apakah VM Anda memiliki akun layanan atau tidak

Anda dapat membuat kueri server metadata untuk menemukan akun layanan yang terkait dengan VM Anda. Di VM Anda, jalankan perintah berikut:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

Outputnya mirip dengan yang berikut ini:

12345-sa@developer.gserviceaccount.com/
default/

Jika tidak ada akun layanan yang ditemukan, outputnya akan kosong.

Men-debug masalah Login OS dengan gcpdiag

gcpdiag adalah alat open source. Ini bukan produk Google Cloud yang didukung secara resmi. Anda dapat menggunakan alat gcpdiag untuk membantu mengidentifikasi dan memperbaiki masalah project Google Cloud. Untuk mengetahui informasi selengkapnya, lihat project gcpdiag di GitHub.

Runbook gcpdiag ini menyelidiki potensi penyebab masalah akses SSH di VM Windows dan Linux di Google Cloud. Laporan ini berfokus pada:
  • Status VM: Memeriksa apakah VM berjalan dan memiliki resource yang memadai (CPU, memori, disk).
  • Izin: Memastikan Anda memiliki izin IAM yang tepat untuk mengonfigurasi kunci SSH.
  • Setelan VM: Memverifikasi bahwa kunci SSH dan metadata lainnya dikonfigurasi dengan benar.
  • Aturan Jaringan: Meninjau aturan firewall untuk mengonfirmasi bahwa traffic SSH diizinkan.
  • OS Tamu: Mencari masalah OS internal yang mungkin memblokir SSH.

Konsol Google Cloud

  1. Selesaikan, lalu salin perintah berikut.
  2. gcpdiag runbook gce/ssh \
        --parameter project_id=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED \
        --parameter local_user=LOCAL_USER \
        --parameter check_os_login=CHECK_OS_LOGIN \
        --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
  3. Buka konsol Google Cloud dan aktifkan Cloud Shell.
  4. Buka Cloud Console
  5. Tempel perintah yang disalin.
  6. Jalankan perintah gcpdiag, yang mendownload image docker gcpdiag, lalu melakukan pemeriksaan diagnostik. Jika berlaku, ikuti petunjuk output untuk memperbaiki pemeriksaan yang gagal.

Docker

Anda dapat menjalankan gcpdiag menggunakan wrapper yang memulai gcpdiag dalam penampung Docker. Docker atau Podman harus diinstal.

  1. Salin dan jalankan perintah berikut di workstation lokal Anda.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Jalankan perintah gcpdiag.
    ./gcpdiag runbook gce/ssh \
        --parameter project_id=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED \
        --parameter local_user=LOCAL_USER \
        --parameter check_os_login=CHECK_OS_LOGIN \
        --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER

Lihat parameter yang tersedia untuk runbook ini.

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi resource
  • VM_NAME: Nama VM target dalam project Anda.
  • ZONE: Zona tempat VM target Anda berada.
  • PRINCIPAL: Akun utama pengguna atau akun layanan yang memulai koneksi SSH. Untuk autentikasi berbasis kunci, gunakan pengguna yang diautentikasi oleh alat command line Cloud Shell atau login ke konsol Google Cloud. Untuk peniruan akun layanan, email tersebut harus berupa email akun layanan.
  • IAP_ENABLED: Nilai boolean (true atau false) yang menunjukkan apakah Identity-Aware Proxy digunakan untuk membuat koneksi SSH. Default: true
  • LOCAL_USER:Pengguna Posix di VM.
  • CHECK_OS_LOGIN: Nilai boolean (true atau false) yang menunjukkan apakah Login OS harus digunakan untuk autentikasi SSH.
  • CHECK_SSH_IN_BROWSER:Nilai boolean untuk memeriksa apakah SSH di Browser dapat dilakukan.

Flag yang berguna:

Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag, lihat petunjuk penggunaan gcpdiag.

Langkah selanjutnya