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.

Sonraki adımlar