Bu bölümde, birinci taraf verileri için kimlik doğrulama ve yetkilendirme entegrasyonu da sağlıyor.
Last Mile Fleet Çözümü'nün sağladığı özellikleri, Google Cloud Console. Fleet Engine SDK'ları tarafından imzalanmış JSON Web Jetonlarının (JWT) kullanılmasını gerektirir. uygun Hizmet Hesap.
Genel Bakış
Fleet Engine'e karşı kimlik doğrulama ve yetkilendirme yapan müşteri arka uçları, standart Uygulama Varsayılanı Kimlik bilgileri mekanizmalar.
Fleet Engine, güveni düşük ortamlardan gelen aramaları da alır. internet kullanıcıları ve tarayıcılar gibi. Yalnızca Hizmet Hesabı gizli anahtarlarını korumak için güvenilir ortamlara uygun olduğundan, arka uçların Fleet Engine'e özgü ek talepler içeren imzalı JSON Web Tokens (JWT) Bunlar, cep telefonları gibi güvenilmeyen ortamlara verilebilir.
Kimlik doğrulama tasarım ilkeleri
Fleet Engine'in kimlik doğrulama akışında aşağıdaki tasarım ilkeleri kullanılır.
IAM rolleri, bir ana hesap için izin verilen kaynaklardaki izin grubudur. Örneğin, Yönetici rollerinin, Uygulama Varsayılanı ile tüm işlemleri yapmasına izin verilir Kimlik bilgileri (Güvenilmeyen Sürücü* rolünün yalnızca güncellenmesine izin verilir) ve kimlik doğrulama için JWT kullanımıyla sınırlandırılmıştır. yetkilendirme.
JWT, güvenilir olmayan ortamlarda çalışabilir. Bunlar belirli görevler veya teslimat araçları olabilir.
Güvenin düşük olduğu bir ortamda çalışan kodunuz önce güvenilir bir ortamda çalışan bir kod yazmanız gerekir.
Fleet Engine, API çağrılarında aşağıdaki güvenlik kontrollerini gerçekleştirir: kaynak:
Çağrı ana hesabı, uygun izinlere sahiptir ( ataması) belirtin.
Yönetici olmayan roller için istekte iletilen JWT hak talepleri ve gerekli izni almanıza yardımcı olur.
Kimlik doğrulama akışı
Aşağıdaki sıra şemasında bu kimlik doğrulama akışı ayrıntıları gösterilmektedir.
Filo yöneticisi, hizmet hesaplarını oluşturur.
Filo yöneticisi, hizmet hesaplarına belirli IAM rollerini atar.
Filo yöneticisi, arka uçlarını hizmet hesaplarıyla yapılandırır ve Application Default Credentials (Uygulama Varsayılan Kimlik Bilgileri).
İstemci uygulaması müşteri arka ucundan bir JWT ister. Talep sahibi, Sürücü uygulaması, Tüketici uygulaması veya izleme uygulaması olabilir.
Müşterinin arka ucu, ilgili hizmet için bir JWT imzalayıp düzenler hesap. İstemci uygulaması JWT'yi alır.
İstemci uygulaması, okumak veya değiştirmek amacıyla Fleet Engine'e bağlanmak için JWT'yi kullanır farklı verileri için de aynı, kurulum aşamasında kendisine atanan IAM rollerine göre belirlenir.
Bulut projesi kurulumu
Bulut projenizi kurmak için önce projenizi, ardından hizmet hesapları oluşturabilir.
Google Cloud projenizi oluşturmak için:
- Google Cloud Console'u kullanarak bir Google Cloud projesi oluşturun.
- API'ler ve Hizmetler Kontrol Paneli'ni kullanarak Yerel Yolculuklar ve Teslimatlar API'si.
Hizmet Hesapları ve IAM Rolleri
Hizmet hesabı, bir uygulama tarafından kullanılan özel bir hesap türüdür. Genellikle bir hizmet hesabı, farklı bir lisans veren JWT'leri basmak için kullanılır. role bağlı olarak bir dizi izin sunar. Kötüye kullanım olasılığını azaltmak için Her biri minimum rol grubuna sahip olan birden fazla hizmet hesabı oluşturabilirsiniz zorunlu ().
Last Mile Fleet Çözümü şu rolleri kullanır:
Rol | Açıklama |
---|---|
Fleet Engine Delivery Güvenilir Sürücü Kullanıcısı
roles/fleetengine.deliveryTrustedDriver |
Teslimat araçlarını ve görevleri oluşturma ve güncelleme izni verir, teslimat aracının konumunu ve görev durumunu güncellemek de dahil olmak üzere çok önemlidir. Bu role sahip bir hizmet hesabı tarafından basılan jetonlar genellikle teslimat sürücünüzün mobil cihazlarından veya arka uç sunucularınızı kontrol edin. |
Fleet Engine Delivery Güvenilmeyen Sürücü Kullanıcısı
roles/fleetengine.deliveryUntrustedDriver |
Teslimat aracının konumunu güncelleme izni verir. Basılan jetonlar bu role sahip bir hizmet hesabı tarafından genellikle teslimatınızdan kullanılır sürücünün mobil cihazları. |
Fleet Engine Delivery Tüketici Kullanıcısı
roles/fleetengine.deliveryConsumer |
İzleme kimliği kullanarak görev arama izni verir. ve görev bilgilerini güncelleyip okumamaktan kaçının. Basılan jetonlar bu role sahip bir hizmet hesabı tarafından genellikle bir teslim web tarayıcısı. |
Fleet Engine Delivery Yöneticisi
roles/fleetengine.deliveryAdmin |
Teslim kaynakları için okuma ve yazma izni verir. Müdürler JWT'leri kullanmanıza gerek yoktur ve onun yerine Uygulama Varsayılan Kimlik Bilgileri. Özel JWT talepleri yoksayılır. Bu rol güvenilir ortamlarla sınırlı (müşteri arka ucu). |
roles/fleetengine.deliverySuperUser |
Tüm teslimat araçlarına ve görev API'lerine izin verir. Basılan jetonlar bu role sahip bir hizmet hesabı tarafından genellikle arka ucunuzdan kullanılır sunucular. |
Fleet Engine Teslim Filosu Okuyucu
roles/fleetengine.deliveryFleetReader |
Teslimat araçlarını ve görevlerini okuma ve izleme kimliği kullanarak yapmanız gerekenleri öğrenin. Bir hizmet hesabı tarafından bu komutla basılan jetonlar rolü genellikle bir teslimat filosu operatörünün web tarayıcısından kullanılır. |
Teslimat şoförlerine kurumsal BT departmanı, Fleet Engine'in sunduğu esneklikten yararlanabilir Güvenilir Sürücü Kullanıcısı rolü ve Fleet Engine'in bir kısmını veya tamamını entegre etmeyi seçme etkileşimlerine değer verir.
Kendi Cihazını Getir politikalarını destekleyen kuruluşlar, Fleet Engine Güvenilmeyen Sürücü Kullanıcısı rolünün güvenliğini sağlar ve yalnızca mobil uygulamayı kullanarak araç konumu güncellemelerini Fleet Engine'e gönderiyor. Diğer tüm ülkeler etkileşimlerin müşteri arka uç sunucularından kaynaklanması gerekir.
Sürücü ve Tüketici SDK'ları bu standart roller temel alınarak oluşturulmuştur. Ancak, özel roller oluşturabilirsiniz. izinlerin bir arada paket haline getirilmesine olanak tanır. Sürücü ve Tüketici SDK'ları, gerekli izin eksik. Bu nedenle, önemle özel roller yerine yukarıda sunulan standart rol grubunu kullanabilir.
Hizmet Hesabı oluşturma
IAM & Admin > Service Accounts
kullanarak bir hizmet hesabı oluşturabilirsiniz
sekmesinden erişebilirsiniz. Rol açılır listesinden
Fleet Engine'i tıklayıp rollerden birini hizmet hesabına atayın. Bu iyi
her bir rolle ilişkili hesabı belirtmek için alıştırma yapın.
Örneğin, hizmet hesabına anlamlı bir ad verin.
Kolaylık sağlaması açısından, güvenilir olmayan istemciler için JWT'leri basmanız gerekiyorsa Kullanıcıların Hizmet Hesabı Jeton Oluşturucu rolüne göre jetonları basmalarına olanak tanır. gcloud komut satırı araçlarını kullanın.
gcloud projects add-iam-policy-binding project-id \ --member=user:my-user@example.com \ --role=roles/iam.serviceAccountTokenCreator
my-user@example.com
nerede kullanılır?
kimliği gcloud (gcloud auth list
--format='value(account)'
) ile doğrulayın.
Fleet Engine Kimlik Doğrulama Kitaplığı
Fleet Engine, güvenilir olmayan Fleet Engine API'lerine erişimi kısıtlamak için JWT'leri kullanır ortam olarak da bilinir. Fleet Engine Auth Library, şurada kullanılabilir: GitHub, ve güvenli bir şekilde imzalar.
Kitaplık aşağıdaki avantajları sunar:
- Fleet Engine Jetonları oluşturma işlemini basitleştirir.
- Kimlik bilgisi dosyalarını kullanmak dışında jeton imzalama mekanizmaları sağlar (ör. bir hizmet hesabının kimliğine bürünme.)
Yetkilendirme için JSON Web Token (JWT) oluşturma
Fleet Engine Auth Kitaplığı kullanılmadığında, JWT'lerin doğrudan kod tabanınızda oluşturulur. Bu hem geniş kapsamlı ve Fleet Engine'le ilişkisini anlıyor. Bu nedenle Fleet Engine Auth Kitaplığı'ndan yararlanmanızı ÖNEMLE tavsiye ederiz.
Fleet Engine içinde JWT'ler, kısa ömürlü kimlik doğrulama sağlar ve cihazların yalnızca aşağıdaki işlemler için araçları veya görevleri değiştirebildiğinden emin olun: bu verilere erişebilir. JWT'ler bir başlık ve hak talebi bölümü içerir. Üstbilgi bölümünde kullanılacak özel anahtar (hizmet hesaplarından alınır) ve şifreleme algoritmasından faydalanırsınız. Hak talebi bölümünde, jetonun oluşturulma zamanı, jetonun geçerlilik süresi, jetonun erişimi talep etme ve diğer yetkilendirme bilgilerini edinin. erişim; Örneğin, teslimat aracının kimliği.JWT başlığı bölümü aşağıdaki alanları içerir:
Alan | Açıklama |
---|---|
alg |
Kullanılacak algoritma. "RS256". |
typ |
Jetonun türü. "JWT". |
kid |
Hizmet hesabınızın özel anahtar kimliği. Bu değeri hizmet hesabı JSON dosyanızın "private_key_id" alanında. Doğru izin düzeyine sahip bir hizmet hesabından anahtar kullandığınızdan emin olun. |
JWT hak talepleri bölümü aşağıdaki alanları içerir:
Alan | Açıklama |
---|---|
iss |
Hizmet hesabınızın e-posta adresi. |
sub |
Hizmet hesabınızın e-posta adresi. |
aud |
Hizmet hesabınızın SERVICE_NAME hizmeti (bu örnekte https://fleetengine.googleapis.com/) |
iat |
Jetonun oluşturulduğu zamana ait zaman damgası (geçen saniye cinsinden belirtilir) 1 Ocak 1970'te 00:00:00'dan (UTC) beri. Eğiklik için 10 dakika bekleyin. Öğe veya gelecekte bir zaman damgası çok ilerideyse sunucu hata bildirebilir. |
exp |
Jetonun süresinin dolacağı zaman damgası (geçen saniye cinsinden belirtilir) 1 Ocak 1970'te 00:00:00'dan (UTC) beri. Zaman damgası daha uzun bir zaman aralığı için. |
authorization |
Kullanım alanına bağlı olarak "deliveryvehicleid", "trackingid", "taskid" veya "taskids". |
JWT jetonunu bastırmak, jetonu imzalama anlamına gelir. Talimatlar ve kod örnekleri için JWT'yi oluşturmak ve imzalamak için bkz. OAuth olmadan hizmet hesabını yetkilendirme. Daha sonra, basılmış bir jetonu gRPC çağrılarına veya kullanılan diğer yöntemlere ekleyebilirsiniz Fleet Engine'e erişmek için gereklidir.
JWT Hak Talepleri
Last Mile Fleet Solution, gizli hak taleplerini kullanır. Gizli hak taleplerini kullanmak yalnızca
kendi verilerine erişebilir. Örneğin, arka ucunuz
bir teslimat sürücüsünün mobil cihazı için bir JSON Web Jetonu yayınlarsa, bu jeton
söz konusu sürücünün teslimatının değerini içeren deliveryvehicleid
hak talebini içermelidir
araç kimliği. Ardından, sürücü rolüne bağlı olarak, jetonlar yalnızca
başka bir rastgele araç kimliğini değil, ilgili araç kimliğini iletmeniz gerekir.
Last Mile Fleet Solution, aşağıdaki gizli iddiaları kullanır:
deliveryvehicleid
: Teslimat başına araç başına API'leri çağırırken kullanın.taskid
- görev başına API'leri çağırırken kullanın.taskids
-BatchCreateTasksAPI
aranırken kullanın. Bu hak talebi, içerebilir ve dizi, tablodaki adımların uygulanması için isteği tamamlayabilirsiniz.delivervehicleid
,trackingid
veyataskid
hak talebi.trackingid
-GetTaskTrackingInfoAPI
çağrılırken kullanın. Hak talebi, istekteki izleme kimliğiyle eşleştiğinden emin olun.delivervehicleid
eklemeyin,taskid
veyataskids
hak talebi.
Jeton, API'leri çağırırken uygun hak talebini de içermelidir.
kullanabilirsiniz, ancak bunun yerine yıldız işareti veya
deliveryvehicleid
, taskid
ve trackingid
hak talepleri için ("*") Yıldız işareti
("*"), taskids
hak talebinde de kullanılabilir ancak tek öğe olmalıdır
değeri gösterilir.
Bir JSON dosyasını yalnızca jeton sahibi olarak oluşturmak ve imzalamak yerine OAuth 2.0 erişim jetonlarını kullanıyorsanız OAuth olmadan hizmet hesabını yetkilendirme başlıklı makaleyi inceleyin.
Jetonu gRPC çağrısına ekleme mekanizması dile bağlıdır kullanılan çerçevedir. Jeton belirtme mekanizması eklemek, hamiline ait jeton içeren bir Yetkilendirme başlığı eklemektir. (ilgili kişi için yetkilendirme notlarında belirtildiği gibi) değeri jeton olan kargo takibi veya filo performansı örnekler üzerinden görüntüleyebilirsiniz.
Aşağıdaki örnekte, arka uç sunucusu:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"taskid": "*"
}
}
Aşağıdaki örnekte, arka uç sunucusu:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"taskids": ["*"]
}
}
Aşağıdaki örnekte, arka uç sunucunuz:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "*"
}
}
Aşağıdaki örnekte son kullanıcı müşteriler için bir jeton gösterilmektedir:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"trackingid": "shipment_12345"
}
}
Aşağıdaki örnekte sürücü uygulamanız için bir jeton gösterilmektedir:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "driver_12345"
}
}
- Başlıktaki
kid
alanı için hizmet hesabınızın gizli ayarını belirtin anahtar kimliği. Bu değeri sayfanızınprivate_key_id
alanında bulabilirsiniz. hizmet hesabı JSON dosyası. iss
vesub
alanları için hizmet hesabınızın e-posta adresini belirtin. Bu değeri, hizmet hesabınızınclient_email
alanında bulabilirsiniz. JSON dosyası.aud
alanı için https://SERVICE_NAME/ değerini belirtin.iat
alanı için jetonun oluşturulduğu zaman damgasını belirtin. 1 Ocak 1970, 00:00:00 UTC'den itibaren geçen saniye cinsinden süre. 10 dakika bekleyin yardımcı olabilir. Zaman damgası çok geçmişte veya gelecekte ise sunucu bir hata bildirebilir.exp
alanı için jetonun süresinin dolacağı zaman damgasını belirtin. 1 Ocak 1970 00:00:00 UTC'den itibaren saniye cinsinden. Önerilen değeriat
+ 3.600.
Bir mobil cihaza veya son kullanıcıya iletilecek jetonu imzalarken teslim Sürücüsü veya Tüketici rolü için kimlik bilgisi dosyasını kullanın. Aksi halde mobil cihaz veya son kullanıcı, değişiklik yapma veya görüntüleme kolay bir şey ifade etmemelidir.