Anda dapat menerapkan otentikasi antarlayanan dengan menggunakan akun layanan di layanan gRPC. Halaman ini menunjukkan otentikasi layanan-ke-layanan dengan memandu Anda melalui contoh lengkap, termasuk cara mengonfigurasi Proxy Layanan yang Dapat Diperluas (EAP) (ESP) dalam layanan gRPC untuk mendukung permintaan yang diautentikasi dan cara untuk memanggil layanan dari klien gRPC.
Agar layanan apa pun dapat melakukan panggilan terautentikasi ke Cloud Endpoints
API, layanan panggilan harus memiliki
akun layanan
dan klien harus mengirim
token otentikasi dalam panggilan. Pemanggil harus menggunakan
Token ID Google
atau kustom
JSON Web Token (JWT) yang hanya ditandatangani
oleh akun layanan pemanggil. ESP memvalidasi bahwa
Klaim iss
di JWT cocok dengan setelan issuer
di layanan
konfigurasi Anda. ESP tidak
periksa Identity and Access Management
izin yang telah diberikan pada akun layanan.
Dalam contoh kita, Anda menyiapkan dan menggunakan bentuk layanan-ke-layanan paling sederhana autentikasi, di mana klien menggunakan akun layanan Google Cloud mereka untuk membuat JWT yang otentikasi. Pendekatan untuk metode otentikasi lainnya serupa, meskipun proses sisi klien untuk mendapatkan otentikasi yang valid token bergantung pada metode otentikasi yang digunakan.
Sebelum memulai
Panduan ini menggunakan contoh Toko Buku yang digunakan dalam Tutorial.
Clone repo git tempat kode contoh gRPC dihosting:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Ubah direktori kerja Anda:
cd python-docs-samples/endpoints/bookstore-grpc/
Ikuti petunjuk di Tutorial untuk menyiapkan proyek jika Anda belum memilikinya.
Dalam contoh ini, Anda menggunakan deployment ke Google Kubernetes Engine, meskipun konfigurasi autentikasinya sama untuk Compute Engine.
Dalam contoh, ada dua project Google Cloud Platform yang {i>reference:<i}
- Project produser layanan, yang merupakan project yang memiliki Cloud Endpoints untuk layanan gRPC.
- Project konsumen layanan, yang merupakan project yang memiliki gRPC dengan klien besar.
Membuat akun layanan konsumen dan kunci
Guna membuat akun layanan dan kunci untuk project konsumen:
- Di Konsol Google Cloud, buka API & layanan IT perusahaan mereka. Pastikan Anda berada dalam project konsumen.
- Pada halaman Credentials, di menu drop-down Create Credentials, pilih Service Account Key.
Di halaman Buat kunci akun layanan, jika Anda sudah memiliki layanan yang ingin Anda gunakan, pilih akun itu. Atau, di Menu drop-down Akun layanan, pilih Akun layanan baru, lalu jenis nama akun.
ID Akun layanan yang sesuai akan dibuat untuk Anda. Catat ID, seperti yang diperlukan di bagian berikut. Contoh:
service-account-name@YOUR_PROJECT_ID.
Klik menu drop-down Peran dan pilih peran berikut:
- Akun Layanan > Service Account User
- Akun Layanan > Pembuat Token Akun Layanan
Pastikan jenis kunci JSON dipilih.
Klik Create. File kunci JSON akun layanan Anda didownload ke komputer lokal. Catat lokasinya dan pastikan itu disimpan dengan aman karena yang nantinya digunakan untuk menghasilkan token.
Mengonfigurasi autentikasi untuk layanan
Gunakan project produser untuk semua langkah di bagian ini.
Menyiapkan autentikasi di konfigurasi gRPC API
Autentikasi untuk ESP dikonfigurasi di authentication
pada file YAML konfigurasi gRPC API Anda. Konfigurasi dengan
untuk contoh layanan ini,
api_config_auth.yaml
Bagian providers
menentukan penyedia autentikasi yang ingin Anda
- dalam hal ini, Anda ingin menggunakan akun layanan Google sebagai
penyedia autentikasi. Bagian rules
menentukan bahwa Anda memerlukan token
dari penyedia ini untuk mengakses
semua metode layanan Anda.
Dalam salinan file ini Anda sendiri dari repo yang di-clone:
- Ubah
MY_PROJECT_ID
ke ID project produser Anda. - Ubah
SERVICE-ACCOUNT-ID
di bagianauthentication
(di keduaissuer
danjwks_uri
) ke ID akun layanan konsumen yang Anda catat di bagian sebelumnya. Ini memberi tahu ESP bahwa Anda ingin berikan akses ke layanan Anda kepada pengguna yang memberikan token yang valid dari akun layanan tertentu. - Secara opsional, tambahkan
jwt_locations
di bawah elemenproviders
. Anda dapat menggunakan nilai ini untuk menentukan lokasi JWT kustom. Lokasi JWT default adalah metadataAuthorization
(diawali dengan "Bearer") dan metadataX-Goog-Iap-Jwt-Assertion
.
Simpan file untuk langkah berikutnya.
Men-deploy konfigurasi dan layanan
Langkah-langkah ini sama seperti pada Memulai gRPC di GKE:
Deploy konfigurasi layanan ke Endpoint: Anda perlu melakukannya bahkan jika Anda telah melakukannya untuk tutorial, karena ini adalah konfigurasi yang berbeda. Perhatikan nama layanan yang ditampilkan:
gcloud endpoints services deploy api_descriptor.pb api_config_auth.yaml --project PRODUCER_PROJECT
Membuat cluster penampung dan mengautentikasi
kubectl
ke cluster, jika Anda belum melakukannya.Deploy contoh API dan ESP ke cluster. Jika Anda menggunakan proyek produsen dan konsumen yang terpisah, pertama-tama pastikan Anda telah menetapkan project yang sesuai dalam command line
gcloud
alat:gcloud config set project PRODUCER_PROJECT
Memanggil metode yang diautentikasi dari klien gRPC
Terakhir, di sisi klien, Anda dapat menggunakan kunci akun layanan untuk membuat
token JWT, lalu gunakan token tersebut untuk memanggil metode Toko Buku yang diautentikasi.
Pertama, instal persyaratan Python yang sesuai untuk membuat token dan
jalankan klien contoh. Pastikan Anda berada di
python-docs-samples/endpoints/bookstore-grpc
dari klien yang di-clone, lalu:
virtualenv bookstore-env
source bookstore-env/bin/activate
pip install -r requirements.txt
Membuat token JWT
Dalam contoh ini, Toko Buku menggunakan otentikasi {i>service-to-service<i} di mana layanan panggilan murni diotentikasi oleh akun layanannya, sehingga membuat token yang sesuai untuk dikirim bersama permintaan kita. Perhatikan bahwa Anda juga dapat memerlukan otentikasi layanan-ke-layanan yang lebih ketat di mana sistem token tersebut harus diautentikasi lebih lanjut oleh Google (menggunakan Token ID Google).
Untuk contoh ini, skrip Python yang disediakan dapat membuat token dari JSON kunci file yang diunduh sebelumnya, menggunakan ID pengguna dan email contoh.
Untuk membuat token menggunakan skrip:
Buat token JWT dan tetapkan token tersebut ke variabel
$JWT_TOKEN
:JWT_TOKEN=$(python jwt_token_gen.py \ --file=[SERVICE_ACCOUNT_FILE] \ --audiences=[SERVICE_NAME] \ --issuer=[SERVICE-ACCOUNT-ID])
dengan:
[SERVICE_ACCOUNT_FILE]
adalah JSON akun layanan konsumen yang didownload kunci.[SERVICE_NAME]
adalah nama layanan Toko Buku yang ditampilkan saat Anda men-deploy konfigurasi layanan yang telah diperbarui ke Endpoint.[SERVICE-ACCOUNT-ID]
adalah ID akun layanan konsumen lengkap saat Anda membuat akun layanan Anda.
Melakukan panggilan gRPC yang diautentikasi
Langkah terakhir ini menggunakan
bookstore_client.py
,
yang merupakan klien yang sama
yang digunakan dalam
Tutorial. Untuk melakukan panggilan yang diotentikasi,
meneruskan JWT sebagai
metadata dengan
panggilan metode.
Untuk menjalankan contoh:
Gunakan
kubectl get services
untuk mendapatkan alamat IP eksternal bagi instance yang di-deploy Toko buku:#kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE echo 10.11.246.240 104.196.186.92 80/TCP 10d endpoints 10.11.243.168 104.196.210.50 80/TCP,8090/TCP 10d esp-grpc-bookstore 10.11.254.34 104.196.60.37 80/TCP 1d kubernetes 10.11.240.1 <none> 443/TCP 10d
Dalam hal ini, itu adalah layanan
esp-grpc-bookstore
dan IP eksternalnya104.196.60.37
.Tetapkan alamat IP ke variabel
EXTERNAL_IP
EXTERNAL_IP=104.196.60.37
Lihat semua rak dari layanan Bookstore:
python bookstore_client.py --port=80 --host=$EXTERNAL_IP --auth_token=$JWT_TOKEN
Layanan mengembalikan semua rak di Toko Buku saat ini. Anda dapat menggandakan memeriksanya dengan tidak memberikan token, atau dengan menentukan akun layanan yang salah saat membuat JWT. Perintah tersebut akan gagal.