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 Compute Engine. Untuk mengetahui informasi selengkapnya, baca Menyimpan dan mengambil metadata instance.
Sebelum memulai
-
Siapkan autentikasi jika Anda belum melakukannya.
Autentikasi memverifikasi identitas Anda untuk mengakses layanan Google Cloud dan API. Untuk menjalankan
kode atau sampel dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke
Compute Engine dengan memilih salah satu opsi berikut:
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan konsol Google Cloud untuk mengakses layanan Google Cloud dan API, Anda tidak perlu menyiapkan autentikasi.
gcloud
-
Instal Google Cloud CLI. Setelah penginstalan, inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:
gcloud initJika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
- Tetapkan region dan zona default.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Instal Google Cloud CLI.
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
Untuk mengetahui 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 instance komputasi 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 instance komputasi Anda.
Gagal mendapatkan grup
Anda mungkin melihat log yang mirip dengan yang berikut ini saat membuat instance komputasi:
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 instance compute 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:
- Pulihkan akun yang dihapus.
- Hapus informasi POSIX akun sebelum menghapus akun.
Batas ukuran profil Login OS terlampaui
Anda mungkin melihat salah satu error berikut saat terhubung ke instance komputasi Linux menggunakan SSH atau menggunakan SCP untuk mentransfer file:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: 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:
Periksa ukuran profil Login OS Anda. Untuk memeriksa ukuran profil Anda, ekspor profil Anda ke file JSON sementara dan periksa ukuran file dengan menjalankan perintah berikut:
gcloud compute os-login describe-profile --format="json" | wc
Jika ukurannya mendekati atau melebihi 32 KiB, Anda harus menghapus kunci SSH yang tidak digunakan.
Tinjau profil Login OS Anda untuk mengidentifikasi kunci SSH yang tidak digunakan:
gcloud compute os-login describe-profile
Outputnya mirip dengan hal berikut ini:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...Hapus semua kunci yang tidak digunakan menggunakan perintah
gcloud compute os-login ssh-keys remove:gcloud compute os-login ssh-keys remove --key=KEY
Ganti
KEYdengan sidik jari kunci atau string kunci publik SSH lengkap.
Untuk mencegah masalah ini terjadi pada 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 berakhir, atau saat Anda menambahkan kunci baru ke profil Anda.
Kode respons HTTP: 429
Anda mungkin melihat error berikut saat mencoba terhubung ke instance compute menggunakan SSH:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 429
Masalah ini disebabkan oleh batas frekuensi server metadata sebesar 100 kueri per detik per instance compute. Batas ini tidak dapat disesuaikan. Untuk mengatasi masalah ini, tunggu beberapa detik, lalu coba hubungkan kembali.
Untuk mencegah masalah ini di masa mendatang, coba langkah-langkah berikut:
- Menerapkan mekanisme percobaan ulang dalam kode aplikasi. Untuk mengetahui informasi selengkapnya, lihat:
- Menggunakan kembali koneksi SSH yang ada.
- Kirim perintah dalam 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 instance komputasi 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 |
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 dapat menentukan
parameter pagesize. Ganti pagesize dengan
nilai numerik yang diperlukan.
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE" -H "Metadata-Flavor: Google"
Output mungkin berisi token halaman, yang dapat digunakan dalam panggilan berikutnya untuk mencantumkan lebih banyak pengguna.
Misalnya, untuk menetapkan pagesize menjadi 1, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1" -H "Metadata-Flavor: Google"
Untuk mendapatkan pengguna berikutnya, tetapkan pagesize ke 1 dan pagetoken ke token halaman dari output perintah sebelumnya.
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=PAGE_TOKEN" -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 instance komputasi 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 instance komputasi.
Memeriksa izin login
Untuk melihat izin level login dan administratif, Anda harus memberikan
parameter kueri policy=login&email=LOGIN_NAME.
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"
Dalam output, catat
name.Jalankan perintah
loginberikut menggunakan nilainame: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 instance komputasi:
{"success":true}Memeriksa apakah instance komputasi Anda memiliki akun layanan
Anda dapat membuat kueri server metadata untuk menemukan akun layanan yang terkait dengan instance komputasi Anda. Login ke instance komputasi Anda dan 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 berikutnya
- Pelajari Login OS lebih lanjut.
- Pelajari cara kerja koneksi SSH ke instance Linux di Compute Engine.
- Untuk petunjuk langkah demi langkah, tinjau salah satu hal berikut:
- Tinjau Mengelola Login OS dalam organisasi