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

  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai 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 serupa 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 serupa 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 hal 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 outputnya 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 lagi di masa mendatang, tambahkan waktu habis masa berlaku untuk kunci SSH. Kunci yang sudah tidak berlaku akan otomatis dihapus dari profil login Anda dalam waktu 48 jam setelah masa berlaku berakhir, atau saat Anda menambahkan kunci baru ke profil.

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 100 kueri per detik per instance virtual machine. Batas ini tidak dapat disesuaikan. Untuk mengatasi masalah ini, tunggu beberapa detik, lalu coba lagi koneksi.

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

  • Mengimplementasikan mekanisme percobaan ulang dalam kode aplikasi. Untuk mengetahui informasi selengkapnya, lihat:
  • Gunakan kembali koneksi SSH yang ada.
  • Kirim perintah dalam beberapa batch 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 hal 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 hal berikut ini:

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

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

Langkah selanjutnya