Ajouter ou supprimer des certificats pour un cluster Service Fabric dans Azure

Nous vous recommandons de vous familiariser avec la façon dont Service Fabric utilise les certificats X.509 et de prendre connaissance des scénarios de sécurité d’un cluster. Vous devez comprendre ce qu’est un certificat de cluster et quelle est son utilité avant de passer à la suite.

Le comportement de charge de certificat par défaut du SDK Azure Service Fabric consiste à déployer et utiliser le certificat défini avec une date d’expiration plus lointaine, quelle que soit la définition de leur configuration principale ou secondaire. Revenir au comportement classique n’est pas une action avancée recommandée et nécessite d’attribuer au paramètre « UseSecondaryIfNewer » la valeur false dans votre configuration de Fabric.Code.

Lorsque vous configurez la sécurité par certificat lors de la création du cluster, Service Fabric vous permet de spécifier deux certificats de cluster, un principal et un secondaire, en plus des certificats clients. Pour plus d’informations sur la configuration de ces certificats au moment de la création, consultez Création d’un cluster avec le portail ou Création d’un cluster Azure avec Azure Resource Manager. Si vous spécifiez un seul certificat de cluster au moment de la création, celui-ci est utilisé comme certificat principal. Après la création du cluster, vous pouvez ajouter un certificat en tant que certificat secondaire.

Notes

Pour un cluster sécurisé, vous avez toujours besoin d’au moins un certificat de cluster (principal ou secondaire) valide (non révoqué ni arrivé à expiration) déployé. Si cette condition n’est pas remplie, le cluster cesse de fonctionner. 90 jours avant l’expiration de tous les certificats valides, le système génère un suivi d’avertissement et un événement d’avertissement d’intégrité sur le nœud. Il s’agit actuellement des seules notifications Service Fabric envoyées concernant l’expiration du certificat.

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Ajouter un certificat de cluster secondaire à l’aide du portail

Il n’est pas possible d’ajouter un certificat de cluster secondaire via le portail Azure ; utilisez Azure Resource Manager.

Supprimer un certificat de cluster à l’aide du portail

Pour un cluster sécurisé, vous aurez toujours besoin d’au moins un certificat valide (non révoqué et n’ayant pas expiré). Le certificat déployé avec la date d’expiration la plus éloignée sera utilisé et votre cluster cessera de fonctionner après sa suppression. Veillez à supprimer uniquement le certificat expiré ou un certificat non utilisé qui expire au plus tôt.

Pour supprimer un certificat de sécurité de cluster, accédez à la section Sécurité et sélectionnez l’option « Supprimer » dans le menu contextuel du certificat inutilisé.

Si votre intention est de supprimer le certificat marqué comme principal, vous devrez déployer un certificat secondaire avec une date d’expiration plus éloignée que le certificat principal, permettant le comportement de substitution automatique. Supprimez le certificat principal une fois la substitution automatique terminée.

Ajouter un certificat secondaire à l’aide d’Azure Resource Manager

Pour pouvoir exécuter ces étapes, vous devez connaître le fonctionnement de Resource Manager, avoir déployé au moins un cluster Service Fabric à l’aide d’un modèle Resource Manager et disposer du modèle que vous avez utilisé pour configurer le cluster. Il est également supposé que vous maîtrisez l’utilisation de JSON.

Notes

Si vous cherchez un exemple de modèle et de paramètres pour suivre la procédure ou comme point de départ, téléchargez-le dans ce référentiel Git.

Modifier votre modèle Resource Manager

Pour simplifier l’exécution de la procédure, l’exemple 5-VM-1-NodeTypes-Secure_Step2.JSON contient toutes les modifications que nous allons apporter. Cet exemple est disponible dans le référentiel Git.

Suivez bien toutes les étapes

  1. Ouvrez le modèle Resource Manager que vous avez utilisé pour déployer votre cluster. (Si vous avez téléchargé l’exemple à partir du référentiel précédent, utilisez 5-VM-1-NodeTypes-Secure_Step1.JSON pour déployer un cluster sécurisé, puis ouvrez ce modèle).

  2. Ajoutez deux nouveaux paramètres « secCertificateThumbprint » et « secCertificateUrlValue », de type « chaîne » à la section des paramètres de votre modèle. Vous pouvez copier l’extrait de code suivant et l’ajouter au modèle. Selon la source de votre modèle, il se peut que ces paramètres soient déjà définis. Si c’est le cas, passez à l’étape suivante.

       "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. Apportez des modifications à la ressource Microsoft.ServiceFabric/clusters : recherchez la définition de ressource « Microsoft.ServiceFabric/clusters » dans votre modèle. Sous les propriétés de cette définition, vous trouverez la balise JSON « certificate », qui doit ressembler à l’extrait de code JSON suivant :

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

    Ajoutez une nouvelle balise « thumbprintSecondary » et donnez-lui la valeur « [parameters(’secCertificateThumbprint’)] ».

    La définition de ressource doit maintenant ressembler à l’extrait de code ci-dessous (selon la source de votre modèle, il se peut qu’il y ait certaines différences).

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

    Si vous souhaitez substituer le certificat, spécifiez le nouveau certificat comme certificat principal et transformez le certificat principal actuel en certificat secondaire. Cela entraîne la substitution de votre certificat principal actuel par le nouveau certificat en une seule étape de déploiement.

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('secCertificateThumbprint')]",
              "thumbprintSecondary": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    
  4. Apportez des modifications à toutes les définitions de ressource Microsoft.Compute/virtualMachineScaleSets : recherchez la définition de ressource Microsoft.Compute/virtualMachineScaleSets. Accédez à la section « publisher » : « Microsoft.Azure.ServiceFabric », sous « virtualMachineProfile ».

    Dans les paramètres de l’éditeur Service Fabric, vous devriez trouver des propriétés semblables.

    Json_Pub_Setting1

    Ajoutez les nouvelles entrées de certificat.

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

    Les propriétés devraient maintenant ressembler à ceci :

    Json_Pub_Setting2

    Si vous souhaitez substituer le certificat, spécifiez le nouveau certificat comme certificat principal et transformez le certificat principal actuel en certificat secondaire. Cela entraîne la substitution de votre certificat actuel par le nouveau certificat en une seule étape de déploiement.

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

    Les propriétés devraient maintenant ressembler à ceci :
    Json_Pub_Setting3

  5. Apportez des modifications à toutes les définitions de ressource Microsoft.Compute/virtualMachineScaleSets : recherchez la définition de ressource Microsoft.Compute/virtualMachineScaleSets. Accédez à la section "vaultCertificates":, sous "osProfile". Elle devrait ressembler à ceci :

    Json_Pub_Setting4

    Ajoutez le paramètre secCertificateUrlValue. Utilisez l’extrait de code suivant :

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

    Le code JSON obtenu devrait maintenant ressembler à ceci : Json_Pub_Setting5

Notes

Veillez à répéter les étapes 4 et 5 pour toutes les définitions de ressources Nodetypes/Microsoft.Compute/virtualMachineScaleSets de votre modèle. S’il en manque une, le certificat ne sera pas installé sur ce groupe de machines virtuelles identiques et vous obtiendrez des résultats imprévisibles pour votre cluster, ce dernier risquant notamment de s’arrêter (si le cluster ne trouve plus de certificat valide à utiliser pour la sécurité. Vérifiez donc bien avant de continuer.

Modifier votre fichier de modèle pour refléter les nouveaux paramètres ajoutés précédemment

Si vous utilisez l’exemple du référentiel Git pour suivre la procédure, vous pouvez commencer à apporter des modifications à l’exemple 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON.

Modifiez le fichier de paramètres de votre modèle Resource Manager en ajoutant les deux nouveaux paramètres pour secCertificateThumbprint et 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>"
     },

Déployer le modèle sur Azure

  • Vous êtes maintenant prêt à déployer votre modèle sur Azure. Ouvrez une invite de commandes Azure PowerShell version 1 ou ultérieure.
  • Connectez-vous à votre compte Azure, puis sélectionnez l’abonnement Azure concerné. C’est une étape importante pour ceux qui ont accès à plusieurs abonnements Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID> 

Testez le modèle avant de le déployer. Utilisez le groupe de ressources sur lequel votre cluster est actuellement déployé.

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

Déployez le modèle sur votre groupe de ressources. Utilisez le groupe de ressources sur lequel votre cluster est actuellement déployé. Exécutez la commande New-AzResourceGroupDeployment. Vous n’avez pas besoin de spécifier le mode, la valeur par défaut étant incrémentielle.

Notes

Si vous spécifiez le mode Complet, vous risquez de supprimer par inadvertance des ressources qui ne sont pas dans votre modèle. Par conséquent, ne l’utilisez pas dans ce scénario.

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

Voici un exemple renseigné de la même commande 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

Une fois le déploiement terminé, connectez-vous à votre cluster avec le nouveau certificat et effectuez des requêtes. Si vous en avez la possibilité. Vous pouvez ensuite supprimer l’ancien certificat.

Si vous utilisez un certificat auto-signé, n’oubliez pas de les importer dans votre magasin de certificats local 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)

Pour référence, voici la commande pour vous connecter à un cluster sécurisé

$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

Pour référence, voici la commande pour connaître l’intégrité du cluster

Get-ServiceFabricClusterHealth 

Déploiement de certificats clients dans le cluster.

Vous pouvez utiliser la même procédure qu’à l’étape 5 pour déployer les certificats sur les nœuds à partir d’un coffre de clés. Vous devez simplement définir et utiliser des paramètres différents.

Ajout ou suppression de certificats clients

Outre les certificats de cluster, vous pouvez ajouter des certificats clients pour effectuer des opérations de gestion sur un cluster Service Fabric.

Vous pouvez ajouter deux types de certificats clients : administrateur ou en lecture seule. Ces certificats peuvent ensuite être utilisés pour contrôler l’accès aux opérations d’administration et aux opérations de requête sur le cluster. Par défaut, les certificats de cluster sont ajoutés à la liste de certificats administrateur autorisés.

Vous pouvez spécifier autant de certificats clients que vous le souhaitez. Chaque ajout/suppression entraîne une mise à jour de la configuration du cluster Service Fabric.

Ajout d’un certificat client administrateur ou en lecture seule via le portail

  1. Accédez à la section Sécurité, puis sélectionnez le bouton « + Authentification » situé en haut de la section Sécurité.
  2. Dans la section « Ajouter une authentification », choisissez le « Type d’authentification » : « Client en lecture seule » ou « Client administrateur »
  3. Choisissez maintenant la méthode d’autorisation. Ce paramètre indique à Service Fabric si ce certificat doit être recherché en utilisant le nom de l’objet ou l’empreinte. En général, il n’est pas recommandé d’utiliser la méthode d’autorisation faisant appel au nom du sujet.

Ajout de certificat client

Suppression d’un certificat client administrateur ou en lecture seule via le portail

Pour supprimer un certificat secondaire afin de ne plus l’utiliser pour la sécurité du cluster, accédez à la section Sécurité et sélectionnez l’option « Supprimer » dans le menu contextuel du certificat en question.

Ajout de certificats d’application à un groupe de machines virtuelles identiques

Pour déployer un certificat dont vous vous servez pour les applications de votre cluster, consultez cet exemple de script PowerShell.

Étapes suivantes

Lisez les articles suivants pour plus d’informations sur la gestion des clusters :