Aracılığıyla paylaş


Service Fabric REST İsteklerinin Kimliğini Doğrulama

Service Fabric kümesi X.509 sertifikaları, Kerberos veya X.509 sertifikaları ile Kerberos birleşimi kullanılarak güvenli hale getirilebilir. Bu makalede şunlar açıklanmaktadır:

  • HttpGatewayEndpoints'in (REST uç noktası) belirli bir güvenlik çözümüne uymasını sağlamak için küme bildirimini düzenleme.

  • Rest çağrılarını her çözümle çalışacak şekilde değiştirme (Kerberos ile X.509, Kerberos veya X.509).

X.509 Güvenliği ile Http Ağ Geçidi

Azure'da ve şirket içinde, Service Fabric'in REST uç noktaları aşağıdakiler için X.509 sertifikalarını kullanmayı destekler:

  1. İstemcilerin kimlik doğrulaması ve yetkilendirmesi: Service Fabric, sertifikalara bağlı olarak kullanıcıya erişim, yönetici erişimi verecek veya REST istemcisine erişim vermeyecek şekilde yapılandırılabilir.

  2. Service Fabric düğümlerinin kimlik doğrulaması: REST istemcileri doğru Service Fabric düğümlerinden biriyle iletişim kurduğunu doğrulayabilir.

  3. İletilerin şifrelenmesi (REST istekleri ve yanıtları).

Not

Kullanıcı erişimi olan istemciler yalnızca okuma istekleri için izinlere sahiptir (örneğin, https://localhost:19007/Nodes?api-version=6.0). Yönetici erişimi olan istemcilerin okuma istekleri ve yazma istekleri için izni vardır (yazma isteği örneği, https://localhost:19007/Nodes/<NodeName>/$/Deactivate?api-version=6.0).

Küme Bildirimi Değişiklikleri

Bu bölümde, X.509 sertifikalarını kullanmak üzere yapılandırılmış bir küme bildiriminiz olduğu varsayılır. Daha fazla bilgi edinmek için bkz. X.509 Sertifikalarını Kullanarak Kümenin Güvenliğini Sağlama.

Bir kümeyi istemcilerin kimlik doğrulamasını ve yetkilendirmesini (Kullanıcı ve Yönetici) ve Service Fabric düğümlerinin kimlik doğrulamasını destekleyecek şekilde yapılandırmak için küme bildiriminde aşağıdaki parametrelerin ayarlanması gerekir:

  • Her düğüm türü için sunucu ve istemci sertifikalarının parmak izi

    • <ClientCertificate X509FindValue="..." />

    • <ServerCertificate X509FindValue="..." />

  • Güvenlik bölümü

    • <Parametre Adı="ClientRoleEnabled" Value="true" />

    • <Parametre Adı="ServerAuthCredentialType" Value="X509" />

    • ClientAuthAllowedCommonNames parametresi

    • AdminAllowedCommonNames parametresi

    • ServerAuthAllowedCommonNames parametresi

X.509 ile zaten güvenli olan bir küme bildiriminde HttpGateway'i etkinleştirmek için (yani, küme ve istemci/sunucu güvenliği zaten etkindir), yalnızca şu değişiklikler gereklidir:

  • Tüm HttpGatewayEndpoint öğelerinin Protokolünü "https" olarak ayarlayın. Örneğin, <HttpGatewayEndpoint Port="19017" Protocol="https"/>

  • HttpGateway bölümünde HttpGateway'i etkinleştirin. Örneğin, <Parametre Adı="IsEnabled" Value="true"/>

X.509 ile REST API'leri Kullanma

X.509 güvenli HTTPS İsteği için, ilgili istemci sertifikasını (ortak adı ClientAuthAllowedCommonNames veya AdminAllowedCommonNames içinde belirtilmiştir) ve sunucu sertifikası parmak izini oluşturun.

X.509 güvenli HTTP uç noktası için REST API'leri değişmez. REST çağrısının URL'leri, HTTP Üst Bilgileri, İstek ve Yanıt Gövdeleri değiştirilmez.

Kerberos (veya NTLM) Güvenliği olan Http Ağ Geçidi

Şirket içi Service Fabric kümeleri, kullanıcı ve yönetici istemcilerinin kimliğini doğrulamak ve yetkilendirmenin yanı sıra sunucuların (Service Fabric düğümleri) kimlik doğrulamasını yapmak için Kerberos ve NTLM kullanabilir. Ancak, iletileri şifrelemek için Kerberos veya NTLM kullanılamaz.

Not

Kerberos kullanılırken küme bildiriminin sunucu sertifikaları içerdiğinden emin olmak için HTTPS kullanılması önerilir.

Https kullanmak için Kerberos güvenliği kullanan müşterilerin de bunu kullanmasını kesinlikle öneririz. Bu, kümenin X.509 sunucu sertifikalarına sahip olması gerektiği anlamına gelir. Bu şekilde, sunucu sertifikaları iletişimi şifrelemek için kullanılır.

İstemciler için X.509 sertifikaları yerine Kerberos kimlik doğrulamasını kullanmanın birincil avantajı, Kerberos'un istemci sertifika yönetimini basitleştirmesidir.

Service Fabric, istemcilerin Kimliğinin Kerberos yerine NTLM aracılığıyla doğrulanmasına olanak tanır. Microsoft, NTLM kullanılmasını önermez. Daha fazla bilgi için bkz. Uygulayıcılar için Güvenlik Konuları.

Mümkün olduğunda NTLM yerine Kerberos kullanın.

Küme Bildirimi Değişiklikleri

Bu bölümde, istemci kimlik doğrulaması için Kerberos ve sunucu kimlik doğrulaması ve şifreleme için X.509 sertifikalarını kullanmak üzere yapılandırılmış bir küme bildiriminiz olduğu varsayılır. Daha fazla bilgi edinmek için bkz. Windows Güvenliği Kullanarak Küme güvenliğini sağlama.

REST API'lerini Kerberos ile Kullanma

REST API'leri, Kerberos özellikli bir kümeyle iletişim kurmak için REST API'leri kullanılırken değişmez. REST çağrısının URL'leri, HTTP Üst Bilgileri, İstek ve Yanıt Gövdeleri değiştirilmez.

Ancak, standart Kerberos ve NTLM HTTP Kimlik Doğrulama işlemini izlemeniz gerekir.

Şunlara dikkat edin:

  • ÇOĞU HTTP istemcisi bu işlemi otomatik olarak izler.

  • Sunucunun Kerberos/NTLM ile güvenli olduğu biliniyorsa, aşağıdaki işlemde 3. adımda bir sunucu başlatılabilir. Bu işlem bir ağ atlamasını kaldırır.

Kerberos Kimlik Doğrulama İşlemi ile REST

Aşağıda REST kullanan bir Kerberos kimlik doğrulama işleminin örnek dizisi verilmiştir.

  1. Ek HTTP üst bilgileri olmadan REST API çağrısı yapın:

    GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1  
    User-Agent: Fiddler  
    Host: localhost:19007  
    
    
  2. Kerberos, kümenin 401 Yetkisiz yanıt vermesini ve www-authenticate üst bilgisini "Negotiate" olarak ayarlamasını sağlar:

    HTTP/1.1 401 Unauthorized  
    Server: Microsoft-HTTPAPI/2.0  
    WWW-Authenticate: Negotiate  
    Date: Thu, 09 Jan 2014 08:20:55 GMT  
    Content-Length: 0  
    
    
  3. İstemcinin artık hizmetin SPN'siyle AD'sine (federasyon veya karşılıklı) başvurarak Belirteci alması gerekir.

    Hizmetin SPN'si, bağlantı kurulmakta olan Service Fabric düğümünün HTTP\FQDN'dir".

  4. AD tarafından döndürülen belirteç Yetkilendirme Üst Bilgisinde "Anlaşma <belirteci>" biçiminde kullanılmalıdır

    GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1  
    User-Agent: Fiddler  
    Host: localhost:19007  
    Authorization: Negotiate YH8GBisG<…>CSqGSIb3EgECAgYKKwYBBAGCNwICHqI/BD1OVE<…>RNT05E  
    
    
  5. Sunucu belirtecin kimliğini doğrular ve istemci işlemi tamamlama yetkisine sahipse isteği yürütmeye başlar.

    HTTP/1.1 200 OK  
    Content-Type: application/json; charset=utf-8  
    Server: Microsoft-HTTPAPI/2.0  
    Date: Thu, 09 Jan 2014 08:38:43 GMT  
    Content-Length: 1457  
    
    [{"Name":"Node4","IpAddressOrFQDN":"localhost","Type":"NodeType04","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":false,"UpgradeDomain":"MYUD1","FaultDomain":"fd:\/RACK2","Id":{"Id":"b5bd41bc26a079f4df3791b2b5d42e5"}},{"Name":"Node1","IpAddressOrFQDN":"localhost","Type":"NodeType01","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD1","FaultDomain":"fd:\/RACK1","Id":{"Id":"10152272d1e44a94356a41d96dc9b466"}},{"Name":"Node2","IpAddressOrFQDN":"localhost","Type":"NodeType02","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD2","FaultDomain":"fd:\/RACK2","Id":{"Id":"15091e9851978afe10f2f3ab37c1d2f0"}},{"Name":"Node5","IpAddressOrFQDN":"localhost","Type":"NodeType05","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":false,"UpgradeDomain":"MYUD2","FaultDomain":"fd:\/RACK1","Id":{"Id":"6e48b9c722325a66f805e2890bb7dd30"}},{"Name":"Node3","IpAddressOrFQDN":"localhost","Type":"NodeType03","CodeVersion":"2.0.283.0","ConfigVersion":"1.0","NodeStatus":1,"NodeUpTimeInSeconds":"4335",NodeDownTimeInSeconds":"0","HealthState":1,"IsSeedNode":true,"UpgradeDomain":"MYUD3","FaultDomain":"fd:\/RACK1","Id":{"Id":"880f1f5072c2c4805e9cb15ec710d083"}}]