Parmak izi yerine sertifika ortak adını kullanan bir Service Fabric kümesi dağıtma

Hiçbir iki sertifika aynı parmak izine sahip olamaz ve bu da küme sertifikası geçişini veya yönetimini zorlaştırır. Ancak birden çok sertifika aynı ortak ada veya konuya sahip olabilir. Sertifika ortak adlarını kullanan bir küme, sertifika yönetimini çok daha basit hale getirir. Bu makalede, sertifika parmak izi yerine sertifika ortak adını kullanmak için Service Fabric kümesinin nasıl dağıtılacağı açıklanır.

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Sertifika alma

İlk olarak, bir sertifika yetkilisinden (CA) sertifika alın. Sertifikanın ortak adı, sahip olduğunuz ve bir etki alanı kayıt şirketinden satın aldığınız özel etki alanı için olmalıdır. Örneğin, "azureservicefabricbestpractices.com"; Microsoft çalışanı olmayanlar MS etki alanları için sertifika sağlanamaz, bu nedenle lb veya Traffic Manager DNS adlarını sertifikanız için ortak adlar olarak kullanamazsınız ve özel etki alanınızın Azure'da çözümlenebilmesi için bir Azure DNS Bölgesi sağlamanız gerekir. Portalın kümeniz için özel etki alanı diğer adını yansıtmasını istiyorsanız, sahip olduğunuz özel etki alanınızı kümenizin "managementEndpoint" olarak bildirmeniz de gerekir.

Test amacıyla, ücretsiz veya açık bir sertifika yetkilisinden CA imzalı sertifika alabilirsiniz.

Not

Azure portal bir Service Fabric kümesi dağıtılırken oluşturulanlar da dahil olmak üzere otomatik olarak imzalanan sertifikalar desteklenmez.

Sertifikayı bir anahtar kasasına yükleme

Azure'da bir Service Fabric kümesi sanal makine ölçek kümesine dağıtılır. Sertifikayı bir anahtar kasasına yükleyin. Küme dağıtıldığında sertifika, kümenin üzerinde çalıştığı sanal makine ölçek kümesine yüklenir.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force

$SubscriptionId  =  "<subscription ID>"

# Sign in to your Azure account and select your subscription
Login-AzAccount -SubscriptionId $SubscriptionId

$region = "southcentralus"
$KeyVaultResourceGroupName  = "mykeyvaultgroup"
$VaultName = "mykeyvault"
$certFilename = "C:\users\sfuser\myclustercert.pfx"
$certname = "myclustercert"
$Password  = "P@ssw0rd!123"

# Create new Resource Group 
New-AzResourceGroup -Name $KeyVaultResourceGroupName -Location $region

# Create the new key vault
$newKeyVault = New-AzKeyVault -VaultName $VaultName -ResourceGroupName $KeyVaultResourceGroupName -Location $region -EnabledForDeployment 
$resourceId = $newKeyVault.ResourceId 

# Add the certificate to the key vault.
$PasswordSec = ConvertTo-SecureString -String $Password -AsPlainText -Force
$KVSecret = Import-AzKeyVaultCertificate -VaultName $vaultName -Name $certName  -FilePath $certFilename -Password $PasswordSec

$CertificateThumbprint = $KVSecret.Thumbprint
$CertificateURL = $KVSecret.SecretId
$SourceVault = $resourceId
$CommName    = $KVSecret.Certificate.SubjectName.Name

Write-Host "CertificateThumbprint    :"  $CertificateThumbprint
Write-Host "CertificateURL           :"  $CertificateURL
Write-Host "SourceVault              :"  $SourceVault
Write-Host "Common Name              :"  $CommName    

Örnek şablonu indirme ve güncelleştirme

Bu makalede 5 düğümlü güvenli küme örnek şablonu ve şablon parametreleri kullanılmaktadır. azuredeploy.json ve azuredeploy.parameters.json dosyalarını bilgisayarınıza indirin.

Parametre dosyasını güncelleştirme

İlk olarak , azuredeploy.parameters.json dosyasını bir metin düzenleyicisinde açın ve aşağıdaki parametre değerini ekleyin:

"certificateCommonName": {
    "value": "myclustername.southcentralus.cloudapp.azure.com"
},
"certificateIssuerThumbprint": {
    "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},

Ardından certificateCommonName, sourceVaultValue ve certificateUrlValue parametre değerlerini önceki betik tarafından döndürülen değerlerle ayarlayın:

"certificateCommonName": {
    "value": "myclustername.southcentralus.cloudapp.azure.com"
},
"certificateIssuerThumbprint": {
    "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"sourceVaultValue": {
  "value": "/subscriptions/<subscription>/resourceGroups/testvaultgroup/providers/Microsoft.KeyVault/vaults/testvault"
},
"certificateUrlValue": {
  "value": "https://testvault.vault.azure.net:443/secrets/testcert/5c882b7192224447bbaecd5a46962655"
},

Şablon dosyasını güncelleştirme

Ardından , azuredeploy.json dosyasını bir metin düzenleyicisinde açın ve sertifika ortak adını desteklemek için üç güncelleştirme yapın.

  1. Parametreler bölümünde certificateCommonName parametresini ekleyin:

    "certificateCommonName": {
      "type": "string",
      "metadata": {
        "description": "Certificate Commonname"
      }
    },
    "certificateIssuerThumbprint": {
      "type": "string",
      "metadata": {
        "description": "Certificate Authority Issuer Thumpbrint for Commonname cert"
      }
    },
    

    Ayrıca certificateThumbprint'i kaldırmayı da göz önünde bulundurun; artık gerekli olmayabilir.

  2. sfrpApiVersion değişkeninin değerini "2018-02-01" olarak ayarlayın:

    "sfrpApiVersion": "2018-02-01",
    
  3. Microsoft.Compute/virtualMachineScaleSets kaynağında, sanal makine uzantısını parmak izi yerine sertifika ayarlarında ortak adı kullanacak şekilde güncelleştirin. virtualMachineProfile-extensionProfile-extensions-properties-settings-certificate içinde>>>>>

       "commonNames": [
        "[parameters('certificateCommonName')]"
       ],
    

    ve kaldırın "thumbprint": "[parameters('certificateThumbprint')]",.

    "virtualMachineProfile": {
      "extensionProfile": {
        "extensions": [
          {
            "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
            "properties": {
              "type": "ServiceFabricNode",
              "autoUpgradeMinorVersion": true,
              "protectedSettings": {
                "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
                "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
              },
              "publisher": "Microsoft.Azure.ServiceFabric",
              "settings": {
                "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
                "nodeTypeRef": "[variables('vmNodeType0Name')]",
                "dataPath": "D:\\SvcFab",
                "durabilityLevel": "Bronze",
                "enableParallelJobs": true,
                "nicPrefixOverride": "[variables('subnet0Prefix')]",
                "certificate": {
                  "commonNames": [
                     "[parameters('certificateCommonName')]"
                  ],
                  "x509StoreName": "[parameters('certificateStoreValue')]"
                }
              },
              "typeHandlerVersion": "1.0"
            }
          },
    
  4. Microsoft.ServiceFabric/clusters kaynağında API sürümünü "2018-02-01" olarak güncelleştirin. Ayrıca commonNames özelliğine sahip bir certificateCommonNames ayarı ekleyin ve aşağıdaki örnekte olduğu gibi sertifika ayarını (parmak izi özelliğiyle) kaldırın:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        "dependsOn": [
        "[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]"
        ],
        "properties": {
        "addonFeatures": [
            "DnsService",
            "RepairManager"
        ],        
        "certificateCommonNames": {
            "commonNames": [
            {
                "certificateCommonName": "[parameters('certificateCommonName')]",
                "certificateIssuerThumbprint": "[parameters('certificateIssuerThumbprint')]"
            }
            ],
            "x509StoreName": "[parameters('certificateStoreValue')]"
        },
        ...
    

    Not

    'certificateIssuerThumbprint' alanı, belirli bir konu ortak adına sahip beklenen sertifika verenlerin belirtilmesine olanak tanır. Bu alan, SHA1 parmak izlerinin virgülle ayrılmış bir numaralandırması kabul eder. Bunun sertifika doğrulamasının güçlendirilmesi olduğuna dikkat edin. Sertifikayı verenin belirtilmemesi veya boş olmaması durumunda, zinciri oluşturulabiliyorsa sertifika kimlik doğrulaması için kabul edilir ve doğrulayıcı tarafından güvenilen bir kökte biter. Veren belirtilirse, doğrudan verenin parmak izi bu alanda belirtilen değerlerden herhangi biri ile eşleşirse (köke güvenilip güvenilmediğine bakılmaksızın) sertifika kabul edilir. Bir PKI'nın aynı konu için sertifika vermek için farklı sertifika yetkilileri kullanabileceğini ve bu nedenle belirli bir konu için beklenen tüm veren parmak izlerinin belirtilmesi önemli olduğunu lütfen unutmayın.

    Vereni belirtmek en iyi uygulama olarak kabul edilir; devre dışı bırakılsa da çalışmaya devam eder ( güvenilen bir köke kadar zincirlenen sertifikalar için) bu davranışın sınırlamaları vardır ve yakın gelecekte aşamalı olarak değiştirilebilir. Ayrıca, Azure'da dağıtılan ve özel bir PKI tarafından verilen ve konu tarafından bildirilen X509 sertifikaları ile güvenliği sağlanan kümelerin, PKI'nın Sertifika İlkesi bulunabilir, kullanılabilir ve erişilebilir değilse Azure Service Fabric hizmeti (kümeden hizmete iletişim için) tarafından doğrulanamayabilir.

Güncelleştirilmiş şablonu dağıtma

Değişiklikleri yaptıktan sonra güncelleştirilmiş şablonu yeniden dağıtın.

# Variables.
$groupname = "testclustergroup"
$clusterloc="southcentralus"  
$id="<subscription ID"

# Sign in to your Azure account and select your subscription
Login-AzAccount -SubscriptionId $id 

# Create a new resource group and deploy the cluster.
New-AzResourceGroup -Name $groupname -Location $clusterloc

New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateParameterFile "C:\temp\cluster\AzureDeploy.Parameters.json" -TemplateFile "C:\temp\cluster\AzureDeploy.json" -Verbose

Sonraki adımlar