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 Google Cloud layanan dan API. Untuk menjalankan
kode atau contoh 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 Google Cloud konsol untuk mengakses Google Cloud layanan 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 Google Cloud dokumentasi autentikasi.
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 komputasi 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.
Login OS menyimpan informasi pengguna, termasuk kunci publik SSH, di akun POSIX yang memiliki batas ukuran 32 KiB per pengguna. Jika profil Login OS Anda melebihi batas ini, atau jika Anda memiliki lebih dari 64 kunci SSH di profil Anda, Anda tidak dapat menambahkan kunci SSH tambahan ke profil tersebut, yang akan mencegah Anda terhubung ke VM menggunakan SSH.
Untuk mengatasi error ini, lakukan hal 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 yang berikut ini:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...Hapus kunci yang tidak digunakan dengan menggunakan
gcloud compute os-login ssh-keys removeperintah:gcloud compute os-login ssh-keys remove --key=KEY
Ganti
KEYdengan sidik jari kunci atau string kunci publik SSH lengkap.
Atau, untuk menghindari pembuatan kunci baru saat terhubung ke VM, Anda dapat melakukan salah satu hal berikut:
Gunakan kembali pasangan kunci yang ada dengan menentukan flag
--ssh-key-filedengan perintahgcloud compute ssh:gcloud compute ssh VM_NAME --ssh-key-file=PATH_TO_PRIVATE_KEY
Jika Anda sering terhubung ke VM menggunakan SSH dengan gcloud CLI CLI, buat pasangan kunci SSH default bernama
google_compute_enginedi direktori.ssh/Anda. Baris perintah gcloud CLI menggunakan pasangan kunci ini jika ada dan tidak membuat yang baru pada setiap koneksi. Untuk membuat pasangan kunci default, jalankan:ssh-keygen -t rsa -f ~/.ssh/google_compute_engine -C USERNAME -b 2048
Kemudian, tambahkan kunci publik ke profil Login OS Anda:
gcloud compute os-login ssh-keys add --key-file=~/.ssh/google_compute_engine.pub
Cloud Build
Jika Anda menggunakan Cloud Build dan profil Login OS akun layanan Anda melebihi batas 32 KiB, Anda mungkin mengalami kegagalan koneksi SSH dan melihat pesan error berikut: Login profile size exceeds 32 KiB.... Untuk mengatasi masalah ini, Anda dapat
mengonfigurasi Cloud Build untuk
menggunakan akun layanan yang ditentukan pengguna
bukan akun layanan Cloud Build default.
Untuk mencegah masalah ini terjadi di masa mendatang, tambahkan waktu habis masa berlaku untuk kunci SSH. Kunci yang habis masa berlakunya akan otomatis dihapus dari profil login Anda 48 jam setelah habis masa berlakunya, atau saat Anda menambahkan kunci baru ke profil Anda.
Kode respons HTTP: 429
Anda mungkin melihat error berikut saat mencoba terhubung ke instance komputasi 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 komputasi. Batas ini tidak dapat disesuaikan. Untuk mengatasi masalah ini, tunggu beberapa detik, lalu coba lagi koneksinya.
Untuk mencegah masalah ini di masa mendatang, coba hal berikut:
- Terapkan mekanisme percobaan ulang dalam kode aplikasi. Untuk mengetahui informasi selengkapnya, lihat:
- Gunakan 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 saat ini Google Cloud . |
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 Google Cloud konsol 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 ke 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 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 pengguna
user_example_com 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 yang 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