Přidání nebo odebrání certifikátů clusteru Service Fabric v Azure

Doporučujeme se seznámit s tím, jak Service Fabric používá certifikáty X.509 a znáte scénáře zabezpečení clusteru. Než budete pokračovat, musíte porozumět tomu, co je certifikát clusteru a k čemu se používá.

Výchozím chováním při načítání certifikátů sady Azure Service Fabrics SDK je nasazení a použití definovaného certifikátu s datem vypršení platnosti do budoucna; bez ohledu na jejich primární nebo sekundární definici konfigurace. Návrat k klasickému chování není doporučenou pokročilou akcí a vyžaduje nastavení hodnoty parametru UseSecondaryIfNewer na hodnotu false v rámci vaší Fabric.Code konfigurace.

Service Fabric umožňuje kromě klientských certifikátů zadat dva certifikáty clusteru, primární a sekundární, při konfiguraci zabezpečení certifikátů během vytváření clusteru. Podrobnosti o jejich nastavení v okamžiku vytvoření najdete v tématu vytvoření clusteru Azure prostřednictvím portálu nebo vytvoření clusteru Azure prostřednictvím Azure Resource Manageru. Pokud při vytváření zadáte pouze jeden certifikát clusteru, použije se jako primární certifikát. Po vytvoření clusteru můžete přidat nový certifikát jako sekundární.

Poznámka:

V případě zabezpečeného clusteru budete vždy potřebovat alespoň jeden platný (neodvolaný a nevypršený) certifikát clusteru (primární nebo sekundární) nasazený (pokud ne, cluster přestane fungovat). 90 dní před vypršením platnosti všech platných certifikátů systém vygeneruje trasování upozornění a událost stavu upozornění na uzlu. V současné době se jedná o jediná oznámení, která Service Fabric odesílá ohledně vypršení platnosti certifikátu.

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Přidání certifikátu sekundárního clusteru pomocí portálu

Certifikát sekundárního clusteru nejde přidat prostřednictvím webu Azure Portal; použijte Azure Resource Manager.

Odebrání certifikátu clusteru pomocí portálu

Pro zabezpečený cluster budete vždy potřebovat alespoň jeden platný (neodvolaný a nevypršený) certifikát. Certifikát nasazený s nejbližším datem vypršení platnosti bude používán a odebráním se cluster přestane fungovat; ujistěte se, že odeberete pouze certifikát, jehož platnost vypršela, nebo nevyužitý certifikát, jehož platnost vyprší co nejdříve.

Pokud chcete odebrat nepoužívaný certifikát zabezpečení clusteru, přejděte do části Zabezpečení a v místní nabídce nepoužívaného certifikátu vyberte možnost Odstranit.

Pokud vaším záměrem je odebrat certifikát, který je označený jako primární, budete muset nasadit sekundární certifikát s datem vypršení platnosti dále do budoucnosti než primární certifikát a povolit chování automatického přechodu; po dokončení automatického převodu odstraňte primární certifikát.

Přidání sekundárního certifikátu pomocí Azure Resource Manageru

Tyto kroky předpokládají, že znáte fungování Resource Manageru a nasadili alespoň jeden cluster Service Fabric pomocí šablony Resource Manageru a máte šablonu, kterou jste použili k nastavení clusteru. Předpokládá se také, že používáte JSON.

Poznámka:

Pokud hledáte ukázkovou šablonu a parametry, které můžete použít k sledování, nebo jako výchozí bod, stáhněte si ji z tohoto úložiště git-repo.

Úprava šablony Resource Manageru

Ukázkové 5-VM-1-NodeTypes-Secure_Step2.JSON obsahuje všechny úpravy, které budeme provádět, abychom mohli snadno sledovat. ukázka je k dispozici v úložišti git-repo.

Nezapomeňte postupovat podle všech kroků.

  1. Otevřete šablonu Resource Manageru, kterou jste použili k nasazení clusteru. (Pokud jste si stáhli ukázku z předchozího úložiště, použijte 5-VM-1-NodeTypes-Secure_Step1.JSON k nasazení zabezpečeného clusteru a otevření této šablony).

  2. Přidejte dva nové parametry "secCertificateThumbprint" a "secCertificateUrlValue" typu "string" do oddílu parametrů šablony. Následující fragment kódu můžete zkopírovat a přidat ho do šablony. V závislosti na zdroji šablony už možná máte tyto definice, pokud ano, přejděte k dalšímu 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. Proveďte změny prostředku Microsoft.ServiceFabric/clusters – v šabloně vyhledejte definici prostředku Microsoft.ServiceFabric/clusters. Ve vlastnostech této definice najdete značku JSON "Certificate", která by měla vypadat přibližně jako následující fragment kódu JSON:

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

    Přidejte novou značku "thumbprintSecondary" a dejte jí hodnotu [parameters('secCertificateThumbprint')]".

    Takže teď by definice prostředku měla vypadat nějak takto (v závislosti na zdroji šablony nemusí být úplně stejná jako následující fragment kódu).

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

    Pokud chcete certifikát převést, zadejte nový certifikát jako primární a přesuňte aktuální primární certifikát jako sekundární. Výsledkem je vrácení aktuálního primárního certifikátu na nový certifikát v jednom kroku nasazení.

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('secCertificateThumbprint')]",
              "thumbprintSecondary": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    
  4. Proveďte změny všech definic prostředků Microsoft.Compute/virtualMachineScaleSets – Vyhledejte definici prostředku Microsoft.Compute/virtualMachineScaleSets. Přejděte na "publisher": "Microsoft.Azure.ServiceFabric", v části "virtualMachineProfile".

    V nastavení vydavatele Service Fabric by se mělo zobrazit něco takového.

    Json_Pub_Setting1

    Přidejte do něj nové položky certifikátu.

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

    Vlastnosti by teď měly vypadat takto:

    Json_Pub_Setting2

    Pokud chcete certifikát převést, zadejte nový certifikát jako primární a přesuňte aktuální primární certifikát jako sekundární. Výsledkem je vrácení aktuálního certifikátu do nového certifikátu v jednom kroku nasazení.

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

    Vlastnosti by teď měly vypadat takto:
    Json_Pub_Setting3

  5. Proveďte změny všech definic prostředků Microsoft.Compute/virtualMachineScaleSets – Vyhledejte definici prostředku Microsoft.Compute/virtualMachineScaleSets. Přejděte na "vaultCertificates": v části "OSProfile". měla by vypadat nějak takto.

    Json_Pub_Setting4

    Přidejte do ní hodnotu secCertificateUrlValue. použijte následující fragment kódu:

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

    Výsledný json by teď měl vypadat přibližně takto. Json_Pub_Setting5

Poznámka:

Ujistěte se, že jste v šabloně opakovali kroky 4 a 5 pro všechny definice prostředků Nodetypes/Microsoft.Compute/virtualMachineScaleSets. Pokud některý z nich vynecháte, certifikát se na této škálovací sadě virtuálních počítačů nenainstaluje a v clusteru budete mít nepředvídatelné výsledky, včetně výpadku clusteru (pokud skončíte bez platných certifikátů, které cluster může použít pro zabezpečení. Takže před dalším pokračováním pečlivě zkontrolujte.

Upravte soubor šablony tak, aby odrážel nové parametry, které jste přidali výše.

Pokud k sledování používáte ukázku z úložiště Git, můžete začít provádět změny v ukázkové 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON

Upravte soubor parametrů šablony Resource Manageru a přidejte dva nové parametry pro secCertificateThumbprint a 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>"
     },

Nasazení šablony do Azure

  • Teď jste připraveni nasadit šablonu do Azure. Otevřete příkazový řádek Azure PowerShellu verze 1 nebo novější.
  • Přihlaste se ke svému účtu Azure a vyberte konkrétní předplatné Azure. Toto je důležitý krok pro lidi, kteří mají přístup k více než jednomu předplatnému Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID> 

Před nasazením šablony otestujte. Použijte stejnou skupinu prostředků, do které je váš cluster aktuálně nasazený.

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

Nasaďte šablonu do skupiny prostředků. Použijte stejnou skupinu prostředků, do které je váš cluster aktuálně nasazený. Spusťte příkaz New-AzResourceGroupDeployment. Režim nemusíte zadávat, protože výchozí hodnota je přírůstková.

Poznámka:

Pokud nastavíte režim na Dokončeno, můžete neúmyslně odstranit prostředky, které nejsou v šabloně. Proto ho v tomto scénáři nepoužívejte.

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

Tady je vyplněný příklad stejného PowerShellu.

$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

Po dokončení nasazení se připojte ke clusteru pomocí nového certifikátu a proveďte některé dotazy. Pokud to zvládnete. Starý certifikát pak můžete odstranit.

Pokud používáte certifikát podepsaný svým držitelem, nezapomeňte je importovat do místního úložiště certifikátů 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)

Tady najdete stručný přehled příkazu pro připojení k zabezpečenému clusteru.

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

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

Tady je příkaz pro získání stavu clusteru.

Get-ServiceFabricClusterHealth 

Nasazení klientských certifikátů do clusteru

Stejným postupem, jak je uvedeno v předchozích krocích 5, můžete použít k tomu, aby se certifikáty nasazovaly z keyvaultu do uzlů. Stačí definovat a používat různé parametry.

Přidání nebo odebrání klientských certifikátů

Kromě certifikátů clusteru můžete přidat klientské certifikáty k provádění operací správy v clusteru Service Fabric.

Můžete přidat dva druhy klientských certifikátů – správce nebo jen pro čtení. Ty pak můžete použít k řízení přístupu k operacím správy a operacím dotazů v clusteru. Ve výchozím nastavení se certifikáty clusteru přidají do seznamu povolených certifikátů správce.

Můžete zadat libovolný počet klientských certifikátů. Výsledkem každého přidání nebo odstranění je aktualizace konfigurace clusteru Service Fabric.

Přidání klientských certifikátů – správce nebo jen pro čtení prostřednictvím portálu

  1. Přejděte do části Zabezpečení a v horní části oddílu zabezpečení vyberte tlačítko + Ověřování.
  2. V části Přidat ověřování zvolte Typ ověřování – Klient jen pro čtení nebo Klient pro správu.
  3. Teď zvolte metodu autorizace. To značí Service Fabric, jestli by měl tento certifikát vyhledat pomocí názvu subjektu nebo kryptografického otisku. Obecně platí, že není dobrým postupem zabezpečení používat metodu autorizace názvu subjektu.

Přidání klientského certifikátu

Odstranění klientských certifikátů – správce nebo jen pro čtení pomocí portálu

Pokud chcete odebrat sekundární certifikát, který se používá pro zabezpečení clusteru, přejděte do části Zabezpečení a v místní nabídce konkrétního certifikátu vyberte možnost Odstranit.

Přidání certifikátů aplikací do škálovací sady virtuálních počítačů

Pokud chcete nasadit certifikát, který používáte pro své aplikace do clusteru, podívejte se na tento ukázkový skript PowerShellu.

Další kroky

Další informace o správě clusterů najdete v těchto článcích: