Membatasi kunci SSH dari VM


Dokumen ini menjelaskan cara mencegah pengguna mengakses instance virtual machine (VM) dengan menghapus dan memblokir kunci SSH dari VM.

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.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan 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, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Menghapus kunci SSH

Anda dapat menghapus kunci SSH dari VM yang menggunakan Login OS dan VM yang menggunakan kunci SSH berbasis metadata.

Menghapus kunci SSH dari VM yang menggunakan Login OS

VM yang menggunakan Login OS menerima kunci SSH yang terkait dengan Akun Google Anda. Anda dapat menghapus kunci SSH publik dari akun pengguna menggunakan Google Cloud CLI atau OS Login API. Jika Anda adalah administrator untuk organisasi, Anda dapat menghapus kunci SSH dari akun pengguna menggunakan Directory API. Compute Engine otomatis menghapus kunci yang sudah tidak berlaku dari Akun Google Anda.

gcloud

Untuk menghapus kunci SSH publik dari akun Anda, lakukan hal berikut:

  1. Jika tidak tahu kunci mana yang ingin dihapus, jalankan perintah gcloud compute os-login describe-profile untuk melihat semua kunci yang terkait dengan akun Anda:

    gcloud compute os-login describe-profile
    
  2. Salin nilai fingerprint kunci yang ingin dihapus.

  3. Hapus kunci dari akun Anda menggunakan perintah gcloud compute os-login ssh-keys remove:

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

    Ganti KEY dengan kunci SSH publik yang ingin Anda hapus, atau sidik jari Login OS untuk kunci yang ingin Anda hapus.

REST

Untuk menghapus kunci SSH publik dari akun Anda, lakukan hal berikut:

  1. Jika tidak tahu kunci mana yang ingin dihapus, gunakan metode users.getLoginProfile untuk melihat semua kunci yang terkait dengan akun Anda:

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    Ganti ACCOUNT_EMAIL dengan alamat email yang terkait dengan akun Anda.

  2. Salin nilai fingerprint kunci yang ingin dihapus.

  3. Hapus kunci dari akun menggunakan metode users.sshPublicKeys.delete:

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

    Ganti kode berikut:

    • ACCOUNT_EMAIL: alamat email yang terkait dengan akun Anda.
    • FINGERPRINT: sidik jari SHA-256 kunci yang akan dihapus

Menghapus kunci SSH dari VM yang menggunakan kunci berbasis metadata

Anda dapat menghapus kunci SSH publik dari project atau metadata instance menggunakan Google Cloud Console, gcloud CLI, atau Compute Engine API.

Setelah Anda menghapus kunci terakhir dari metadata untuk pengguna tertentu, atau kunci terakhir dalam metadata untuk pengguna tertentu sudah tidak berlaku, Compute Engine akan menghapus file ~/.ssh/authorized_keys pengguna di VM.

Perhatian: Jika Anda mengelola kunci SSH dalam metadata, Anda dapat mengganggu kemampuan anggota project untuk terhubung ke VM. Selain itu, Anda berisiko memberi pengguna, termasuk pengguna di luar project Anda, akses yang tidak diinginkan ke VM. Untuk mengetahui informasi selengkapnya, lihat risiko pengelolaan kunci manual.

Menghapus kunci publik dari metadata project

Hapus kunci SSH publik dari metadata project untuk menghapus akses ke semua VM dalam project.

Saat menghapus kunci dari metadata menggunakan gcloud CLI dan Compute Engine API, Anda harus mengambil daftar kunci yang ada, mengedit daftar kunci untuk menghapus kunci yang tidak diinginkan, dan menimpa kunci lama dengan daftar kunci yang ingin Anda pertahankan, seperti yang dijelaskan di bagian berikut.

Konsol

Untuk menghapus kunci SSH publik dari metadata project menggunakan Konsol Google Cloud, lakukan hal berikut:

  1. Di Konsol Google Cloud, buka halaman Metadata.

    Buka Metadata

  2. Pada bagian SSH Keys, klik Edit.

  3. Klik tombol penghapusan di sebelah kunci SSH.

    Kunci publik PuTTYgen.

  4. Klik Save.

gcloud

Untuk menghapus kunci SSH publik dari metadata project menggunakan gcloud CLI, lakukan langkah berikut:

  1. Jalankan perintah gcloud compute project-info describe untuk mendapatkan metadata project:

    gcloud compute project-info describe
    

    Outputnya mirip dengan hal berikut ini:

    ...
    metadata:
      ...
      - key: ssh-keys
        value: |-
          cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
          baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Salin nilai metadata ssh-keys.

  3. Buat dan buka file teks baru di workstation Anda.

  4. Di dalam file tersebut, tempel daftar kunci SSH yang baru saja Anda salin, lalu hapus kunci apa pun yang ingin dihapus dari metadata project.

  5. Simpan dan tutup file tersebut.

  6. Jalankan perintah gcloud compute project-info add-metadata untuk menetapkan nilai ssh-keys di seluruh project:

    gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
    

    Ganti KEY_FILE dengan salah satu dari yang berikut ini:

    • jalur ke file yang Anda buat di langkah sebelumnya, jika project memiliki kunci SSH yang ada
    • jalur ke file kunci SSH publik baru, jika project tidak memiliki kunci SSH

REST

Untuk menghapus kunci SSH publik dari metadata project menggunakan Compute Engine API, lakukan hal berikut:

  1. Gunakan metode projects.get untuk mendapatkan nilai fingerprint dan ssh-keys dari metadata.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Anda.

    Responsnya mirip dengan yang berikut ini:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
     {
      "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
     }
    ]
    ...
    
  2. Salin daftar nilai kunci SSH dan hapus kunci yang ingin dihapus.

  3. Gunakan projects.setCommonInstanceMetadata untuk menghapus kunci SSH.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • EXISTING_SSH_KEYS: daftar kunci SSH yang ingin Anda pertahankan
    • FINGERPRINT: nilai fingerprint dari respons permintaan projects.get

Menghapus kunci SSH publik dari metadata instance

Hapus kunci SSH publik dari metadata instance untuk menghapus akses ke satu VM.

Saat menghapus kunci dari metadata menggunakan gcloud CLI dan Compute Engine API, Anda harus mengambil daftar kunci yang ada, mengedit daftar kunci untuk menghapus kunci yang tidak diinginkan, dan menimpa kunci lama dengan daftar kunci yang ingin disimpan, seperti yang dijelaskan di bagian berikut.

Konsol

Untuk menghapus kunci SSH publik dari metadata instance menggunakan Konsol Google Cloud, lakukan hal berikut:

  1. Di Konsol Google Cloud, buka halaman Metadata.

    Buka Metadata

  2. Klik nama VM yang ingin Anda hapus kuncinya.

  3. Klik Edit.

  4. Di panel tengah, pada bagian SSH Keys, klik Show and edit. Bagian ini akan diperluas untuk menampilkan semua kunci SSH publik level instance.

  5. Klik tombol penghapusan di samping kunci yang ingin dihapus:

    Kunci publik PuTTYgen.

  6. Klik Save.

gcloud

Untuk menghapus kunci SSH publik dari metadata instance menggunakan gcloud CLI, lakukan langkah berikut:

  1. Jalankan perintah gcloud compute instances describe untuk mendapatkan metadata untuk VM:

    gcloud compute instances describe VM_NAME
    

    Ganti VM_NAME dengan nama VM yang perlu Anda tambahkan atau hapus kunci SSH publik.

    Outputnya mirip dengan hal berikut ini:

    ...
    metadata:
    ...
    - key: ssh-keys
     value: |-
       cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
       baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Salin nilai metadata ssh-keys.

  3. Buat dan buka file teks baru di workstation lokal.

  4. Di dalam file tersebut, tempel daftar kunci SSH yang baru saja Anda salin, lalu hapus kunci yang ingin dihapus.

  5. Simpan dan tutup file tersebut.

  6. Jalankan perintah gcloud compute project-info add-metadata untuk menetapkan nilai ssh-keys di seluruh project:

    gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
    

    Ganti kode berikut:

    • VM_NAME: VM yang ingin Anda hapus kunci SSH-nya
    • KEY_FILE: jalur ke file yang berisi daftar semua kunci SSH project

REST

Untuk menghapus kunci SSH publik dari metadata instance menggunakan Compute Engine API, lakukan hal berikut:

  1. Gunakan metode instances.get untuk mendapatkan nilai fingerprint dan ssh-keys dari metadata.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • ZONE: zona VM yang Anda tambahkan kunci SSH-nya
    • VM_NAME: VM tempat Anda menambahkan kunci SSH

    Responsnya mirip dengan hal berikut ini:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Salin daftar nilai kunci SSH dan hapus kunci yang ingin dihapus.

  3. Gunakan instances.setMetadata untuk menghapus kunci SSH.

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • EXISTING_SSH_KEYS: nilai kunci ssh-keys dari respons permintaan projects.get
    • FINGERPRINT: nilai fingerprint dari respons permintaan instances.get

Memblokir kunci SSH project dari VM yang menggunakan kunci SSH berbasis metadata

Anda dapat mencegah VM menerima kunci SSH yang disimpan dalam metadata project dengan memblokir kunci SSH project dari VM. Anda dapat memblokir kunci SSH project dari VM saat membuat VM atau setelah membuat VM.

Memblokir kunci SSH project dari VM selama pembuatan VM

Anda dapat memblokir kunci SSH project dari VM selama pembuatan VM menggunakan Konsol Google Cloud, gcloud CLI, atau Compute Engine API.

Konsol

Untuk membuat VM dan memblokirnya agar tidak menerima kunci SSH yang disimpan dalam metadata project menggunakan Konsol Google Cloud, lakukan langkah berikut:

  1. Di Konsol Google Cloud, buka halaman Create an instance.

    Buka Create an instance

  2. Tentukan detail VM.

  3. Luaskan bagian Advanced options, dan lakukan hal berikut:

    1. Luaskan bagian Security.

    2. Centang Block project-wide SSH keys.

  4. Untuk membuat dan memulai VM, klik Create.

gcloud

Untuk membuat VM dan memblokirnya agar tidak menerima kunci SSH yang disimpan dalam metadata project menggunakan gcloud CLI, gunakan perintah gcloud compute instances create:

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

Ganti VM_NAME dengan nama VM baru.

REST

Untuk membuat VM dan memblokirnya agar tidak menerima kunci SSH yang disimpan dalam metadata project menggunakan Compute Engine, buat permintaan POST ke metode instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Ganti kode berikut:

  • PROJECT_ID: the project ID
  • ZONE: zona VM

Dalam isi permintaan, berikan nama pengguna dan kunci SSH publik di properti items:

...
{
 "items": [
    {
     "key": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

Memblokir kunci SSH project dari VM setelah pembuatan VM

Anda dapat memblokir kunci SSH project dari VM setelah pembuatan VM menggunakan Google Cloud Console, gcloud CLI, atau Compute Engine API.

Konsol

Untuk mencegah VM menerima koneksi dari kunci SSH yang disimpan dalam metadata project menggunakan Konsol Google Cloud, lakukan tindakan berikut:

  1. Di Konsol Google Cloud, buka halaman Metadata.

    Buka Metadata

  2. Klik nama VM yang kunci SSH project-nya ingin Anda blokir.

  3. Klik Edit.

  4. Pada SSH Keys, centang Block project-wide SSH keys.

  5. Setelah selesai mengedit setelan koneksi untuk kunci SSH, klik Save.

gcloud

Untuk memblokir VM agar tidak menerima koneksi dari kunci SSH yang disimpan dalam metadata project menggunakan gcloud CLI, lakukan hal berikut:

Jalankan perintah gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

Ganti VM_NAME dengan nama VM yang kunci SSH publiknya ingin Anda blokir.

REST

Untuk mencegah VM menerima koneksi dari kunci SSH yang disimpan dalam metadata project menggunakan Compute Engine API, lakukan tindakan berikut:

  1. Gunakan metode instances.get untuk mendapatkan fingerprint dari metadata.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • ZONE: zona VM yang Anda tambahkan kunci SSH-nya
    • VM_NAME: VM tempat Anda menambahkan kunci SSH

    Responsnya mirip dengan hal berikut ini:

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Gunakan metode instances.setMetadata untuk menyetel block-project-ssh-keys ke TRUE:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "block-project-ssh-keys",
      "value": TRUE
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Ganti kode berikut:

    • PROJECT_ID adalah ID project Anda
    • ZONE adalah zona tempat instance Anda berada
    • INSTANCE_NAME adalah instance tempat Anda ingin memblokir kunci seluruh project.
    • FINGERPRINT: nilai fingerprint dari respons permintaan instances.get.

Apa langkah selanjutnya?