Menyambungkan ke kluster aman

Ketika klien terhubung ke node kluster Service Fabric, klien dapat diautentikasi dan komunikasi aman yang dibuat menggunakan keamanan sertifikat atau ID Microsoft Entra. Autentikasi ini memastikan bahwa hanya pengguna yang berwenang yang dapat mengakses kluster dan aplikasi yang diterapkan dan melakukan tugas manajemen. Keamanan Sertifikat atau Microsoft Entra harus telah diaktifkan sebelumnya pada kluster saat kluster dibuat. Untuk informasi selengkapnya tentang skenario keamanan kluster, lihat Keamanan kluster. Jika Anda menyambungkan ke kluster yang diamankan dengan sertifikat, siapkan sertifikat klien di komputer yang tersambung ke kluster.

Menyambungkan ke kluster aman menggunakan Azure Service Fabric CLI (sfctl)

Ada beberapa cara berbeda untuk terhubung ke kluster aman menggunakan Service Fabric CLI (sfctl). Saat menggunakan sertifikat klien untuk autentikasi, detail sertifikat harus cocok dengan sertifikat yang disebarkan ke node kluster. Jika sertifikat Anda memiliki Otoritas Sertifikat atau Certificate Authoritie (CA), Anda perlu menentukan secara ekstra CA tepercaya.

Anda dapat menyambungkan ke kluster menggunakan perintah sfctl cluster select.

Sertifikat klien dapat ditentukan dalam dua mode yang berbeda, baik sebagai pasangan sertifikat dan kunci, atau sebagai satu file PFX. Untuk file PEM yang dilindungi kata sandi, Anda akan diminta secara otomatis untuk memasukkan kata sandi. Jika Anda memperoleh sertifikat klien sebagai file PFX, pertama-tama konversi file PFX ke file PEM menggunakan perintah berikut.

openssl pkcs12 -in your-cert-file.pfx -out your-cert-file.pem -nodes -passin pass:your-pfx-password

Jika file .pfx Anda tidak dilindungi kata sandi, gunakan -passin pass: untuk parameter terakhir.

Untuk menentukan sertifikat klien sebagai file pem, tentukan jalur file dalam argumen --pem. Contohnya:

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

Berkas pem yang dilindungi kata sandi akan meminta kata sandi sebelum menjalankan perintah apa pun.

Untuk menentukan sertifikasi, pasangan kunci menggunakan dan argumen --cert dan --key untuk menentukan jalur file ke setiap file.

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --cert ./client.crt --key ./keyfile.key

Terkadang sertifikat yang digunakan untuk mengamankan kluster pengujian atau dev gagal dalam validasi sertifikat. Untuk melewati verifikasi sertifikat, tentukan opsi --no-verify. Contohnya:

Peringatan

Jangan gunakan opsi no-verify saat menyambungkan ke kluster Service Fabric produksi.

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

Selain itu, Anda dapat menentukan jalur ke direktori sertifikat CA tepercaya, atau sertifikat individual. Untuk menentukan jalur ini, gunakan argumen --ca. Contohnya:

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

Setelah terhubung, Anda harus akan menjalankan perintah sfctl lainnya untuk berinteraksi dengan kluster.

Menyambungkan ke kluster menggunakan Powershell

Sebelum melakukan operasi pada kluster melalui PowerShell, pertama-tama buat koneksi ke kluster. Koneksi kluster digunakan untuk semua perintah berikutnya dalam sesi PowerShell yang diberikan.

Menyambungkan ke kluster tidak aman

Untuk menyambungkan ke kluster yang tidak aman, berikan alamat titik akhir kluster ke perintah Connect-ServiceFabricCluster:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Koneksi ke kluster aman menggunakan ID Microsoft Entra

Untuk menyambungkan ke kluster aman yang menggunakan ID Microsoft Entra untuk mengotorisasi akses administrator kluster, berikan thumbprint sertifikat kluster dan gunakan bendera AzureActiveDirectory .

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
-ServerCertThumbprint <Server Certificate Thumbprint> `
-AzureActiveDirectory

Menyambungkan ke kluster aman menggunakan sertifikat klien

Jalankan perintah PowerShell berikut ini untuk menyambungkan ke kluster aman yang menggunakan sertifikat klien untuk mengotorisasi akses administrator.

Menyambungkan menggunakan nama umum sertifikat

Berikan nama umum sertifikat kluster dan nama umum sertifikat klien yang telah diberikan izin untuk manajemen kluster. Detail sertifikat harus cocok dengan sertifikat pada node kluster.

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCommonName <certificate common name>  `
    -FindType FindBySubjectName `
    -FindValue <certificate common name> `
    -StoreLocation CurrentUser `
    -StoreName My 

ServerCommonName adalah nama umum sertifikat server yang diinstal pada node kluster. FindValue adalah nama umum sertifikat klien admin. Saat parameter diisi, perintah terlihat seperti contoh berikut:

$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 

Menyambungkan menggunakan thumbprint sertifikat

Berikan thumbprint sertifikat kluster dan thumbprint sertifikat klien yang telah diberikan izin untuk manajemen kluster. Detail sertifikat harus cocok dengan sertifikat pada node kluster.

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

ServerCertThumbprint adalah thumbprint sertifikat server yang diinstal pada node kluster. FindValue adalah thumbprint sertifikat klien admin. Saat parameter diisi, perintah terlihat seperti contoh berikut:

Connect-ServiceFabricCluster -ConnectionEndpoint clustername.westus.cloudapp.azure.com:19000 `  
          -KeepAliveIntervalInSec 10 `  
          -X509Credential -ServerCertThumbprint A8136758F4AB8962AF2BF3F27921BE1DF67F4326 `  
          -FindType FindByThumbprint -FindValue 71DE04467C9ED0544D021098BCD44C71E183414E `  
          -StoreLocation CurrentUser -StoreName My 

Menyambungkan ke kluster aman menggunakan Windows Active Directory

Jika kluster mandiri Anda disebarkan menggunakan keamanan AD, sambungkan ke kluster dengan menambahkan sakelar "WindowsCredential".

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

Menyambungkan ke kluster menggunakan FabricClient API

Service Fabric SDK menyediakan kelas FabricClient untuk manajemen kluster. Untuk menggunakan FabricClient API, dapatkan paket Microsoft.ServiceFabric NuGet.

Menyambungkan ke kluster tidak aman

Untuk menyambungkan ke kluster jarak jauh yang tidak aman, buat instans FabricClient dan berikan alamat kluster:

FabricClient fabricClient = new FabricClient("clustername.westus.cloudapp.azure.com:19000");

Untuk kode yang berjalan dari dalam kluster, misalnya, di Reliable Service, buat FabricClient tanpa menentukan alamat klusternya. FabricClient terhubung ke gateway manajemen lokal pada node kode saat ini berjalan, menghindari lompatan jaringan tambahan.

FabricClient fabricClient = new FabricClient();

Menyambungkan ke kluster aman menggunakan sertifikat klien

Node dalam kluster harus memiliki sertifikat yang valid yang nama umum atau nama DNS-nya di SAN muncul di properti RemoteCommonNames yang diatur pada FabricClient. Mengikuti proses ini memungkinkan autentikasi bersama antara klien dan node kluster.

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

Koneksi ke kluster aman secara interaktif menggunakan ID Microsoft Entra

Contoh berikut menggunakan ID Microsoft Entra untuk identitas klien dan sertifikat server untuk identitas server.

Jendela dialog secara otomatis muncul untuk masuk interaktif saat menyambungkan ke kluster.

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

Koneksi ke kluster aman secara non-interaktif menggunakan ID Microsoft Entra

Contoh berikut bergantung pada Microsoft.Identity.Client, Versi: 4.37.0.

Untuk informasi selengkapnya tentang akuisisi token Microsoft Entra, lihat 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);
}

Koneksi ke kluster aman tanpa pengetahuan metadata sebelumnya menggunakan ID Microsoft Entra

Contoh berikut menggunakan akuisisi token non-interaktif, tetapi pendekatan yang sama dapat digunakan untuk membangun pengalaman akuisisi token interaktif kustom. Metadata Microsoft Entra yang diperlukan untuk akuisisi token dibaca dari konfigurasi kluster.

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

Menyambungkan ke kluster aman menggunakan Service Fabric Explorer

Untuk mencapai Service Fabric Explorer untuk kluster tertentu, arahkan browser Anda ke:

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

URL lengkap juga tersedia di panel esensial kluster portal Microsoft Azure.

Untuk menyambungkan ke kluster aman pada Windows atau OS X menggunakan browser, Anda dapat mengimpor sertifikat klien, dan browser akan meminta Anda agar sertifikat digunakan untuk menyambungkan ke kluster. Pada komputer Linux, sertifikat harus diimpor menggunakan pengaturan browser lanjutan (setiap browser memiliki mekanisme yang berbeda) dan mengarahkannya ke lokasi sertifikat di disk. Baca Menyiapkan sertifikat klien untuk informasi lebih lanjut.

Koneksi ke kluster aman menggunakan ID Microsoft Entra

Untuk menyambungkan ke kluster yang diamankan dengan MICROSOFT Entra ID, arahkan browser Anda ke:

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

Anda secara otomatis diminta untuk masuk dengan MICROSOFT Entra ID.

Menyambungkan ke kluster aman menggunakan sertifikat klien

Untuk menyambungkan ke kluster yang diamankan dengan sertifikat, arahkan browser Anda ke:

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

Anda secara otomatis diminta untuk memilih sertifikat klien.

Menyiapkan sertifikat klien pada komputer jarak jauh

Setidaknya dua sertifikat harus digunakan untuk mengamankan kluster, satu untuk kluster dan sertifikat server dan satu lagi untuk akses klien. Kami menyarankan agar Anda juga menggunakan sertifikat sekunder tambahan dan sertifikat akses klien. Untuk mengamankan komunikasi antara klien dan node kluster menggunakan keamanan sertifikat, Pertama-tama Anda perlu mendapatkan dan menginstal sertifikat klien. Sertifikat dapat diinstal ke penyimpanan Pribadi (Saya) dari komputer lokal atau pengguna saat ini. Anda juga memerlukan thumbprint sertifikat server sehingga klien dapat mengautentikasi kluster.

  • Di Windows: Klik dua kali file PFX dan ikuti perintah untuk menginstal sertifikat di toko pribadi Anda, Certificates - Current User\Personal\Certificates. Atau, Anda dapat menggunakan perintah PowerShell:

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My `
            -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
            -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    

    Jika itu adalah sertifikat yang ditandatangani sendiri, Anda perlu mengimpornya ke penyimpanan "orang tepercaya" komputer Anda sebelum dapat menggunakan sertifikat ini untuk tersambung ke kluster aman.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • Di Mac: Klik dua kali file PFX dan ikuti perintah untuk menginstal sertifikat di Keychain Anda.

Langkah berikutnya