Güvenli bir kümeye bağlanma
İstemci bir Service Fabric küme düğümüne bağlandığında, istemcinin kimliği doğrulanabilir ve sertifika güvenliği veya Microsoft Entra Kimliği kullanılarak güvenli iletişim kurulabilir. Bu kimlik doğrulaması yalnızca yetkili kullanıcıların kümeye ve dağıtılan uygulamalara erişmesini ve yönetim görevlerini gerçekleştirmesini sağlar. Sertifika veya Microsoft Entra güvenliği, küme oluşturulduğunda kümede daha önce etkinleştirilmiş olmalıdır. Küme güvenliği senaryoları hakkında daha fazla bilgi için bkz . Küme güvenliği. Sertifikalarla güvenliği sağlanan bir kümeye bağlanıyorsanız, istemci sertifikasını kümeye bağlanan bilgisayarda ayarlayın.
Azure Service Fabric CLI (sfctl) kullanarak güvenli bir kümeye bağlanma
Service Fabric CLI(sfctl) kullanarak güvenli bir kümeye bağlanmanın birkaç farklı yolu vardır. Kimlik doğrulaması için bir istemci sertifikası kullanıyorsanız sertifika bilgilerinin küme düğümlerine dağıtılmış olan bir sertifikayla eşleşmesi gerekir. Sertifikanızda Sertifika Yetkilileri (CA) varsa, güvenilen CA'ları da belirtmeniz gerekir.
komutunu kullanarak bir kümeye sfctl cluster select
bağlanabilirsiniz.
İstemci sertifikaları sertifika ve anahtar çifti veya tek bir PFX dosyası olarak iki farklı şekilde belirtilebilir. Parola korumalı PEM dosyaları için parolayı girmeniz otomatik olarak istenir. İstemci sertifikasını PFX dosyası olarak aldıysanız, önce aşağıdaki komutu kullanarak PFX dosyasını bir PEM dosyasına dönüştürün.
openssl pkcs12 -in your-cert-file.pfx -out your-cert-file.pem -nodes -passin pass:your-pfx-password
.pfx dosyanız parola korumalı değilse, son parametre için -passin pass: kullanın.
İstemci sertifikasını pem dosyası olarak belirtmek için bağımsız değişkende --pem
dosya yolunu belirtin. Örneğin:
sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem
Parola korumalı pem dosyaları, herhangi bir komutu çalıştırmadan önce parola ister.
Bir sertifika belirtmek için anahtar çifti, ilgili her dosyanın dosya yollarını belirtmek için ve --key
bağımsız değişkenlerini kullanır--cert
.
sfctl cluster select --endpoint https://testsecurecluster.com:19080 --cert ./client.crt --key ./keyfile.key
Bazen test veya geliştirme kümelerinin güvenliğini sağlamak için kullanılan sertifikalar sertifika doğrulamasında başarısız olur. Sertifika doğrulamasını --no-verify
atlamak için seçeneğini belirtin. Örneğin:
Uyarı
Üretim Service Fabric kümelerine bağlanırken seçeneğini kullanmayın no-verify
.
sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem --no-verify
Ayrıca, güvenilen CA sertifikalarının dizinlerinin yollarını veya tek tek sertifikaları belirtebilirsiniz. Bu yolları belirtmek için bağımsız değişkenini --ca
kullanın. Örneğin:
sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem --ca ./trusted_ca
Bağlandıktan sonra, kümeyle etkileşim kurmak için diğer sfctl komutlarını çalıştırabilmeniz gerekir.
PowerShell kullanarak kümeye bağlanma
PowerShell aracılığıyla bir kümede işlem gerçekleştirmeden önce, önce kümeye bir bağlantı oluşturun. Küme bağlantısı, verilen PowerShell oturumunda sonraki tüm komutlar için kullanılır.
Güvenli olmayan bir kümeye bağlanma
Güvenli olmayan bir kümeye bağlanmak için Connect-ServiceFabricCluster komutuna küme uç noktası adresini sağlayın:
Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000
Microsoft Entra Id kullanarak güvenli bir kümeye bağlanma
Küme yöneticisi erişimini yetkilendirmek için Microsoft Entra Id kullanan güvenli bir kümeye bağlanmak için küme sertifikası parmak izini sağlayın ve AzureActiveDirectory bayrağını kullanın.
Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
-ServerCertThumbprint <Server Certificate Thumbprint> `
-AzureActiveDirectory
İstemci sertifikası kullanarak güvenli bir kümeye bağlanma
Yönetici erişimini yetkilendirmek için istemci sertifikalarını kullanan güvenli bir kümeye bağlanmak için aşağıdaki PowerShell komutunu çalıştırın.
Sertifika ortak adını kullanarak bağlanma
Küme sertifikası ortak adını ve küme yönetimi için izin verilen istemci sertifikasının ortak adını belirtin. Sertifika ayrıntıları, küme düğümlerindeki bir sertifikayla eşleşmelidir.
Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
-X509Credential `
-ServerCommonName <certificate common name> `
-FindType FindBySubjectName `
-FindValue <certificate common name> `
-StoreLocation CurrentUser `
-StoreName My
ServerCommonName , küme düğümlerine yüklenen sunucu sertifikasının ortak adıdır. FindValue , yönetici istemci sertifikasının ortak adıdır. Parametreler doldurulduğunda, komut aşağıdaki örneğe benzer:
$ClusterName= "sf-commonnametest-scus.southcentralus.cloudapp.azure.com:19000"
$certCN = "sfrpe2eetest.southcentralus.cloudapp.azure.com"
Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
-X509Credential `
-ServerCommonName $certCN `
-FindType FindBySubjectName `
-FindValue $certCN `
-StoreLocation CurrentUser `
-StoreName My
Sertifika parmak izi kullanarak bağlanma
Küme yönetimi için izin verilen istemci sertifikasının parmak izini ve küme sertifikası parmak izini sağlayın. Sertifika ayrıntıları, küme düğümlerindeki bir sertifikayla eşleşmelidir.
Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
-KeepAliveIntervalInSec 10 `
-X509Credential -ServerCertThumbprint <Certificate Thumbprint> `
-FindType FindByThumbprint -FindValue <Certificate Thumbprint> `
-StoreLocation CurrentUser -StoreName My
ServerCertThumbprint , küme düğümlerine yüklenen sunucu sertifikasının parmak izidir. FindValue , yönetici istemci sertifikasının parmak izidir. Parametreler doldurulduğunda, komut aşağıdaki örneğe benzer:
Connect-ServiceFabricCluster -ConnectionEndpoint clustername.westus.cloudapp.azure.com:19000 `
-KeepAliveIntervalInSec 10 `
-X509Credential -ServerCertThumbprint A8136758F4AB8962AF2BF3F27921BE1DF67F4326 `
-FindType FindByThumbprint -FindValue 71DE04467C9ED0544D021098BCD44C71E183414E `
-StoreLocation CurrentUser -StoreName My
Windows Active Directory kullanarak güvenli bir kümeye bağlanma
Tek başına kümeniz AD güvenliği kullanılarak dağıtılıyorsa, "WindowsCredential" anahtarını ekleyerek kümeye bağlanın.
Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
-WindowsCredential
FabricClient API'lerini kullanarak kümeye bağlanma
Service Fabric SDK'sı , küme yönetimi için FabricClient sınıfını sağlar. FabricClient API'lerini kullanmak için Microsoft.ServiceFabric NuGet paketini alın.
Güvenli olmayan bir kümeye bağlanma
Güvenli olmayan uzak bir kümeye bağlanmak için bir FabricClient örneği oluşturun ve küme adresini sağlayın:
FabricClient fabricClient = new FabricClient("clustername.westus.cloudapp.azure.com:19000");
Örneğin, bir kümenin içinden çalışan kod için, bir Reliable Service'te, küme adresini belirtmeden bir FabricClient oluşturun. FabricClient, kodun çalışmakta olduğu düğümdeki yerel yönetim ağ geçidine bağlanır ve ek bir ağ atlamasından kaçınılır.
FabricClient fabricClient = new FabricClient();
İstemci sertifikası kullanarak güvenli bir kümeye bağlanma
Kümedeki düğümlerin, Ortak adı veya SAN'daki DNS adı FabricClient'da ayarlanan RemoteCommonNames özelliğinde görünen geçerli sertifikalara sahip olmalıdır. Bu işlemin ardından istemci ile küme düğümleri arasında karşılıklı kimlik doğrulaması sağlanır.
using System.Fabric;
using System.Security.Cryptography.X509Certificates;
string clientCertThumb = "71DE04467C9ED0544D021098BCD44C71E183414E";
string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string CommonName = "www.clustername.westus.azure.com";
string connection = "clustername.westus.cloudapp.azure.com:19000";
var xc = GetCredentials(clientCertThumb, serverCertThumb, CommonName);
var fc = new FabricClient(xc, connection);
try
{
var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
Console.WriteLine("Connect failed: {0}", e.Message);
}
static X509Credentials GetCredentials(string clientCertThumb, string serverCertThumb, string name)
{
X509Credentials xc = new X509Credentials();
xc.StoreLocation = StoreLocation.CurrentUser;
xc.StoreName = "My";
xc.FindType = X509FindType.FindByThumbprint;
xc.FindValue = clientCertThumb;
xc.RemoteCommonNames.Add(name);
xc.RemoteCertThumbprints.Add(serverCertThumb);
xc.ProtectionLevel = ProtectionLevel.EncryptAndSign;
return xc;
}
Microsoft Entra Id kullanarak etkileşimli olarak güvenli bir kümeye bağlanma
Aşağıdaki örnek, istemci kimliği için Microsoft Entra Id ve sunucu kimliği için sunucu sertifikası kullanır.
Kümeye bağlandıktan sonra etkileşimli oturum açma için otomatik olarak bir iletişim kutusu penceresi açılır.
string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";
var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);
var fc = new FabricClient(claimsCredentials, connection);
try
{
var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
Console.WriteLine("Connect failed: {0}", e.Message);
}
Microsoft Entra Id kullanarak etkileşimli olmayan güvenli bir kümeye bağlanma
Aşağıdaki örnek Microsoft.Identity.Client, Sürüm: 4.37.0'ı kullanır.
Microsoft Entra belirteci alma hakkında daha fazla bilgi için bkz . Microsoft.Identity.Client.
string tenantId = "C15CFCEA-02C1-40DC-8466-FBD0EE0B05D2";
string clientApplicationId = "118473C2-7619-46E3-A8E4-6DA8D5F56E12";
string webApplicationId = "53E6948C-0897-4DA6-B26A-EE2A38A690B4";
string[] scopes = new string[] { "user.read" };
var pca = PublicClientApplicationBuilder.Create(clientApplicationId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithRedirectUri("urn:ietf:wg:oauth:2.0:oob")
.Build();
var accounts = await pca.GetAccountsAsync();
var result = await pca.AcquireTokenInteractive(scopes)
.WithAccount(accounts.FirstOrDefault())
.ExecuteAsync();
string token = result.AccessToken;
string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";
var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);
claimsCredentials.LocalClaims = token;
var fc = new FabricClient(claimsCredentials, connection);
try
{
var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
Console.WriteLine("Connect failed: {0}", e.Message);
}
Microsoft Entra Id kullanarak önceden meta veri bilgisi olmadan güvenli bir kümeye bağlanma
Aşağıdaki örnekte etkileşimli olmayan belirteç alımı kullanılmaktadır, ancak özel bir etkileşimli belirteç alma deneyimi oluşturmak için de aynı yaklaşım kullanılabilir. Belirteç alımı için gereken Microsoft Entra meta verileri küme yapılandırmasından okunur.
string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";
var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);
var fc = new FabricClient(claimsCredentials, connection);
fc.ClaimsRetrieval += async (o, e) =>
{
var accounts = await PublicClientApplicationBuilder
.Create("<client_id>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<tenant_id>")
.WithRedirectUri("<redirect_uri>")
.Build()
.GetAccountsAsync();
var result = await PublicClientApplicationBuilder
.Create("<client_id>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<tenant_id>")
.WithRedirectUri("<redirect_uri>")
.Build()
.AcquireTokenInteractive(new[] { "<scope>" })
.WithAccount(accounts.FirstOrDefault())
.ExecuteAsync();
return result.AccessToken;
};
try
{
var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
Console.WriteLine("Connect failed: {0}", e.Message);
}
Service Fabric Explorer'ı kullanarak güvenli bir kümeye bağlanma
Belirli bir küme için Service Fabric Explorer'a ulaşmak için tarayıcınızın üzerine gelin:
http://<your-cluster-endpoint>:19080/Explorer
Tam URL, Azure portalının küme temel parçalar bölmesinde de kullanılabilir.
Tarayıcı kullanarak Windows veya OS X'te güvenli bir kümeye bağlanmak için istemci sertifikasını içeri aktarabilirsiniz ve tarayıcı, kümeye bağlanmak için kullanılacak sertifikayı ister. Linux makinelerinde, sertifikanın gelişmiş tarayıcı ayarları kullanılarak içeri aktarılması (her tarayıcının farklı mekanizmaları vardır) ve disk üzerindeki sertifika konumuna işaret edilmesi gerekir. Daha fazla bilgi için bkz . İstemci sertifikası ayarlama.
Microsoft Entra Id kullanarak güvenli bir kümeye bağlanma
Microsoft Entra Id ile güvenliği sağlanan bir kümeye bağlanmak için tarayıcınızı şu noktaya işaret edin:
https://<your-cluster-endpoint>:19080/Explorer
Otomatik olarak Microsoft Entra Id ile oturum açmanız istenir.
İstemci sertifikası kullanarak güvenli bir kümeye bağlanma
Sertifikalarla güvenliği sağlanan bir kümeye bağlanmak için tarayıcınızı şu noktaya getirin:
https://<your-cluster-endpoint>:19080/Explorer
Otomatik olarak bir istemci sertifikası seçmeniz istenir.
Uzak bilgisayarda istemci sertifikası ayarlama
Kümenin güvenliğini sağlamak için biri küme ve sunucu sertifikası, diğeri de istemci erişimi için olmak üzere en az iki sertifika kullanılmalıdır. Ek ikincil sertifikalar ve istemci erişim sertifikaları da kullanmanızı öneririz. Sertifika güvenliğini kullanarak bir istemci ile küme düğümü arasındaki iletişimin güvenliğini sağlamak için önce istemci sertifikasını edinmeniz ve yüklemeniz gerekir. Sertifika, yerel bilgisayarın veya geçerli kullanıcının Kişisel (My) deposuna yüklenebilir. İstemcinin kümenin kimliğini doğru edebilmesi için sunucu sertifikasının parmak izine de ihtiyacınız vardır.
Windows üzerinde: PFX dosyasına çift tıklayın ve
Certificates - Current User\Personal\Certificates
dizinindeki kişisel deponuza sertifikayı yüklemek için istemleri izleyin. Alternatif olarak, PowerShell komutunu kullanabilirsiniz:Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My ` -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx ` -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
Otomatik olarak imzalanan bir sertifikaysa, güvenli bir kümeye bağlanmak için bu sertifikayı kullanabilmeniz için önce bu sertifikayı makinenizin "güvenilen kişiler" deposuna aktarmanız gerekir.
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople ` -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx ` -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
Mac üzerinde: PFX dosyasına çift tıklayın ve Anahtarlığınıza sertifikayı yüklemek için istemleri izleyin.