Güvenli bir kümeye bağlanma

İstemci bir Service Fabric küme düğümüne bağlanırsa, istemci kimlik doğrulaması yapılabilir ve sertifika güvenliği veya Azure Active Directory (AAD) kullanılarak kurulan güvenli iletişim olabilir. Bu kimlik doğrulaması, kümeye ve dağıtılan uygulamalara yalnızca yetkili kullanıcıların erişip yönetim görevlerini gerçekleştirebilmesini sağlar. Küme oluşturulduğunda, sertifika veya AAD güvenliğinin kümede daha önce etkinleştirilmiş olması gerekir. Küme güvenliği senaryoları hakkında daha fazla bilgi için bkz. küme güvenliği. Sertifikalarla güvenliği sağlanmış bir kümeye bağlanıyorsanız, kümeye bağlanan bilgisayarda istemci sertifikasını ayarlayın .

Azure Service Fabric CLı (sfctl) kullanarak güvenli bir kümeye bağlanma

Service Fabric CLı (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ızın sertifika yetkilileri (CA) varsa, güvenilen CA 'Ları da belirtmeniz gerekir.

Komutunu kullanarak bir kümeye bağlanabilirsiniz sfctl cluster select .

İstemci sertifikaları, sertifika ve anahtar çifti olarak ya da tek bir PFX dosyası olarak iki farklı Fashions içinde belirtilebilir. Parola korumalı ped dosyaları için otomatik olarak parolayı girmeniz istenir. İstemci sertifikasını bir PFX dosyası olarak aldıysanız, önce aşağıdaki komutu kullanarak PFX dosyasını bir PEı 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ı bir pek dosyası olarak belirtmek için, bağımsız değişkeninde dosya yolunu belirtin --pem . Örnek:

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem

Parola korumalı ped dosyaları, herhangi bir komut çalıştırılmadan önce parola ister.

Bir sertifika belirtmek için, anahtar çifti --cert --key her ilgili dosyanın dosya yollarını belirtmek için ve bağımsız değişkenlerini kullanın.

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ın sertifika doğrulaması başarısız olur. Sertifika doğrulamayı atlamak için, seçeneğini belirtin --no-verify . Örnek:

Uyarı

no-verifyÜretim Service Fabric kümelerine bağlanırken seçeneğini kullanmayın.

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem --no-verify

Ayrıca, güvenilir CA sertifikaları veya ayrı sertifikalar için yollar belirtebilirsiniz. Bu yolları belirtmek için --ca bağımsız değişkenini kullanın. Örnek:

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ırabilmelisiniz .

PowerShell kullanarak bir kümeye bağlanma

PowerShell aracılığıyla bir küme üzerinde işlem gerçekleştirmeden önce, önce kümeye bir bağlantı kurun. Küme bağlantısı, belirtilen 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 

Azure Active Directory kullanarak güvenli bir kümeye bağlanma

Küme Yöneticisi erişimini yetkilendirmek için Azure Active Directory 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ı 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ğlan

Küme yönetimi için izin verilen istemci sertifikasının ortak adını ve ortak adını sağlayın. Sertifika ayrıntılarının küme düğümlerindeki bir sertifikayla eşleşmesi gerekir.

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üğümlerinde yüklü olan 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 şekilde görünür:

$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 izini kullanarak bağlan

Küme sertifikası parmak izini ve küme yönetimi için izin verilen istemci sertifikasının parmak izini sağlayın. Sertifika ayrıntılarının küme düğümlerindeki bir sertifikayla eşleşmesi gerekir.

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `  
          -KeepAliveIntervalInSec 10 `  
          -X509Credential -ServerCertThumbprint <Certificate Thumbprint> `  
          -FindType FindByThumbprint -FindValue <Certificate Thumbprint> `  
          -StoreLocation CurrentUser -StoreName My

Servercertparmak izi , küme düğümlerinde yüklü olan sunucu sertifikasının parmak izdir. FindValue , yönetici istemci sertifikasının parmak izdir. Parametreler doldurulduğunda, komut aşağıdaki örneğe benzer şekilde görünür:

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ılmışsa, "WindowsCredential" anahtarını ekleyerek kümeye bağlanın.

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
          -WindowsCredential

FabricClient API 'Lerini kullanarak bir kümeye bağlanma

Service Fabric SDK, 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

Uzaktan güvenli olmayan 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");

Bir küme içinden çalışan kod için, örneğin, güvenilir bir hizmette, küme adresini belirtmeden bir FabricClient oluşturun . FabricClient, kod şu anda üzerinde çalıştığı düğümde yerel yönetim ağ geçidine bağlanır, ek bir ağ atlamasını önler.

FabricClient fabricClient = new FabricClient();

İstemci sertifikası kullanarak güvenli bir kümeye bağlanma

Kümedeki düğümlerin, FabricClient'da ayarlanmış olan remotecommonnames özelliğinde bulunan ortak adı veya DNS adı San 'da geçerli sertifikalara sahip olması gerekir. Bu işlemin ardından, istemci ve küme düğümleri arasında karşılıklı kimlik doğrulaması etkinleştirilir.

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;
}

Azure Active Directory kullanarak güvenli bir kümeye etkileşimli olarak bağlanma

Aşağıdaki örnek, sunucu kimliği için istemci kimliği ve sunucu sertifikası için Azure Active Directory kullanır.

Kümeye bağlandıktan sonra etkileşimli oturum açma için bir iletişim kutusu penceresi otomatik olarak 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);
}

Güvenli bir kümeye etkileşimli olmayan Azure Active Directory kullanarak bağlanma

Aşağıdaki örnek Microsoft. IdentityModel. clients. ActiveDirectory, sürüm: 2.19.208020213 kullanır.

AAD belirteci alma hakkında daha fazla bilgi için bkz. Microsoft. IdentityModel. clients. ActiveDirectory.

string tenantId = "C15CFCEA-02C1-40DC-8466-FBD0EE0B05D2";
string clientApplicationId = "118473C2-7619-46E3-A8E4-6DA8D5F56E12";
string webApplicationId = "53E6948C-0897-4DA6-B26A-EE2A38A690B4";

string token = GetAccessToken(
    tenantId,
    webApplicationId,
    clientApplicationId,
    "urn:ietf:wg:oauth:2.0:oob");

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);
}

...

static string GetAccessToken(
    string tenantId,
    string resource,
    string clientId,
    string redirectUri)
{
    string authorityFormat = @"https://login.microsoftonline.com/{0}";
    string authority = string.Format(CultureInfo.InvariantCulture, authorityFormat, tenantId);
    var authContext = new AuthenticationContext(authority);

    var authResult = authContext.AcquireToken(
        resource,
        clientId,
        new UserCredential("TestAdmin@clustenametenant.onmicrosoft.com", "TestPassword"));
    return authResult.AccessToken;
}

Azure Active Directory kullanarak önceden meta veri bilgisi olmadan güvenli bir kümeye bağlanma

Aşağıdaki örnek etkileşimli olmayan belirteç alımı kullanır, ancak aynı yaklaşım özel bir etkileşimli belirteç alma deneyimi oluşturmak için de kullanılabilir. Belirteç alımı için gereken Azure Active Directory meta verileri küme yapılandırmasından okundu.

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 += (o, e) =>
{
    return GetAccessToken(e.AzureActiveDirectoryMetadata);
};

try
{
    var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
    Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
    Console.WriteLine("Connect failed: {0}", e.Message);
}

...

static string GetAccessToken(AzureActiveDirectoryMetadata aad)
{
    var authContext = new AuthenticationContext(aad.Authority);

    var authResult = authContext.AcquireToken(
        aad.ClusterApplication,
        aad.ClientApplication,
        new UserCredential("TestAdmin@clustenametenant.onmicrosoft.com", "TestPassword"));
    return authResult.AccessToken;
}

Service Fabric Explorer kullanarak güvenli bir kümeye bağlanma

Belirli bir küme için Service Fabric Explorer erişmek için tarayıcınızı şu şekilde işaretleyin:

http://<your-cluster-endpoint>:19080/Explorer

Tam URL, Azure portal küme temelleri bölmesinde de mevcuttur.

Bir 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 makinelerde, sertifika, gelişmiş tarayıcı ayarları kullanılarak içeri aktarılmalıdır (her tarayıcı farklı mekanizmalarla) ve bunu diskteki sertifika konumuna işaret eder. Daha fazla bilgi için istemci sertifikası ayarlama makalesini okuyun.

Azure Active Directory kullanarak güvenli bir kümeye bağlanma

AAD ile güvenli hale getirilmiş bir kümeye bağlanmak için tarayıcınızı şu şekilde işaretleyin:

https://<your-cluster-endpoint>:19080/Explorer

Otomatik olarak AAD ile oturum açmanız istenir.

İstemci sertifikası kullanarak güvenli bir kümeye bağlanma

Sertifikalarla güvenliği sağlanmış bir kümeye bağlanmak için tarayıcınızı şu şekilde işaretleyin:

https://<your-cluster-endpoint>:19080/Explorer

Otomatik olarak bir istemci sertifikası seçmeniz istenir.

Uzak bilgisayarda istemci sertifikası ayarlama

Küme ve sunucu sertifikası ve istemci erişimi için bir tane olmak üzere, kümenin güvenliğini sağlamak için en az iki sertifika kullanılmalıdır. Ek ikincil sertifikaları ve istemci erişim sertifikalarını da kullanmanızı öneririz. Sertifika güvenliği kullanarak bir istemci ve küme düğümü arasındaki iletişimin güvenliğini sağlamak için öncelikle istemci sertifikası edinmeniz ve yüklemeniz gerekir. Sertifika, yerel bilgisayarın veya geçerli kullanıcının kişisel (My) deposuna yüklenebilir. Ayrıca, istemcinin kümenin kimliğini doğrulayabilmesi için sunucu sertifikasının parmak izine 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 sertifika ise, bu sertifikayı güvenli bir kümeye bağlamak için kullanabilmeniz için makinenizin "güvenilir 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