Agregar o quitar certificados para un clúster de Service Fabric de Azure
Se recomienda leer Escenarios de seguridad de los clústeres de Service Fabric para familiarizarse con cómo Service Fabric usa los certificados X.509. Debe entender qué es un certificado de clúster y para qué se usa antes de seguir avanzando.
El comportamiento de carga de certificado predeterminado del SDK de Azure Service Fabric consiste en implementar y usar un certificado definido con un plazo de validez muy amplio; independientemente de la definición de configuración principal o secundaria. Volver al comportamiento clásico no es una acción avanzada recomendada y requiere establecer el valor del parámetro de configuración "UseSecondaryIfNewer" en false en la configuración de Fabric.Code
.
Además de los certificados de cliente, al configurar la seguridad mediante certificados durante la creación del clúster, Service Fabric le permite especificar dos certificados de clúster: uno principal y uno secundario. Consulte la creación de un clúster de Azure a través del portal o la creación de un clúster de Azure a través de Azure Resource Manager para más información sobre cómo configurarlos en el momento de la creación. Si se especifica un único certificado de clúster en el momento de la creación, este se utilizará como el certificado principal. Después de la creación del clúster, puede agregar un nuevo certificado como certificado secundario.
Nota:
Para que un clúster sea seguro, siempre deberá tener implementado al menos un certificado de clúster principal o secundario válido (no revocado ni expirado), o el clúster dejará de funcionar. Cuando falten 90 días para la expiración de todos los certificados válidos, el sistema genera un seguimiento de advertencias y un evento de estado de advertencia en el nodo. Actualmente, estas son las únicas notificaciones que Service Fabric envía con respecto a la expiración del certificado.
Nota:
Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Incorporación de un certificado de clúster secundario mediante el portal
No se pueden agregar certificados de clúster secundarios mediante Azure Portal; use Azure Resource Manager.
Eliminación de un certificado de clúster mediante el portal
Para que un clúster sea seguro, siempre necesitará al menos un certificado válido (no revocado ni expirado). Se utilizará el certificado implementado con el plazo de validez mayor y quitarlo hará que el clúster deje de funcionar; asegúrese de solo quitar el certificado expirado o uno que no se use y expire antes.
Para quitar un certificado de seguridad que no se usa, vaya a la sección Seguridad y seleccione la opción "Eliminar" en el menú contextual del certificado que no se usa.
Si su intención es quitar el certificado marcado como principal, deberá implementar uno secundario con un plazo de validez mayor que el del certificado principal para permitir la sustitución automática; una vez completada la sustitución automática, quite el certificado principal.
Incorporación de un certificado secundario mediante Azure Resource Manager
En estos pasos se da por hecho que está familiarizado con el funcionamiento de Resource Manager, que ha implementado al menos un clúster de Service Fabric mediante una plantilla de Resource Manager, y que tiene a mano la plantilla que utilizó para configurar el clúster. También se da por hecho que está familiarizado con el uso de JSON.
Nota:
Si necesita una plantilla de ejemplo y parámetros para usar como guía o punto de partida, descárguelos desde este git-repo.
Edición de la plantilla de Resource Manager
Para facilitar las siguientes tareas, el ejemplo 5-VM-1-NodeTypes-Secure_Step2.JSON contiene todas las modificaciones que se van a realizar. El ejemplo está disponible en git-repo.
Asegúrese de seguir todos los pasos
Abra la plantilla de Resource Manager que usó para desplegar el clúster. (Si ha descargado el ejemplo del repositorio anterior, use 5-VM-1-NodeTypes-Secure_Step1.JSON para implementar un clúster seguro y, después, abra esa plantilla).
Agregue dos nuevos parámetro "secCertificateThumbprint" y "secCertificateUrlValue" de tipo "string" a la sección de parámetros de la plantilla. Puede copiar el siguiente fragmento de código y agregarlo a la plantilla. En función del origen de la plantilla, esto ya estará definido; si es así, continúe con el paso siguiente.
"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>" } },
Modifique el recurso Microsoft.ServiceFabric/clusters; busque la definición del recurso "Microsoft.ServiceFabric/clusters" en la plantilla. En las propiedades de esa definición, encontrará una etiqueta JSON "Certificate", similar al siguiente fragmento de código JSON:
"properties": { "certificate": { "thumbprint": "[parameters('certificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" }
Agregue una nueva etiqueta "thumbprintSecondary" y asígnele un valor "[parameters('secCertificateThumbprint')]".
Ahora, la definición del recurso debería ser similar a la siguiente (en función del origen de la plantilla, puede que no sea exactamente igual que este fragmento de código).
"properties": { "certificate": { "thumbprint": "[parameters('certificateThumbprint')]", "thumbprintSecondary": "[parameters('secCertificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" }
Si quiere sustituir el certificado, especifique el nuevo certificado como principal y cambie el principal actual a secundario. Esto provoca la sustitución del certificado principal actual por el nuevo certificado en un solo paso de implementación.
"properties": { "certificate": { "thumbprint": "[parameters('secCertificateThumbprint')]", "thumbprintSecondary": "[parameters('certificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" }
Modifique todas las definiciones del recurso Microsoft.Compute/virtualMachineScaleSets; busque la definición del recurso Microsoft.Compute/virtualMachineScaleSets. Desplácese hasta el valor "publisher": "Microsoft.Azure.ServiceFabric", en "virtualMachineProfile".
En la configuración de publicador de Service Fabric, verá algo parecido a esto.
Agregue las nuevas entradas de certificado.
"certificateSecondary": { "thumbprint": "[parameters('secCertificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" } },
Las propiedades tendrán ahora un aspecto similar al siguiente:
Si quiere sustituir el certificado, especifique el nuevo certificado como principal y cambie el principal actual a secundario. Esto se traduce en la sustitución del certificado actual por el nuevo certificado en un solo paso de implementación.
"certificate": { "thumbprint": "[parameters('secCertificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" }, "certificateSecondary": { "thumbprint": "[parameters('certificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" } },
Las propiedades tendrán ahora un aspecto similar al siguiente:
Modifique todas las definiciones del recurso Microsoft.Compute/virtualMachineScaleSets; busque la definición del recurso Microsoft.Compute/virtualMachineScaleSets. Vaya a "vaultCertificates":, en "OSProfile". Tendrá un aspecto similar al siguiente.
Agréguele el valor secCertificateUrlValue. Use el siguiente fragmento de código:
{ "certificateStore": "[parameters('certificateStoreValue')]", "certificateUrl": "[parameters('secCertificateUrlValue')]" }
Ahora, el código JSON resultante será similar al siguiente.
Nota:
Asegúrese de repetir los pasos 4 y 5 para todas las definiciones del recurso Nodetypes/Microsoft.Compute/virtualMachineScaleSets de la plantilla. Si se salta una, el certificado no se instalará en ese conjunto de escalado de máquinas virtuales y tendrá resultados impredecibles en el clúster, incluso el clúster puede deja de funcionar (si finalmente no hay ningún certificado válido que el clúster pueda usar para la seguridad). Así que asegúrese antes de seguir adelante.
Edición del archivo de plantilla para reflejar los nuevos parámetros agregados anteriormente
Si está usando el ejemplo del git-repo para seguir el artículo, puede empezar a hacer estos cambios en el ejemplo 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON.
Modifique el parámetro File de la plantilla de Resource Manager y agregue los dos nuevos parámetros para secCertificateThumbprint y 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>"
},
Implementación de la plantilla en Azure
- Ahora está preparado para implementar la plantilla en Azure. Abra un símbolo del sistema de la versión 1, o superior, de Azure PowerShell.
- Inicie sesión en su cuenta de Azure y seleccione la suscripción específica de a Azure. Este es un paso importante para aquellas personas que tienen acceso a más de una suscripción de Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID>
Pruebe la plantilla antes de implementarla. Utilice el grupo de recursos en el que está implementado el clúster actualmente.
Test-AzResourceGroupDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>
Implemente la plantilla en el grupo de recursos. Utilice el grupo de recursos en el que está implementado el clúster actualmente. Ejecute el comando New-AzResourceGroupDeployment. No es necesario especificar el modo, ya que el valor predeterminado es incremental.
Nota:
Si establece el modo completo, podría eliminar accidentalmente los recursos que no estén en la plantilla. Por ello no lo utilice en este escenario.
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>
Este es un ejemplo ya rellenado del mismo 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
Una vez completada la implementación, conecte el clúster mediante el nuevo certificado y realice algunas consultas. Si puede hacerlo. Después, puede eliminar el antiguo certificado.
Si está utilizando un certificado autofirmado, no olvide importarlo a su almacén de certificados 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)
Como referencia rápida, este es el comando para conectarse a un clúster seguro:
$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
Como referencia rápida, este es el comando para obtener el estado del clúster:
Get-ServiceFabricClusterHealth
Implementación de certificados de cliente en el clúster.
Puede usar los mismos pasos descritos en el paso 5 anterior para implementar los certificados en los nodos desde un almacén de claves. Solo tiene que definir y usar parámetros diferentes.
Incorporación o eliminación de certificados de cliente
Además de los certificados de clúster, puede agregar certificados de cliente para llevar a cabo operaciones de administración en un clúster de Service Fabric.
Puede agregar dos tipos de certificados de cliente: administrador o solo lectura. Estos se pueden usar para controlar el acceso a las operaciones de administración y a las operaciones de consulta en el clúster. De forma predeterminada, los certificados de clúster se agregan a la lista de certificados de administración permitidos.
Puede especificar cualquier número de certificados de cliente. Cada incorporación o eliminación provoca una actualización de la configuración en el clúster de Service Fabric.
Incorporación de certificados de cliente de administrador o de solo lectura mediante el portal
- Vaya a la sección Seguridad y seleccione el botón "+ Autenticación" en la parte superior de la sección.
- En la sección "Agregar autenticación", elija "Cliente de solo lectura" o "Cliente de administración" como "Tipo de autenticación".
- Ahora, elija el método de autorización. Este indicará a Service Fabric si debe buscar este certificado mediante el nombre del firmante o la huella digital. Por lo general, no es una buena práctica de seguridad usar el método de autorización de nombre del firmante.
Eliminación de certificados de cliente de administrador o solo lectura mediante el portal
Para quitar un certificado secundario y dejar de usarlo para la seguridad del clúster, vaya a la sección Seguridad y seleccione “Eliminar” en el menú contextual del certificado especificado.
Incorporación de certificados de aplicación a un conjunto de escalado de máquinas virtuales
Para implementar un certificado que se use para las aplicaciones del clúster, consulte este script de PowerShell de ejemplo.
Pasos siguientes
Lea estos artículos para más información sobre la administración de clústeres: