Ověřování požadavků SERVICE Fabric REST
Cluster Service Fabric je možné zabezpečit pomocí certifikátů X.509, protokolu Kerberos nebo kombinace certifikátů X.509 a protokolu Kerberos. Tento článek popisuje:
Postup úprav manifestu clusteru tak, aby koncové body HttpGateway (koncový bod REST) byly v souladu s konkrétním řešením zabezpečení.
Jak upravit volání REST tak, aby fungovala s jednotlivými řešeními (X.509, Kerberos nebo X.509 s protokolem Kerberos)
Brána HTTP se zabezpečením X.509
V Azure i v místním prostředí podporují koncové body REST Service Fabric použití certifikátů X.509 pro:
Ověřování a autorizace klientů: Service Fabric je možné nakonfigurovat tak, aby v závislosti na certifikátech poskytoval přístup uživatelů, přístup správce nebo žádný přístup ke klientovi REST.
Ověřování uzlů Service Fabric: Klienti REST můžou ověřit, že komunikují s jedním ze správných uzlů Service Fabric.
Šifrování zpráv (požadavky REST a odpovědi)
Poznámka
Klienti s uživatelským přístupem mají oprávnění pouze pro žádosti o čtení (například https://localhost:19007/Nodes?api-version=6.0
). Klienti s přístupem správce mají oprávnění k žádostem o čtení a zápisu (například https://localhost:19007/Nodes/<NodeName>/$/Deactivate?api-version=6.0
).
Změny manifestu clusteru
V této části se předpokládá, že už máte manifest clusteru nakonfigurovaný tak, aby používal certifikáty X.509. Další informace najdete v tématu Zabezpečení clusteru pomocí certifikátů X.509.
Pokud chcete nakonfigurovat cluster tak, aby podporoval ověřování a autorizaci klientů (uživatel a Správa) a ověřování uzlů Service Fabric, musí být v manifestu clusteru nastavené následující parametry:
Kryptografický otisk serverových a klientských certifikátů pro každý typ uzlu
<ClientCertificate X509FindValue="..." />
<ServerCertificate X509FindValue="..." />
Část Zabezpečení
<Název parametru="ClientRoleEnabled" Value="true" />
<Název parametru="ServerAuthCredentialType" Value="X509" />
Parametr ClientAuthAllowedCommonNames
Parametr AdminAllowedCommonNames
Parametr ServerAuthAllowedCommonNames
Pokud chcete povolit HttpGateway v manifestu clusteru, který už je zabezpečený pomocí X.509 (to znamená, že zabezpečení clusteru a klienta/serveru je už povolené), vyžadují se jenom tyto změny:
Nastavte protokol všech elementů HttpGatewayEndpoint na https. Například <HttpGatewayEndpoint Port="19017" Protocol="https"/>
V části HttpGateway povolte HttpGateway. Příklad: Název parametru <="IsEnabled" Value="true"/>
Jak používat rozhraní REST API s X.509
V případě požadavku HTTPS zabezpečeného X.509 vytvořte příslušný klientský certifikát (jehož běžný název je zadaný v polích ClientAuthAllowedCommonNames nebo AdminAllowedCommonNames) a kryptografický otisk certifikátu serveru.
U koncového bodu HTTP zabezpečeného X.509 se rozhraní REST API nemění. Adresy URL, hlavičky HTTP, požadavky a odpovědi volání REST se nezmění.
Brána HTTP se zabezpečením protokolu Kerberos (nebo NTLM)
V místním prostředí můžou clustery Service Fabric používat protokoly Kerberos a NTLM k ověřování a autorizaci klientů uživatelů a správců a také k ověřování serverů (uzlů Service Fabric). K šifrování zpráv však nelze použít protokol Kerberos nebo NTLM.
Poznámka
Při použití protokolu Kerberos doporučujeme používat protokol HTTPS a zajistit, aby manifest clusteru zahrnoval certifikáty serveru.
Důrazně doporučujeme, aby zákazníci, kteří používají zabezpečení Kerberos, používali také PROTOKOL HTTPS. To znamená, že cluster musí mít certifikáty serveru X.509. Tímto způsobem se certifikáty serveru použijí k šifrování komunikace.
Hlavní výhodou použití ověřování protokolem Kerberos místo certifikátů X.509 pro klienty je, že protokol Kerberos zjednodušuje správu klientských certifikátů.
Service Fabric umožňuje ověřování klientů pomocí protokolu NTLM místo protokolu Kerberos. Společnost Microsoft nedoporučuje používat protokol NTLM. Další informace najdete v tématu Aspekty zabezpečení pro implementátory.
Pokud je to možné, používejte místo protokolu NTLM protokol Kerberos.
Změny manifestu clusteru
V této části se předpokládá, že již máte manifest clusteru nakonfigurovaný tak, aby používal protokol Kerberos pro ověřování klientů a certifikáty X.509 pro ověřování a šifrování serveru. Další informace najdete v tématu Zabezpečení clusteru pomocí Zabezpečení Windows.
Jak používat rozhraní REST API s protokolem Kerberos
Rozhraní REST API se při komunikaci s clusterem s podporou protokolu Kerberos pomocí rozhraní REST API nemění. Adresy URL, hlavičky HTTP, požadavky a odpovědi volání REST se nezmění.
Budete ale muset postupovat podle standardního procesu ověřování protokolem Kerberos a NTLM HTTP.
Poznámky:
Většina klientů HTTP tento proces automaticky provádí.
Pokud je známo, že server je zabezpečený protokolem Kerberos/NTLM, můžete začít krokem 3 v následujícím procesu. Tím se odebere jeden segment směrování sítě.
REST s procesem ověřování kerberos
Následuje příklad posloupnosti procesu ověřování protokolem Kerberos s využitím REST.
Volání rozhraní REST API bez dalších hlaviček HTTP:
GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1 User-Agent: Fiddler Host: localhost:19007
Protokol Kerberos umožňuje clusteru odpovědět zpět s chybou 401 Neautorizováno a hlavičku www-authenticate nastaví na Negotiate:
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
Klient teď potřebuje získat token kontaktováním služby AD (federované nebo vzájemné) s hlavním názvem služby (SPN) služby.
Hlavní název služby je HTTP\FQDN kontaktovaného uzlu Service Fabric.
Token vrácený službou AD by se měl použít v autorizační hlavičce ve formátu Token Negotiate<>.
GET http://localhost:19007/Nodes?api-version=6.0 HTTP/1.1 User-Agent: Fiddler Host: localhost:19007 Authorization: Negotiate YH8GBisG<…>CSqGSIb3EgECAgYKKwYBBAGCNwICHqI/BD1OVE<…>RNT05E
Server token ověří, a pokud má klient oprávnění k dokončení operace, spustí požadavek.
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"}}]