Kimlik doğrulama ve yetkilendirme

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 imzalanan 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:

    1. Çağrı ana hesabı, uygun izinlere sahiptir ( ataması) belirtin.

    2. 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.

  1. Filo yöneticisi, hizmet hesaplarını oluşturur.

  2. Filo yöneticisi, hizmet hesaplarına belirli IAM rollerini atar.

  3. Filo yöneticisi, arka uçlarını hizmet hesaplarıyla yapılandırır ve Application Default Credentials (Uygulama Varsayılan Kimlik Bilgileri).

  4. İstemci uygulaması müşteri arka ucundan bir JWT ister. Talep sahibi, Sürücü uygulaması, Tüketici uygulaması veya izleme uygulaması olabilir.

  5. Müşterinin arka ucu, ilgili hizmet için bir JWT imzalayıp düzenler hesap. İstemci uygulaması JWT'yi alır.

  6. İ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.

Kimlik doğrulama sırası şeması

Bulut projesi kurulumu

Bulut projenizi kurmak için önce projenizi, ardından hizmet hesapları oluşturabilir.

Google Cloud projenizi oluşturmak için:

  1. Google Cloud Console'u kullanarak bir Google Cloud projesi oluşturun.
  2. 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:

RolAçı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).
Fleet Engine Delivery Süper Kullanıcısı **(KULLANIMDAN KALDIRILDI)**

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, şunları önemle öneririz: ö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 kendi kod tabanınızda kolayca oluşturabilirsiniz. Bu hem geniş kapsamlı ve Fleet Engine'le ilişkisini anlıyor. Bu nedenle Fleet Engine Auth Library'den 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ında yer alır. 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:

AlanAçı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:

AlanAçı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 veya taskid 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 veya taskids 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ın private_key_id alanında bulabilirsiniz. hizmet hesabı JSON dosyası.
  • iss ve sub alanları için hizmet hesabınızın e-posta adresini belirtin. Bu değeri, hizmet hesabınızın client_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ğer iat + 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.