Udostępnij za pośrednictwem


Dodaj lub usuń certyfikaty dla klastru Service Fabric w Azure

Zaleca się zapoznanie się z tym, jak Service Fabric wykorzystuje certyfikaty X.509, oraz znajomość scenariuszy zabezpieczeń klastrów. Musisz zrozumieć, czym jest certyfikat klastra i do czego jest używany, zanim pójdziesz dalej.

Domyślne zachowanie ładowania certyfikatów w SDK Azure Service Fabric polega na wdrożeniu i użyciu określonego certyfikatu z datą ważności najdalej w przyszłość; niezależnie od ich definicji konfiguracji podstawowej czy dodatkowej. Cofanie się do klasycznego zachowania jest zaawansowaną czynnością, której nie zaleca się wykonywać, i wymaga ustawienia wartości parametru "UseSecondaryIfNewer" na false w konfiguracji Fabric.Code.

Usługa Service Fabric umożliwia określenie dwóch certyfikatów klastra, podstawowego i pomocniczego, podczas konfigurowania zabezpieczeń certyfikatu w trakcie tworzenia klastra, oprócz certyfikatów klienta. Odwiedź tworzenie klastra Azure przez portal lub tworzenie klastra Azure przez Azure Resource Manager, aby uzyskać szczegóły dotyczące ich konfiguracji w momencie tworzenia. Jeśli podczas tworzenia określisz tylko jeden certyfikat klastra, to ten certyfikat zostanie użyty jako certyfikat główny. After cluster creation, you can add a new certificate as a secondary.

Notatka

W przypadku zabezpieczonego klastra zawsze będziesz potrzebować co najmniej jednego ważnego (nie unieważnionego ani nie wygasłego) certyfikatu klastrowego (podstawowego lub dodatkowego) wdrożonego (jeśli nie, klaster przestanie działać). 90 dni przed wygaśnięciem wszystkich ważnych certyfikatów system generuje ślad ostrzegawczy oraz ostrzegawcze zdarzenie zdrowotne na węźle. Obecnie są to jedyne powiadomienia wysyłane przez Service Fabric dotyczące wygaśnięcia certyfikatu.

Note

Zalecamy użycie modułu Azure Az PowerShell do interakcji z usługą Azure. To get started, see Install Azure PowerShell. Aby dowiedzieć się, jak migrować do modułu Az PowerShell, zobacz Migrate Azure PowerShell from AzureRM to Az.

Dodaj certyfikat klastra dodatkowego za pomocą portalu

Certyfikat klastra pomocniczego nie może być dodany za pośrednictwem portalu Azure; użyj Azure Resource Manager.

Remove a cluster certificate using the portal

Aby zabezpieczyć klaster, zawsze będziesz potrzebować co najmniej jednego ważnego certyfikatu (nie unieważnionego i nie wygasłego). Certyfikat wdrożony z najpóźniejszą datą wygaśnięcia będzie używany, a jego usunięcie spowoduje zatrzymanie działania klastra. Upewnij się, że usuwasz tylko certyfikat, który wygasł, lub nieużywany certyfikat, który wygasa najszybciej.

Aby usunąć nieużywany certyfikat bezpieczeństwa klastra, przejdź do sekcji Zabezpieczenia i wybierz opcję „Usuń” z menu kontekstowego na nieużywanym certyfikacie.

Jeśli twoim zamiarem jest usunięcie certyfikatu oznaczonego jako główny, musisz wdrożyć certyfikat podrzędny z datą wygaśnięcia późniejszą niż certyfikat główny, co umożliwi automatyczne przełączenie; usuń certyfikat główny po zakończeniu automatycznego przełączenia.

Dodaj certyfikat pomocniczy, używając Menedżera Zasobów Azure.

Kroki te zakładają, że znasz sposób działania Menedżera Zasobów i wdrożyłeś co najmniej jeden klaster Service Fabric za pomocą szablonu Menedżera Zasobów, oraz że masz pod ręką szablon, który został użyty do skonfigurowania klastra. Zakłada się również, że masz swobodę w obsłudze JSON.

Notatka

Jeśli szukasz przykładowego szablonu i parametrów, których możesz użyć jako punktu wyjścia lub do nauki, pobierz je z tego repozytorium Git.

Edytuj swój szablon Menedżera Zasobów

Dla ułatwienia śledzenia, plik 5-VM-1-NodeTypes-Secure_Step2.JSON zawiera wszystkie wprowadzone przez nas zmiany. Przykład jest dostępny w git-repo.

Upewnij się, że wykonasz wszystkie kroki

  1. Otwórz szablon Menedżera Zasobów, którego użyłeś do wdrożenia swojego klastra. (If you have downloaded the sample from the preceding repo, then use 5-VM-1-NodeTypes-Secure_Step1.JSON to deploy a secure cluster and then open up that template).

  2. Add two new parameters "secCertificateThumbprint" and "secCertificateUrlValue" of type "string" to the parameter section of your template. Możesz skopiować poniższy fragment kodu i dodać go do szablonu. W zależności od źródła szablonu, mogą być one już zdefiniowane. Jeśli tak, przejdź do następnego kroku.

       "secCertificateThumbprint": {
          "type": "string",
          "metadata": {
            "description": "Certificate Thumbprint"
          }
        },
        "secCertificateUrlValue": {
          "type": "string",
          "metadata": {
            "description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
          }
        },
    
    
  3. Wprowadź zmiany w zasobie Microsoft.ServiceFabric/clusters - Znajdź definicję zasobu "Microsoft.ServiceFabric/clusters" w swoim szablonie. W ramach właściwości tej definicji znajdziesz tag JSON "Certificate", który powinien wyglądać jak poniższy fragment JSON.

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

    Dodaj nowy tag „thumbprintSecondary” i przypisz mu wartość „[parameters('secCertificateThumbprint')]”.

    Proponowana definicja zasobu powinna teraz wyglądać następująco (w zależności od źródła szablonu, może nie odpowiadać dokładnie poniższemu fragmentowi).

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "thumbprintSecondary": "[parameters('secCertificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

    Jeśli chcesz przenosić certyfikat, to określ nowy certyfikat jako główny, a obecny główny ustaw jako pomocniczy. Wynikiem tego jest zastąpienie obecnego głównego certyfikatu nowym certyfikatem w jednym kroku wdrożeniowym.

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('secCertificateThumbprint')]",
              "thumbprintSecondary": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    
  4. Make changes to all the Microsoft.Compute/virtualMachineScaleSets resource definitions - Locate the Microsoft.Compute/virtualMachineScaleSets resource definition. Przewiń do "publisher": "Microsoft.Azure.ServiceFabric", pod "virtualMachineProfile".

    W ustawieniach wydawcy w Service Fabric powinieneś zobaczyć coś takiego.

    Json_Pub_Setting1

    Add the new cert entries to it

                   "certificateSecondary": {
                        "thumbprint": "[parameters('secCertificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    
    

    The properties should now look like this

    Json_Pub_Setting2

    If you want to roll over the cert, then specify the new cert as primary and moving the current primary as secondary. This results in the rollover of your current certificate to the new certificate in one deployment step.

                   "certificate": {
                       "thumbprint": "[parameters('secCertificateThumbprint')]",
                       "x509StoreName": "[parameters('certificateStoreValue')]"
                         },
                   "certificateSecondary": {
                        "thumbprint": "[parameters('certificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    

    The properties should now look like this
    Json_Pub_Setting3

  5. Wprowadź zmiany we wszystkich definicjach zasobów Microsoft.Compute/virtualMachineScaleSets - Znajdź definicję zasobu Microsoft.Compute/virtualMachineScaleSets. Przewiń do "vaultCertificates", pod "OSProfile". Powinno wyglądać mniej więcej tak.

    Json_Pub_Setting4

    Dodaj secCertificateUrlValue do niego. Użyj następującego fragmentu:

                      {
                        "certificateStore": "[parameters('certificateStoreValue')]",
                        "certificateUrl": "[parameters('secCertificateUrlValue')]"
                      }
    
    

    Teraz wynikowy Json powinien wyglądać mniej więcej tak. Json_Pub_Setting5

Notatka

Make sure that you have repeated steps 4 and 5 for all the Nodetypes/Microsoft.Compute/virtualMachineScaleSets resource definitions in your template. Jeśli pominiesz którykolwiek z nich, certyfikat nie zostanie zainstalowany na tym zestawie skalowalnym maszyn wirtualnych, a w konsekwencji będziesz mieć nieprzewidywalne wyniki w swoim klastrze, w tym możliwość awarii klastra (jeśli skończysz bez ważnych certyfikatów, które klaster może używać do celów bezpieczeństwa). Sprawdź to dokładnie przed podjęciem dalszych kroków.

Edytuj plik szablonu, aby odzwierciedlić nowe parametry, które dodałeś powyżej.

If you're using the sample from the git-repo to follow along, you can start to make changes in The sample 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON

Edytuj plik parametrów szablonu Resource Manager, dodaj dwa nowe parametry dla secCertificateThumbprint i secCertificateUrlValue.

    "secCertificateThumbprint": {
      "value": "thumbprint value"
    },
    "secCertificateUrlValue": {
      "value": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
     },

Wdróż szablon do Azure

  • Jesteś teraz gotowy do wdrożenia swojego szablonu na platformie Azure. Otwórz wiersz poleceń Azure PowerShell w wersji 1+.
  • Zaloguj się do swojego konta Azure i wybierz konkretną subskrypcję Azure. To ważny krok dla osób, które mają dostęp do więcej niż jednej subskrypcji Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID> 

Przetestuj szablon przed jego wdrożeniem. Użyj tej samej Grupy Zasobów, do której obecnie wdrożony jest Twój klaster.

Test-AzResourceGroupDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Deploy the template to your resource group. Użyj tej samej grupy zasobów, do której obecnie wdrożony jest klaster. Uruchom polecenie New-AzResourceGroupDeployment. Nie musisz określać trybu, ponieważ domyślną wartością jest inkrementalny.

Note

If you set Mode to Complete, you can inadvertently delete resources that are not in your template. Więc nie używaj tego w tym przypadku.

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Here's a filled out example of the same PowerShell.

$ResourceGroup2 = "chackosecure5"
$TemplateFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure_Step2.json"
$TemplateParmFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure.parameters_Step2.json"

New-AzResourceGroupDeployment -ResourceGroupName $ResourceGroup2 -TemplateParameterFile $TemplateParmFile -TemplateUri $TemplateFile -clusterName $ResourceGroup2

Once the deployment is complete, connect to your cluster using the new Certificate and perform some queries. Jeśli jesteś w stanie to zrobić Następnie możesz usunąć stary certyfikat.

Jeśli używasz certyfikatu wystawionego samodzielnie, nie zapomnij zaimportować go do lokalnego magazynu certyfikatów TrustedPeople.

######## Set up the certs on your local box
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)

Dla szybkiego odniesienia oto polecenie do połączenia z bezpiecznym klastrem.

$ClusterName= "chackosecure5.westus.cloudapp.azure.com:19000"
$CertThumbprint= "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00" 

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCertThumbprint $CertThumbprint  `
    -FindType FindByThumbprint `
    -FindValue $CertThumbprint `
    -StoreLocation CurrentUser `
    -StoreName My

For quick reference here's the command to get cluster health

Get-ServiceFabricClusterHealth 

Rozmieszczanie certyfikatów klienta w klastrze.

Możesz użyć tych samych kroków, które zostały opisane w poprzednich krokach, aby wdrożyć certyfikaty z magazynu kluczy do węzłów. Wystarczy, że zdefiniujesz i użyjesz różnych parametrów.

Dodawanie lub usuwanie certyfikatów klienta

Oprócz certyfikatów klastra, można dodać certyfikaty klienta, aby przeprowadzać operacje zarządzania na klastrze Service Fabric.

Możesz dodać dwa rodzaje certyfikatów klienta - administracyjny lub tylko do odczytu. Następnie można ich użyć do kontrolowania dostępu do operacji administracyjnych i operacji zapytań na klastrze. Domyślnie certyfikaty klastrowe są dodawane do listy dozwolonych certyfikatów Administratora.

Możesz określić dowolną liczbę certyfikatów klienta. Każde dodanie/usunięcie powoduje aktualizację konfiguracji klastra Service Fabric.

Dodawanie certyfikatów klienckich - Admin lub Wewnętrzne tylko do odczytu przez portal

  1. Przejdź do sekcji Bezpieczeństwo i wybierz przycisk '+ Uwierzytelnianie' znajdujący się na górze tej sekcji.
  2. W sekcji 'Dodaj uwierzytelnianie' wybierz 'Typ uwierzytelniania' - 'Klient tylko do odczytu' lub 'Klient administratora'
  3. Teraz wybierz metodę autoryzacji. This indicates to Service Fabric whether it should look up this certificate by using the subject name or the thumbprint. Ogólnie rzecz biorąc, używanie metody autoryzacji polegającej na nazwaniu podmiotu nie jest dobrą praktyką bezpieczeństwa.

Usuwanie certyfikatów klienta - Administrator lub tylko do odczytu za pomocą portalu

To remove a secondary certificate from being used for cluster security, Navigate to the Security section and select the 'Delete' option from the context menu on the specific certificate.

Dodawanie certyfikatów aplikacji do zestawu skalującego maszyn wirtualnych

Aby wdrożyć certyfikat, którego używasz dla swoich aplikacji w klastrze, zobacz ten przykładowy skrypt PowerShell.

Next steps

Read these articles for more information on cluster management: