1. Pengantar
Mengautentikasi pengguna aplikasi web sering kali diperlukan, dan biasanya memerlukan pemrograman khusus di aplikasi Anda. Untuk aplikasi Google Cloud Platform, Anda dapat menyerahkan tugas tersebut pada layanan Identity-Aware Proxy. Jika Anda hanya perlu membatasi akses ke pengguna tertentu, perubahan pada aplikasi tidak diperlukan. Jika aplikasi perlu mengetahui identitas pengguna (seperti untuk menyimpan preferensi pengguna di sisi server), Identity-Aware Proxy dapat menyediakannya dengan sedikit kode aplikasi.
Apa yang dimaksud dengan Identity-Aware Proxy?
Identity-Aware Proxy (IAP) adalah layanan Google Cloud Platform yang menangkap permintaan web yang dikirim ke aplikasi Anda, mengautentikasi pengguna yang membuat permintaan tersebut menggunakan Google Identity Service, dan hanya mengizinkan permintaan tersebut jika berasal dari pengguna yang diberi otorisasi. Selain itu, layanan ini dapat mengubah header permintaan untuk menyertakan informasi tentang pengguna yang diautentikasi.
Codelab ini akan memandu Anda membuat aplikasi sendiri, membatasi akses ke aplikasi tersebut, dan mendapatkan identitas pengguna dari IAP.
Yang akan Anda buat
Dalam codelab ini, Anda akan membangun aplikasi web sederhana dengan Google App Engine, lalu mempelajari berbagai cara penggunaan Identity-Aware Proxy untuk membatasi akses ke aplikasi dan memberikan informasi identitas pengguna ke aplikasi tersebut. Aplikasi Anda akan:
|
|
Yang akan Anda pelajari
- Cara menulis dan men-deploy aplikasi App Engine sederhana menggunakan Python 3.7
- Cara mengaktifkan dan menonaktifkan IAP untuk membatasi akses ke aplikasi Anda
- Cara mendapatkan informasi identitas pengguna dari IAP ke dalam aplikasi Anda
- Cara memverifikasi informasi dari IAP secara kriptografis untuk berlindung dari spoofing
Yang Anda butuhkan
- Browser web modern seperti Chrome.
- Pengetahuan dasar tentang bahasa pemrograman Python
Codelab ini berfokus pada Google App Engine dan IAP. Konsep dan blok kode yang tidak relevan akan dibahas sekilas dan disediakan, jadi Anda cukup menyalin dan menempelkannya.
2. Mempersiapkan
Anda akan bekerja di lingkungan command line Cloud Shell. Mulailah dengan membuka lingkungan tersebut dan mengambil kode contoh ke dalamnya.
Luncurkan Konsol dan Cloud Shell
Di bagian kiri atas halaman lab, klik tombol Open Google Console. Anda harus login dengan Nama Pengguna dan Sandi yang ditampilkan di bawah tombol tersebut. |
|
Semua perintah dalam codelab ini akan dieksekusi dalam Cloud Shell untuk project yang telah dibuat dan dibuka untuk Anda. Buka Cloud Shell dengan mengklik ikon Activate Cloud Shell yang ada di sisi kanan header halaman konsol. Bagian bawah halaman akan memungkinkan Anda memasukkan dan menjalankan perintah.Perintah dapat dijalankan dari PC Anda sendiri, tetapi Anda harus menginstal dan mengonfigurasi software pengembangan yang diperlukan terlebih dahulu. Cloud Shell sudah memiliki semua alat software yang Anda butuhkan. |
|
Download kodenya
Klik bidang command line di Cloud Shell untuk mengetikkan perintah. Ambil kode dari GitHub, lalu ubah ke folder kode:
git clone https://github.com/googlecodelabs/user-authentication-with-iap.git
cd user-authentication-with-iap
Folder ini berisi satu subfolder untuk setiap langkah codelab ini. Anda akan mengubahnya ke folder yang benar di tiap langkahnya.
3. Langkah 1 - Men-deploy aplikasi dan melindunginya dengan IAP
Ini adalah aplikasi Standar App Engine yang ditulis dalam Python 3.7 dan hanya menampilkan halaman sambutan "Halo Dunia". Kami akan men-deploy dan mengujinya, lalu membatasi aksesnya menggunakan IAP.
Meninjau kode aplikasi
Ubah dari folder project utama ke subfolder 1-HelloWorld yang berisi kode untuk langkah ini.
cd 1-HelloWorld
Kode aplikasi ada di file main.py. Kode ini menggunakan framework web Flask untuk merespons permintaan web dengan konten template. File template tersebut berada di templates/index.html, dan hanya berisi HTML biasa untuk langkah ini. File template kedua berisi contoh demo kebijakan privasi di templates/privacy.html.
Ada dua file lain, yaitu requirements.txt yang mencantumkan semua library Python non-default yang digunakan aplikasi, dan app.yaml yang memberi tahu Google Cloud Platform bahwa aplikasi App Engine ini ditulis menggunakan Python 3.7.
Anda dapat mencantumkan tiap file dalam shell menggunakan perintah cat, seperti berikut:
cat main.py
Atau Anda dapat membuka editor kode Cloud Shell dengan mengklik ikon Pensil di sisi kanan atas jendela Cloud Shell, dan memeriksa kode tersebut.
Anda tidak perlu mengubah file apa pun untuk langkah ini.
Men-deploy ke App Engine
Sekarang, deploy aplikasi ke lingkungan Standar App Engine untuk Python 3.7
gcloud app deploy
Anda mungkin diminta untuk memilih region tujuan deployment. Pilih salah satu yang terdekat dengan Anda yang menyatakan "mendukung standar". Ketika ditanya apakah Anda ingin melanjutkan, tekan Y untuk ya.
Setelah beberapa menit, deployment akan selesai dan Anda akan melihat pesan bahwa Anda dapat melihat aplikasi dengan gcloud app browse. Masukkan perintah tersebut. Jika tab baru tidak terbuka di browser, klik link yang ditampilkan untuk membukanya di tab baru, atau salin link ke tab baru yang dibuka secara manual, jika perlu. Karena ini adalah pertama kalinya aplikasi dijalankan, perlu waktu beberapa detik hingga aplikasi muncul saat instance cloud dimulai, dan Anda akan melihat jendela berikut.

Anda dapat membuka URL yang sama dari komputer mana pun yang terhubung ke internet untuk melihat halaman web tersebut. Akses belum dibatasi.
Membatasi akses dengan IAP
Di jendela konsol cloud, klik ikon menu di kiri atas halaman, klik Security, lalu klik Identity-Aware Proxy. |
|
Karena ini adalah pertama kalinya Anda mengaktifkan opsi autentikasi untuk project ini, Anda akan melihat pesan bahwa Anda harus mengonfigurasi layar izin OAuth sebelum dapat menggunakan IAP. |
|
Klik TOMBOL KONFIGURASI LAYAR IZIN. Tab baru akan terbuka untuk mengonfigurasi layar izin. |
|
Lengkapi bagian kosong yang diperlukan dengan nilai yang sesuai:
Nama aplikasi | Contoh IAP |
Email dukungan | alamat email Anda. Alamat email Anda mungkin sudah diisi untuk Anda. |
Domain yang diotorisasi | bagian nama host dari URL aplikasi, misalnya, iap-example-999999.appspot.com. Anda dapat melihatnya di kolom URL halaman web Halo Dunia yang sebelumnya dibuka. Jangan menyertakan awalan |
Link halaman beranda aplikasi | URL yang Anda gunakan untuk melihat aplikasi |
Application privacy Policy link | link halaman privasi di aplikasi, mirip link halaman beranda dengan /privacy ditambahkan di bagian akhir |
Klik Simpan. Anda akan diminta untuk membuat kredensial. Anda tidak perlu membuat kredensial untuk codelab ini, jadi tab browser ini bisa langsung ditutup.
Kembali ke halaman Identity-Aware Proxy, lalu muat ulang halaman. Sekarang Anda akan melihat daftar resource yang dapat dilindungi.Klik tombol di kolom IAP pada baris App Engine app untuk mengaktifkan IAP. |
|
Anda akan melihat nama domain yang akan dilindungi oleh IAP. Klik AKTIFKAN. |
|
Sekarang, buka tab browser lalu klik URL aplikasi Anda. Anda akan melihat layar "Login dengan Google" yang mengharuskan Anda login untuk mengakses aplikasi. |
|
Login dengan akun Google atau G Suite. Anda akan melihat layar yang menolak upaya akses tersebut. |
|
Anda telah berhasil melindungi aplikasi dengan IAP, tetapi Anda belum memberi tahu IAP terkait akun mana yang akan diberi akses.
Kembali ke halaman Identity-Aware Proxy pada konsol, pilih kotak centang di samping App Engine app, lalu lihat sidebar di sebelah kanan halaman. |
|
Setiap alamat email (atau alamat Grup Google, atau nama domain G Suite) yang akan diberi akses perlu ditambahkan sebagai Anggota. Klik TAMBAHKAN ANGGOTA. Masukkan alamat email Anda, lalu pilih peran Cloud IAP/IAP-Secured Web App User untuk ditetapkan ke alamat tersebut. Anda dapat memasukkan lebih banyak alamat atau domain GSuite dengan cara yang sama. |
|
Klik Simpan. Pesan "Policy Updated" akan muncul di bagian bawah jendela.
Kembali ke aplikasi dan muat ulang halaman. Anda sekarang akan melihat aplikasi web, karena Anda telah login dengan pengguna yang telah diotorisasi. Namun, Anda mungkin masih melihat halaman "You don't have access" karena IAP mungkin tidak memeriksa ulang otorisasi Anda. Dalam hal ini, lakukan langkah-langkah berikut:
- Buka browser web Anda ke alamat halaman beranda dengan
/_gcp_iap/clear_login_cookieditambahkan di akhir URL, seperti padahttps://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie. - Anda akan melihat layar "Login dengan Google" yang baru, yang menampilkan akun Anda. Jangan mengklik akun tersebut. Sebagai gantinya, klik Use another account, dan masukkan kembali kredensial Anda.
- Langkah-langkah ini akan membuat IAP memeriksa ulang akses, dan sekarang Anda akan melihat layar utama aplikasi.
Jika Anda memiliki akses ke browser lain atau dapat menggunakan Mode Samaran di browser, serta memiliki akun Gmail atau G Suite lain yang masih berlaku, Anda dapat menggunakan browser tersebut untuk membuka halaman aplikasi dan login dengan akun lainnya. Karena akun tersebut belum diotorisasi, akan muncul tulisan “You Don't Have Access” di layar, bukan aplikasi Anda.
4. Langkah 2 - Mengakses informasi identitas pengguna
Setelah dilindungi dengan IAP, aplikasi dapat menggunakan informasi identitas yang disediakan IAP dalam header permintaan web yang dilaluinya. Pada langkah ini, aplikasi akan mendapatkan alamat email pengguna yang login dan ID pengguna unik persisten yang ditetapkan Google Identity Service untuk pengguna tersebut. Data tersebut akan ditampilkan kepada pengguna di halaman sambutan.
Ini adalah langkah 2, dan langkah terakhir diakhiri dengan Cloud Shell Anda terbuka di folder iap-codelab/1-HelloWorld. Ubah ke folder untuk langkah ini:
cd ~/iap-codelab/2-HelloUser
Men-deploy ke App Engine
Karena deployment memerlukan waktu beberapa menit, mulailah dengan men-deploy aplikasi ke lingkungan Standar App Engine untuk Python 3.7:
gcloud app deploy
Ketika ditanya apakah Anda ingin melanjutkan, tekan Y untuk ya. Dalam hitungan menit, deployment akan selesai. Sambil menunggu, Anda dapat memeriksa file aplikasi seperti yang dijelaskan di bawah.
Setelah deployment siap, Anda akan melihat pesan bahwa aplikasi dapat dilihat dengan perintah gcloud app browse. Masukkan perintah tersebut. Jika tab baru tidak terbuka pada browser, salin link yang ditampilkan dan buka link tersebut di tab baru seperti biasa. Anda akan melihat halaman seperti berikut:

Anda mungkin perlu menunggu beberapa menit agar versi baru dari aplikasi dapat menggantikan versi sebelumnya. Muat ulang halaman jika diperlukan untuk melihat halaman yang mirip dengan halaman di atas.
Memeriksa file aplikasi
Folder ini berisi kumpulan file yang sama seperti yang terlihat di Langkah 1, tetapi dua file telah diubah: main.py dan templates/index.html. Program telah diubah untuk mengambil informasi pengguna yang disediakan IAP dalam header permintaan, dan sekarang, template menampilkan data tersebut.
Ada dua baris di main.py yang berfungsi memanggil data identitas yang disediakan IAP:
user_email = request.headers.get('X-Goog-Authenticated-User-Email')
user_id = request.headers.get('X-Goog-Authenticated-User-ID')
Header X-Goog-Authenticated-User- disediakan oleh IAP, dan nama-namanya tidak peka huruf besar/kecil, sehingga dapat dituliskan dalam huruf kecil atau huruf besar. Pernyataan render_template sekarang menyertakan nilai-nilai tersebut agar dapat ditampilkan:
page = render_template('index.html', email=user_email, id=user_id)
Template index.html dapat menampilkan nilai tersebut dengan menggunakan tanda kurung kurawal ganda pada namanya:
Hello, {{ email }}! Your persistent ID is {{ id }}.
Seperti yang Anda lihat, data yang disediakan diawali dengan accounts.google.com:, yang menunjukkan asal informasi tersebut. Aplikasi Anda dapat menghapus semuanya hingga dan termasuk tanda titik dua untuk mendapatkan nilai mentah jika diinginkan.
Menonaktifkan IAP
Apa yang terjadi pada aplikasi ini jika IAP dinonaktifkan, atau diabaikan (misalnya oleh aplikasi lain yang berjalan di project cloud yang sama)? Nonaktifkan IAP untuk mengetahuinya.
Di jendela konsol cloud, klik ikon menu di kiri atas halaman, klik Security, lalu klik Identity-Aware Proxy. Klik tombol pengalih IAP di samping App Engine app untuk menonaktifkan IAP. |
|
Anda akan diperingatkan bahwa dengan menonaktifkan IAP, semua pengguna dapat mengakses aplikasi.
Muat ulang halaman web aplikasi. Anda akan melihat halaman yang sama, tetapi tanpa informasi pengguna:

Karena aplikasi sekarang tidak terlindungi, pengguna dapat mengirim permintaan web yang terlihat telah melewati IAP. Misalnya, Anda dapat menjalankan perintah curl berikut dari Cloud Shell untuk melakukannya (ganti <your-url-here> dengan URL aplikasi yang tepat):
curl -X GET <your-url-here> -H "X-Goog-Authenticated-User-Email: totally fake email"
Halaman web akan ditampilkan pada command line, dan akan terlihat seperti berikut:
<!doctype html>
<html>
<head>
<title>IAP Hello User</title>
</head>
<body>
<h1>Hello World</h1>
<p>
Hello, totally fake email! Your persistent ID is None.
</p>
<p>
This is step 2 of the <em>User Authentication with IAP</em>
codelab.
</p>
</body>
</html>
Tidak ada cara bagi aplikasi untuk mengetahui apakah IAP telah dinonaktifkan atau diabaikan. Untuk kasus yang memiliki risiko potensial, langkah 3 menunjukkan solusinya.
5. Langkah 3 - Menggunakan verifikasi kriptografi
Jika ada risiko IAP dinonaktifkan atau diabaikan, aplikasi dapat memeriksa untuk memastikan informasi identitas yang diterimanya valid. Layanan ini menggunakan header permintaan web ketiga yang ditambahkan oleh IAP, yang disebut X-Goog-IAP-JWT-Assertion. Nilai header adalah objek yang ditandatangani secara kriptografis yang juga berisi data identitas pengguna. Aplikasi Anda dapat memverifikasi tanda tangan digital dan menggunakan data yang disediakan dalam objek ini untuk memastikan bahwa tanda tangan tersebut disediakan oleh IAP tanpa adanya perubahan.
Verifikasi tanda tangan digital memerlukan beberapa langkah tambahan, seperti mengambil set kunci publik Google yang terbaru. Perlu tidaknya langkah tambahan ini dapat ditentukan berdasarkan risikonya. Misalnya, seseorang mungkin dapat menonaktifkan atau mengabaikan IAP. Faktor penentu lainnya adalah sensitivitas aplikasi.
Ini adalah langkah 3, dan langkah terakhir diakhiri dengan Cloud Shell Anda terbuka di folder iap-codelab/2-HelloUser. Ubah ke folder untuk langkah ini:
cd ~/iap-codelab/3-HelloVerifiedUser
Men-deploy ke App Engine
Deploy aplikasi ke lingkungan Standar App Engine untuk Python 3.7:
gcloud app deploy
Ketika ditanya apakah Anda ingin melanjutkan, tekan Y untuk ya. Dalam hitungan menit, deployment akan selesai. Sambil menunggu, Anda dapat memeriksa file aplikasi seperti yang dijelaskan di bawah.
Setelah deployment siap, Anda akan melihat pesan bahwa aplikasi dapat dilihat dengan perintah gcloud app browse. Masukkan perintah tersebut. Jika tab baru tidak terbuka pada browser, salin link yang ditampilkan dan buka link tersebut di tab baru seperti biasa.
Ingat, Anda menonaktifkan IAP di Langkah 2, sehingga tidak ada data IAP yang diberikan ke aplikasi. Anda akan melihat halaman seperti berikut:

Seperti sebelumnya, Anda mungkin perlu menunggu beberapa menit hingga versi terbaru diluncurkan guna melihat versi baru dari halaman tersebut.
Karena IAP dinonaktifkan, tidak ada informasi pengguna yang tersedia. Sekarang aktifkan kembali IAP.
Di jendela konsol cloud, klik ikon menu di kiri atas halaman, klik Security, lalu klik Identity-Aware Proxy. Klik tombol pengalih IAP di samping App Engine app untuk mengaktifkan IAP kembali. |
|
Muat ulang halaman. Halaman akan terlihat seperti berikut:

Perhatikan bahwa alamat email yang disediakan oleh metode terverifikasi tidak memiliki awalan accounts.google.com:.
Jika IAP dinonaktifkan atau diabaikan, data yang diverifikasi akan hilang, atau tidak valid, karena data tersebut tidak dapat memiliki tanda tangan yang valid kecuali jika dibuat oleh pemegang kunci pribadi Google.
Memeriksa file aplikasi
Folder ini berisi kumpulan file yang sama seperti yang terlihat di Langkah 2, dengan dua file telah diubah dan satu file baru. File yang baru adalah auth.py, yang menyediakan metode user() untuk mengambil dan memverifikasi informasi identitas yang ditandatangani secara kriptografis. File yang diubah adalah main.py dan templates/index.html, yang saat ini menggunakan hasil dari metode tersebut. Header yang belum diverifikasi seperti yang ditemukan di langkah 2 juga ditampilkan sebagai perbandingan.
Fungsi baru ini sebagian besar terdapat pada fungsi user():
def user():
assertion = request.headers.get('X-Goog-IAP-JWT-Assertion')
if assertion is None:
return None, None
info = jwt.decode(
assertion,
keys(),
algorithms=['ES256'],
audience=audience()
)
return info['email'], info['sub']
assertion adalah data yang ditandatangani secara kriptografis yang tersedia dalam header permintaan yang ditentukan. Kode ini menggunakan library untuk memvalidasi dan mendekode data tersebut. Validasi menggunakan kunci publik yang disediakan oleh Google untuk memeriksa data yang ditandatanganinya, serta mengetahui audiens yang dituju oleh data tersebut (pada dasarnya, project Google Cloud yang sedang dilindungi). Fungsi bantuan keys() dan audience() mengumpulkan dan menampilkan nilai tersebut.
Objek yang ditandatangani memiliki dua buah data yang diperlukan: alamat email yang diverifikasi, dan nilai ID unik (disediakan di bagian sub, untuk pelanggan, kolom standar).
Langkah 3 telah selesai.
6. Ringkasan
Anda telah men-deploy aplikasi web App Engine. Pada Langkah 1, Anda membatasi akses ke aplikasi hanya untuk pengguna yang Anda pilih. Pada Langkah 2, Anda mengambil dan menampilkan identitas pengguna yang diizinkan IAP untuk mengakses aplikasi, dan memahami bagaimana informasi tersebut dapat di-spoofing jika IAP dinonaktifkan atau diabaikan. Pada Langkah 3, Anda memverifikasi pernyataan yang ditandatangani secara kriptografis pada identitas pengguna, yang tidak dapat di-spoofing.
7. Pembersihan
Satu-satunya resource Google Cloud Platform yang Anda gunakan dalam codelab ini adalah instance App Engine. Setiap kali Anda men-deploy aplikasi, versi baru akan dibuat dan terus ada hingga dihapus. Keluar dari lab untuk menghapus project dan semua resource di dalamnya.











