Zabezpieczanie klastra autonomicznego w systemie Windows przy użyciu certyfikatów X.509

W tym artykule opisano sposób zabezpieczania komunikacji między różnymi węzłami autonomicznego klastra systemu Windows. W tym artykule opisano również sposób uwierzytelniania klientów łączących się z tym klastrem przy użyciu certyfikatów X.509. Uwierzytelnianie gwarantuje, że tylko autoryzowani użytkownicy będą mogli uzyskiwać dostęp do klastra i wdrożonych aplikacji oraz wykonywać zadania zarządzania. Zabezpieczenia certyfikatów powinny być włączone w klastrze po utworzeniu klastra.

Aby uzyskać więcej informacji na temat zabezpieczeń klastra, takich jak zabezpieczenia węzła do węzła, zabezpieczenia klienta do węzła i kontrola dostępu oparta na rolach, zobacz Scenariusze zabezpieczeń klastra.

Które certyfikaty są potrzebne?

Aby rozpocząć pracę, pobierz pakiet usługi Service Fabric dla systemu Windows Server do jednego z węzłów w klastrze. W pobranym pakiecie znajdziesz plik ClusterConfig.X509.MultiMachine.json. Otwórz plik i przejrzyj sekcję dotyczącą zabezpieczeń w sekcji właściwości:

"security": {
    "metadata": "The Credential type X509 indicates this cluster is secured by using X509 certificates. The thumbprint format is d5 ec 42 3b 79 cb e5 07 fd 83 59 3c 56 b9 d5 31 24 25 42 64.",
    "ClusterCredentialType": "X509",
    "ServerCredentialType": "X509",
    "CertificateInformation": {
        "ClusterCertificate": {
            "Thumbprint": "[Thumbprint]",
            "ThumbprintSecondary": "[Thumbprint]",
            "X509StoreName": "My"
        },        
        "ClusterCertificateCommonNames": {
            "CommonNames": [
            {
                "CertificateCommonName": "[CertificateCommonName]",
                "CertificateIssuerThumbprint": "[Thumbprint1,Thumbprint2,Thumbprint3,...]"
            }
            ],
            "X509StoreName": "My"
        },
        "ClusterCertificateIssuerStores": [
            {
                "IssuerCommonName": "[IssuerCommonName]",
                "X509StoreNames" : "Root"
            }
        ],
        "ServerCertificate": {
            "Thumbprint": "[Thumbprint]",
            "ThumbprintSecondary": "[Thumbprint]",
            "X509StoreName": "My"
        },
        "ServerCertificateCommonNames": {
            "CommonNames": [
            {
                "CertificateCommonName": "[CertificateCommonName]",
                "CertificateIssuerThumbprint": "[Thumbprint1,Thumbprint2,Thumbprint3,...]"
            }
            ],
            "X509StoreName": "My"
        },
        "ServerCertificateIssuerStores": [
            {
                "IssuerCommonName": "[IssuerCommonName]",
                "X509StoreNames" : "Root"
            }
        ],
        "ClientCertificateThumbprints": [
            {
                "CertificateThumbprint": "[Thumbprint]",
                "IsAdmin": false
            },
            {
                "CertificateThumbprint": "[Thumbprint]",
                "IsAdmin": true
            }
        ],
        "ClientCertificateCommonNames": [
            {
                "CertificateCommonName": "[CertificateCommonName]",
                "CertificateIssuerThumbprint": "[Thumbprint1,Thumbprint2,Thumbprint3,...]",
                "IsAdmin": true
            }
        ],
        "ClientCertificateIssuerStores": [
            {
                "IssuerCommonName": "[IssuerCommonName]",
                "X509StoreNames": "Root"
            }
        ]
        "ReverseProxyCertificate": {
            "Thumbprint": "[Thumbprint]",
            "ThumbprintSecondary": "[Thumbprint]",
            "X509StoreName": "My"
        },
        "ReverseProxyCertificateCommonNames": {
            "CommonNames": [
                {
                "CertificateCommonName": "[CertificateCommonName]"
                }
            ],
            "X509StoreName": "My"
        }
    }
},

W tej sekcji opisano certyfikaty, które należy zabezpieczyć autonomiczny klaster systemu Windows. Jeśli określisz certyfikat klastra, ustaw wartość ClusterCredentialType na X509. Jeśli określisz certyfikat serwera dla połączeń zewnętrznych, ustaw wartość ServerCredentialType na X509. Chociaż nie jest to obowiązkowe, zalecamy posiadanie obu tych certyfikatów dla prawidłowo zabezpieczonego klastra. Jeśli te wartości zostały ustawione na X509, należy również określić odpowiednie certyfikaty lub usługa Service Fabric zgłasza wyjątek. W niektórych scenariuszach możesz określić tylko element ClientCertificateThumbprints lub ReverseProxyCertificate. W tych scenariuszach nie trzeba ustawiać wartości ClusterCredentialType ani ServerCredentialType na X509.

Uwaga

Odcisk palca jest podstawową tożsamością certyfikatu. Aby sprawdzić odcisk palca utworzonych certyfikatów, zobacz Pobieranie odcisku palca certyfikatu.

W poniższej tabeli wymieniono certyfikaty potrzebne w konfiguracji klastra:

Ustawienie CertificateInformation Opis
KlasterCertyfikat Zalecane dla środowiska testowego. Ten certyfikat jest wymagany do zabezpieczenia komunikacji między węzłami w klastrze. Do uaktualnienia można użyć dwóch różnych certyfikatów: podstawowego i pomocniczego. Ustaw odcisk palca certyfikatu podstawowego w sekcji Odcisk palca i pomocnicze w zmiennych ThumbprintSecondary.
ClusterCertificateCommonNames Zalecane dla środowiska produkcyjnego. Ten certyfikat jest wymagany do zabezpieczenia komunikacji między węzłami w klastrze. Można użyć jednej lub dwóch nazw pospolitych certyfikatów klastra. CertificateIssuerThumbprint odpowiada odciskowi palca wystawcy tego certyfikatu. Jeśli jest używany więcej niż jeden certyfikat o tej samej nazwie pospolitej, można określić wiele odcisków palca wystawcy.
ClusterCertificateIssuerStores Zalecane dla środowiska produkcyjnego. Ten certyfikat odpowiada wystawcy certyfikatu klastra. Możesz podać nazwę pospolitą wystawcy i odpowiednią nazwę magazynu w tej sekcji zamiast określać odcisk palca wystawcy w obszarze ClusterCertificateCommonNames. Ułatwia to przerzucanie certyfikatów wystawców klastra. Można określić wielu wystawców, jeśli jest używany więcej niż jeden certyfikat klastra. Pusta nazwa IssuerCommonName zezwala na wszystkie certyfikaty w odpowiednich magazynach określonych w obszarze X509StoreNames.
ServerCertificate Zalecane dla środowiska testowego. Ten certyfikat jest wyświetlany klientowi podczas próby nawiązania połączenia z tym klastrem. Dla wygody możesz użyć tego samego certyfikatu dla klastraCertificate i ServerCertificate. Do uaktualnienia można użyć dwóch różnych certyfikatów serwera, podstawowego i pomocniczego. Ustaw odcisk palca certyfikatu podstawowego w sekcji Odcisk palca i pomocnicze w zmiennych ThumbprintSecondary.
ServerCertificateCommonNames Zalecane dla środowiska produkcyjnego. Ten certyfikat jest wyświetlany klientowi podczas próby nawiązania połączenia z tym klastrem. CertificateIssuerThumbprint odpowiada odciskowi palca wystawcy tego certyfikatu. Jeśli jest używany więcej niż jeden certyfikat o tej samej nazwie pospolitej, można określić wiele odcisków palca wystawcy. Dla wygody możesz użyć tego samego certyfikatu dla klasterCertificateCommonNames i ServerCertificateCommonNames. Można użyć jednej lub dwóch nazw pospolitych certyfikatów serwera.
ServerCertificateIssuerStores Zalecane dla środowiska produkcyjnego. Ten certyfikat odpowiada wystawcy certyfikatu serwera. W tej sekcji można podać nazwę pospolitą wystawcy i odpowiednią nazwę magazynu zamiast określać odcisk palca wystawcy w obszarze ServerCertificateCommonNames. Ułatwia to przerzucanie certyfikatów wystawców serwera. W przypadku użycia więcej niż jednego certyfikatu serwera można określić wielu wystawców. Pusta nazwa IssuerCommonName zezwala na wszystkie certyfikaty w odpowiednich magazynach określonych w obszarze X509StoreNames.
ClientCertificateThumbprints Zainstaluj ten zestaw certyfikatów na uwierzytelnionych klientach. Na maszynach, na których chcesz zezwolić na dostęp do klastra, można zainstalować wiele różnych certyfikatów klienta. Ustaw odcisk palca każdego certyfikatu w zmiennej CertificateThumbprint. Jeśli ustawisz wartość IsAdmin na wartość true, klient z tym certyfikatem zainstalowanym na nim może wykonywać działania związane z zarządzaniem administratorami w klastrze. Jeśli isAdmin ma wartość false, klient z tym certyfikatem może wykonywać akcje dozwolone tylko dla praw dostępu użytkowników, zazwyczaj tylko do odczytu. Aby uzyskać więcej informacji na temat ról, zobacz Kontrola dostępu oparta na rolach usługi Service Fabric.
ClientCertificateCommonNames Ustaw nazwę pospolitą pierwszego certyfikatu klienta dla certyfikatu CertificateCommonName. CertificateIssuerThumbprint to odcisk palca wystawcy tego certyfikatu. Aby dowiedzieć się więcej na temat nazw pospolitych i wystawcy, zobacz Praca z certyfikatami.
ClientCertificateIssuerStores Zalecane dla środowiska produkcyjnego. Ten certyfikat odpowiada wystawcy certyfikatu klienta (zarówno role administratora, jak i nienależące do administratora). Możesz podać nazwę pospolitą wystawcy i odpowiednią nazwę magazynu w tej sekcji zamiast określać odcisk palca wystawcy w obszarze ClientCertificateCommonNames. Ułatwia to przerzucanie certyfikatów wystawców klienta. Można określić wielu wystawców, jeśli jest używany więcej niż jeden certyfikat klienta. Pusta nazwa IssuerCommonName zezwala na wszystkie certyfikaty w odpowiednich magazynach określonych w obszarze X509StoreNames.
ReverseProxyCertificate Zalecane dla środowiska testowego. Ten opcjonalny certyfikat można określić, jeśli chcesz zabezpieczyć zwrotny serwer proxy. Upewnij się, że parametr reverseProxyEndpointPort jest ustawiony w parametrze nodeTypes, jeśli używasz tego certyfikatu.
ReverseProxyCertificateCommonNames Zalecane dla środowiska produkcyjnego. Ten opcjonalny certyfikat można określić, jeśli chcesz zabezpieczyć zwrotny serwer proxy. Upewnij się, że parametr reverseProxyEndpointPort jest ustawiony w parametrze nodeTypes, jeśli używasz tego certyfikatu.

Oto przykładowa konfiguracja klastra, w której podano certyfikaty klastra, serwera i klienta. W przypadku certyfikatów cluster/server/reverseProxy odcisk palca i nazwa pospolita nie można skonfigurować razem dla tego samego typu certyfikatu.

{
   "name": "SampleCluster",
   "clusterConfigurationVersion": "1.0.0",
   "apiVersion": "10-2017",
   "nodes": [{
       "nodeName": "vm0",
       "metadata": "Replace the localhost below with valid IP address or FQDN",
       "iPAddress": "10.7.0.5",
       "nodeTypeRef": "NodeType0",
       "faultDomain": "fd:/dc1/r0",
       "upgradeDomain": "UD0"
   }, {
       "nodeName": "vm1",
       "metadata": "Replace the localhost with valid IP address or FQDN",
       "iPAddress": "10.7.0.4",
       "nodeTypeRef": "NodeType0",
       "faultDomain": "fd:/dc1/r1",
       "upgradeDomain": "UD1"
   }, {
       "nodeName": "vm2",
       "iPAddress": "10.7.0.6",
       "metadata": "Replace the localhost with valid IP address or FQDN",
       "nodeTypeRef": "NodeType0",
       "faultDomain": "fd:/dc1/r2",
       "upgradeDomain": "UD2"
   }],
   "properties": {
       "diagnosticsStore": {
       "metadata":  "Please replace the diagnostics store with an actual file share accessible from all cluster machines.",
       "dataDeletionAgeInDays": "7",
       "storeType": "FileShare",
       "IsEncrypted": "false",
       "connectionstring": "c:\\ProgramData\\SF\\DiagnosticsStore"
       },
       "security": {
           "metadata": "The Credential type X509 indicates this cluster is secured by using X509 certificates. The thumbprint format is d5 ec 42 3b 79 cb e5 07 fd 83 59 3c 56 b9 d5 31 24 25 42 64.",
           "ClusterCredentialType": "X509",
           "ServerCredentialType": "X509",
           "CertificateInformation": {
               "ClusterCertificateCommonNames": {
                 "CommonNames": [
                   {
                     "CertificateCommonName": "myClusterCertCommonName"
                   }
                 ],
                 "X509StoreName": "My"
               },
               "ClusterCertificateIssuerStores": [
                   {
                       "IssuerCommonName": "ClusterIssuer1",
                       "X509StoreNames" : "Root"
                   },
                   {
                       "IssuerCommonName": "ClusterIssuer2",
                       "X509StoreNames" : "Root"
                   }
               ],
               "ServerCertificateCommonNames": {
                 "CommonNames": [
                   {
                     "CertificateCommonName": "myServerCertCommonName",
                     "CertificateIssuerThumbprint": "7c fc 91 97 13 16 8d ff a8 ee 71 2b a2 f4 62 62 00 03 49 0d"
                   }
                 ],
                 "X509StoreName": "My"
               },
               "ClientCertificateThumbprints": [{
                   "CertificateThumbprint": "c4 c18 8e aa a8 58 77 98 65 f8 61 4a 0d da 4c 13 c5 a1 37 6e",
                   "IsAdmin": false
               }, {
                   "CertificateThumbprint": "71 de 04 46 7c 9e d0 54 4d 02 10 98 bc d4 4c 71 e1 83 41 4e",
                   "IsAdmin": true
               }]
           }
       },
       "reliabilityLevel": "Bronze",
       "nodeTypes": [{
           "name": "NodeType0",
           "clientConnectionEndpointPort": "19000",
           "clusterConnectionEndpointPort": "19001",
           "leaseDriverEndpointPort": "19002",
           "serviceConnectionEndpointPort": "19003",
           "httpGatewayEndpointPort": "19080",
           "applicationPorts": {
               "startPort": "20001",
               "endPort": "20031"
           },
           "ephemeralPorts": {
               "startPort": "20032",
               "endPort": "20062"
           },
           "isPrimary": true
       }
        ],
       "fabricSettings": [{
           "name": "Setup",
           "parameters": [{
               "name": "FabricDataRoot",
               "value": "C:\\ProgramData\\SF"
           }, {
               "name": "FabricLogRoot",
               "value": "C:\\ProgramData\\SF\\Log"
           }]
       }]
   }
}

Przerzucanie certyfikatów

W przypadku używania nazwy pospolitej certyfikatu zamiast odcisku palca przerzucanie certyfikatu nie wymaga uaktualnienia konfiguracji klastra. W przypadku uaktualnień odcisku palca wystawcy upewnij się, że nowa lista odcisków palca przecina starą listę. Najpierw należy przeprowadzić uaktualnienie konfiguracji przy użyciu odcisków palca nowego wystawcy, a następnie zainstalować nowe certyfikaty (zarówno certyfikat klastra/serwera, jak i certyfikaty wystawcy) w magazynie. Zachowaj stary certyfikat wystawcy w magazynie certyfikatów przez co najmniej dwie godziny po zainstalowaniu nowego certyfikatu wystawcy. Jeśli używasz magazynów wystawców, nie trzeba przeprowadzić uaktualnienia konfiguracji do przerzucania certyfikatu wystawcy. Zainstaluj nowy certyfikat wystawcy z ostatnią datą wygaśnięcia w odpowiednim magazynie certyfikatów i usuń stary certyfikat wystawcy po kilku godzinach.

Uzyskiwanie certyfikatów X.509

Aby zabezpieczyć komunikację w klastrze, należy najpierw uzyskać certyfikaty X.509 dla węzłów klastra. Ponadto aby ograniczyć połączenie z tym klastrem do autoryzowanych maszyn/użytkowników, należy uzyskać i zainstalować certyfikaty dla maszyn klienckich.

W przypadku klastrów z uruchomionymi obciążeniami produkcyjnymi należy użyć certyfikatu X.509 podpisanego przez urząd certyfikacji w celu zabezpieczenia klastra. Aby uzyskać więcej informacji na temat uzyskiwania tych certyfikatów, zobacz Jak uzyskać certyfikat.

Istnieje wiele właściwości, które certyfikat musi mieć w celu prawidłowego działania:

  • Dostawca certyfikatu musi być dostawcą rozszerzonych usług RSA firmy Microsoft i dostawcą kryptograficznym AES

  • Podczas tworzenia klucza RSA upewnij się, że klucz ma wartość 2048 bitów.

  • Rozszerzenie Użycie klucza ma wartość podpisu cyfrowego, szyfrowania kluczy (a0)

  • Rozszerzenie Rozszerzone użycie klucza ma wartości Uwierzytelnianie serwera (OID: 1.3.6.1.5.5.7.3.1) i Uwierzytelnianie klienta (OID: 1.3.6.1.5.5.7.3.2)

W przypadku klastrów używanych do celów testowych możesz użyć certyfikatu z podpisem własnym.

Aby uzyskać dodatkowe pytania, zapoznaj się z często zadawanymi pytaniami dotyczącymi certyfikatów.

Opcjonalnie: Tworzenie certyfikatu z podpisem własnym

Jednym ze sposobów utworzenia certyfikatu z podpisem własnym, który można zabezpieczyć poprawnie, jest użycie skryptu CertSetup.ps1 w folderze zestawu SDK usługi Service Fabric w katalogu C:\Program Files\Microsoft SDKs\Service Fabric\ClusterSetup\Secure. Edytuj ten plik, aby zmienić domyślną nazwę certyfikatu. (Poszukaj wartości CN=ServiceFabricDevClusterCert). Uruchom ten skrypt jako .\CertSetup.ps1 -Install.

Teraz wyeksportuj certyfikat do pliku pfx z chronionym hasłem. Najpierw pobierz odcisk palca certyfikatu.

  1. W menu Start uruchom polecenie Zarządzaj certyfikatami komputerów.

  2. Przejdź do folderu Komputer lokalny\Osobisty i znajdź utworzony certyfikat.

  3. Kliknij dwukrotnie certyfikat, aby go otworzyć, wybierz kartę Szczegóły i przewiń w dół do pola Odcisk palca .

  4. Usuń spacje i skopiuj wartość odcisku palca do następującego polecenia programu PowerShell.

  5. String Zmień wartość na odpowiednie bezpieczne hasło, aby je chronić, i uruchom następujące polecenie w programie PowerShell:

    $pswd = ConvertTo-SecureString -String "1234" -Force –AsPlainText
    Get-ChildItem -Path cert:\localMachine\my\<Thumbprint> | Export-PfxCertificate -FilePath C:\mypfx.pfx -Password $pswd
    
  6. Aby wyświetlić szczegóły certyfikatu zainstalowanego na maszynie, uruchom następujące polecenie programu PowerShell:

    $cert = Get-Item Cert:\LocalMachine\My\<Thumbprint>
    Write-Host $cert.ToString($true)
    

Alternatywnie, jeśli masz subskrypcję platformy Azure, wykonaj kroki opisane w temacie Tworzenie klastra usługi Service Fabric przy użyciu usługi Azure Resource Manager.

Instalowanie certyfikatów

Po otrzymaniu certyfikatów można je zainstalować w węzłach klastra. Węzły muszą mieć zainstalowaną najnowszą Windows PowerShell 3.x. Powtórz te kroki w każdym węźle zarówno dla certyfikatów klastra, jak i serwera oraz wszystkich certyfikatów pomocniczych.

  1. Skopiuj plik pfx lub pliki do węzła.

  2. Otwórz okno programu PowerShell jako administrator i wprowadź następujące polecenia. Zastąp $pswd hasłem użytym do utworzenia tego certyfikatu. Zastąp $PfxFilePath pełną ścieżką pliku PFX skopiowaną do tego węzła.

    $pswd = "1234"
    $PfxFilePath ="C:\mypfx.pfx"
    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\LocalMachine\My -FilePath $PfxFilePath -Password (ConvertTo-SecureString -String $pswd -AsPlainText -Force)
    
  3. Teraz ustaw kontrolę dostępu na tym certyfikacie, aby proces usługi Service Fabric, który działa na koncie usługi sieciowej, może go użyć, uruchamiając następujący skrypt. Podaj odcisk palca certyfikatu i USŁUGI SIECIOWEJ dla konta usługi. Możesz sprawdzić, czy listy ACL w certyfikacie są poprawne, otwierając certyfikat w obszarze Uruchom>zarządzanie certyfikatami komputerów i przeglądając pozycje Wszystkie zadania>Zarządzaj kluczami prywatnymi.

    param
    (
    [Parameter(Position=1, Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$pfxThumbPrint,
    
    [Parameter(Position=2, Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$serviceAccount
    )
    
    $cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object -FilterScript { $PSItem.ThumbPrint -eq $pfxThumbPrint; }
    
    # Specify the user, the permissions, and the permission type
    $permission = "$($serviceAccount)","FullControl","Allow" # "NT AUTHORITY\NetworkService" is the service account
    $accessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
    
    # Location of the machine-related keys
    $keyPath = Join-Path -Path $env:ProgramData -ChildPath "\Microsoft\Crypto\RSA\MachineKeys"
    $keyName = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
    $keyFullPath = Join-Path -Path $keyPath -ChildPath $keyName
    
    # Get the current ACL of the private key
    $acl = (Get-Item $keyFullPath).GetAccessControl('Access')
    
    # Add the new ACE to the ACL of the private key
    $acl.SetAccessRule($accessRule)
    
    # Write back the new ACL
    Set-Acl -Path $keyFullPath -AclObject $acl -ErrorAction Stop
    
    # Observe the access rights currently assigned to this certificate
    get-acl $keyFullPath| fl
    
  4. Powtórz poprzednie kroki dla każdego certyfikatu serwera. Możesz również użyć tych kroków, aby zainstalować certyfikaty klienta na maszynach, które mają zezwalać na dostęp do klastra.

Tworzenie bezpiecznego klastra

Po skonfigurowaniu sekcji zabezpieczeń pliku ClusterConfig.X509.MultiMachine.json możesz przejść do sekcji Tworzenie klastra , aby skonfigurować węzły i utworzyć klaster autonomiczny. Pamiętaj, aby podczas tworzenia klastra używać pliku ClusterConfig.X509.MultiMachine.json. Na przykład polecenie może wyglądać następująco:

.\CreateServiceFabricCluster.ps1 -ClusterConfigFilePath .\ClusterConfig.X509.MultiMachine.json

Po pomyślnym uruchomieniu bezpiecznego autonomicznego klastra systemu Windows i skonfigurowaniu uwierzytelnionych klientów w celu nawiązania z nim połączenia wykonaj kroki opisane w sekcji Nawiązywanie połączenia z klastrem przy użyciu programu PowerShell . Przykład:

$ConnectArgs = @{  ConnectionEndpoint = '10.7.0.5:19000';  X509Credential = $True;  StoreLocation = 'LocalMachine';  StoreName = "MY";  ServerCertThumbprint = "057b9544a6f2733e0c8d3a60013a58948213f551";  FindType = 'FindByThumbprint';  FindValue = "057b9544a6f2733e0c8d3a60013a58948213f551"   }
Connect-ServiceFabricCluster $ConnectArgs

Następnie można uruchomić inne polecenia programu PowerShell, aby pracować z tym klastrem. Można na przykład uruchomić polecenie Get-ServiceFabricNode , aby wyświetlić listę węzłów w tym bezpiecznym klastrze.

Aby usunąć klaster, połącz się z węzłem w klastrze, w którym pobrano pakiet usługi Service Fabric, otwórz wiersz polecenia i przejdź do folderu pakietu. Teraz uruchom następujące polecenie:

.\RemoveServiceFabricCluster.ps1 -ClusterConfigFilePath .\ClusterConfig.X509.MultiMachine.json

Uwaga

Nieprawidłowa konfiguracja certyfikatu może uniemożliwić tworzenie klastra podczas wdrażania. Aby samodzielnie zdiagnozować problemy z zabezpieczeniami, zapoznaj się z Podgląd zdarzeń grupy Dzienniki >aplikacji i usługMicrosoft-Service Fabric.