La comunicación con Microsoft Azure Cloud Services (soporte extendido) se realiza mediante el protocolo Protocolo seguro de transferencia de hipertexto (HTTPS). En este artículo se describe cómo habilitar la comunicación HTTPS para Cloud Services (soporte extendido).
Requisitos previos
Pasos generales para la implementación del proyecto
Los pasos generales para implementar un proyecto de Cloud Services (soporte extendido) en Azure son los siguientes:
Prepare el certificado.
Configura tu proyecto.
Empaquete el archivo del proyecto en los archivos de definición de servicio (.csdef), configuración de servicio (.cscfg) y paquete de servicio (.cspkg) del servicio en la nube.
Cambie la configuración del recurso de Cloud Services (soporte extendido), si es necesario. Por ejemplo, podría realizar cualquiera de las siguientes modificaciones:
- Actualice la dirección URL del paquete.
- Configure la configuración de dirección URL.
- Actualice la configuración de secretos del sistema operativo.
Implemente y actualice el nuevo proyecto en Azure.
Nota:
El proyecto se puede implementar a través de varios métodos diferentes, como mediante las siguientes herramientas:
- Visual Studio
- Una plantilla de Azure Resource Manager (plantilla de ARM)
- Una herramienta de integración continua y entrega continua (CI/CD), como Azure DevOps
Independientemente del método de implementación, los pasos generales de implementación son los mismos.
Los dos primeros pasos son necesarios para todos los métodos de implementación. Estos pasos se describen en la sección Cambios de código . Los pasos restantes también son importantes, pero no siempre requieren intervención manual del usuario. Por ejemplo, una herramienta como Visual Studio podría realizar automáticamente los pasos. Los tres últimos pasos se describen en la sección Cambios de configuración .
Cambios en el código
Para realizar los cambios de código para preparar el certificado y configurar el proyecto, siga estos pasos:
Siga las instrucciones para cargar un certificado en el almacén de claves en el paso 6.
Anote la huella digital del certificado (una cadena hexadecimal de 40 dígitos).
En el archivo de configuración del servicio (.cscfg) del proyecto, agregue la huella digital del certificado al rol en el que desea usar el certificado. Por ejemplo, si desea usar el certificado como certificado SSL para comunicarse con un WebRole, puede agregar código XML similar al fragmento de código siguiente para WebRole1
como primer elemento secundario del elemento raíz ServiceConfiguration
:
<Role name="WebRole1">
<Instances count="1" />
<Certificates>
<Certificate
name="Certificate1"
thumbprint="0123456789ABCDEF0123456789ABCDEF01234567"
thumbprintAlgorithm="sha1"
/>
</Certificates>
</Role>
Puede personalizar el nombre del certificado, pero debe coincidir con el nombre del certificado que se usa en el archivo de definición de servicio (.csdef).
En el archivo de definición de servicio (.csdef), agregue los siguientes elementos.
XPath primario |
Elementos que se van a agregar |
Atributos que se van a usar |
/ServiceDefinition/WebRole/Sites/Site/Bindings |
Binding |
name, endpointName |
/ServiceDefinition/WebRole/Endpoints |
InputEndpoint |
name, protocol, port, certificate |
/ServiceDefinition/WebRole |
Certificates/Certificate |
name, storeLocation, storeName, permissionLevel |
El Certificates
elemento debe agregarse directamente después de la etiqueta de cierre Endpoints
. No contiene ningún atributo. Solo contiene elementos secundarios Certificate
.
Por ejemplo, el archivo de definición de servicio podría parecerse al siguiente código XML:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CSESOneWebRoleHTTPS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="WebRole1" vmsize="Standard_D1_v2">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
<Binding name="HttpsIn" endpointName="HttpsIn" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="Certificate1" />
</Endpoints>
<Certificates>
<Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" />
</Certificates>
</WebRole>
</ServiceDefinition>
En este ejemplo, el archivo de definición de servicio se modifica para enlazar un punto de conexión de entrada del HttpsIn
protocolo HTTPS en el puerto 443. Usa el Certificate1
certificado de un almacén que tiene un nombre de My
y una ubicación de LocalMachine
solo para un nivel de permisos limitado o elevado. Los nombres de certificado de los InputEndpoint
elementos y Certificate
coinciden entre sí. También coinciden con el nombre del certificado que se usó en el archivo de configuración del servicio (.cscfg) del paso anterior.
Cambios en la configuración
Las instrucciones para cambiar la configuración del servicio en la nube difieren según cómo se implementó el servicio en la nube. Estas instrucciones se muestran en las pestañas siguientes. Cada pestaña representa un método de implementación diferente.
Antes de continuar, consulte Implementación de Azure Cloud Services (soporte extendido) mediante Azure Portal. A continuación, siga estos pasos para realizar los cambios de configuración correctos a través de Azure Portal:
Vaya a la entrada de blog titulada Migración manual del servicio en la nube clásico al soporte extendido del servicio en la nube con la plantilla de ARM y siga los pasos del 7 al 9. Estas instrucciones muestran cómo realizar los pasos siguientes:
Empaquetar el proyecto.
Cargue los archivos del paquete de servicio generado (<project-name.cspkg>) y la configuración del servicio en la nube (ServiceConfiguration.Cloud.cscfg) en un contenedor de cuentas de almacenamiento para el servicio en la nube.
Nota:
También tendrá que cargar el archivo de definición de servicio (ServiceDefinition.csdef) mediante el mismo proceso que se describe para los otros dos archivos.
Genere una dirección URL de firma de acceso compartido (SAS) para cada uno de los archivos cargados.
En Azure Portal, vuelva a la página Información general del servicio en la nube y seleccione Actualizar.
En la página Actualizar servicio en la nube, realice los siguientes cambios en la pestaña Aspectos básicos:
En el campo Ubicación de definición de paquete, configuración y servicio, seleccione Desde blob.
En el campo Cargar un paquete (.cspkg, .zip), siga estos pasos:
- Seleccione el vínculo Examinar .
- Seleccione la cuenta de almacenamiento y el contenedor en los que cargó los archivos.
- En la página del contenedor, seleccione el archivo correspondiente (en este caso, project-name.cspkg) y, a continuación, <seleccione el botón Seleccionar.>
Para el campo Cargar una configuración (.cscfg) (y el archivo ServiceConfiguration.Cloud.cscfg ), repita el subprocedimiento que se describe en el paso anterior.
Para el campo Cargar una definición de servicio (.csdef) (y el archivo ServiceDefinition.csdef ), repita el subprocedimiento de nuevo.
Seleccione la pestaña Configuración.
En el campo Almacén de claves, seleccione el almacén de claves en el que cargó el certificado (anteriormente en la sección Cambios de código ). Una vez que el certificado se encuentra en el almacén de claves seleccionado, el certificado enumerado muestra un estado encontrado.
Para implementar el proyecto recién configurado, seleccione el botón Actualizar .
Antes de continuar, consulte Implementación de un servicio en la nube (soporte extendido) mediante Azure PowerShell. A continuación, siga estos pasos para realizar los cambios de configuración mediante un script de PowerShell:
Vaya a la entrada de blog titulada Migración manual del servicio en la nube clásico al soporte extendido del servicio en la nube con la plantilla de ARM y siga los pasos del 7 al 9. Estas instrucciones muestran cómo realizar los pasos siguientes:
Empaquetar el proyecto.
Cargue el archivo del paquete de servicio generado (<project-name.cspkg>) en un contenedor de cuentas de almacenamiento para el servicio en la nube.
Nota:
A pesar de lo que se indica en las instrucciones, no tiene que cargar el archivo de configuración del servicio en la nube (ServiceConfiguration.Cloud.cscfg). Solo el archivo de paquete de servicio debe cargarse aquí.
Genere una dirección URL de firma de acceso compartido (SAS) para el archivo de paquete de servicio cargado.
Inicie sesión en Azure mediante la ejecución del cmdlet Connect-AzAccount .
En el siguiente script de PowerShell, reemplace los marcadores de posición al principio del script por los valores reales de cada variable y, a continuación, ejecute el script para actualizar el servicio en la nube:
# Enter values for placeholders in the following variables.
$vaultName = "<key-vault-resource-name>"
$resourceGroupKeyVault = "<resource-group-name-where-key-vault-is-deployed>"
$certificateName = "<name-of-certificate-saved-in-key-vault>"
$cloudService = @{
Name = "<name-of-cloud-service>"
ResourceGroupName = "<resource-group-name-where-cloud-service-is-deployed>"
SubscriptionId = "<subscription-guid>"
}
$cscfgFilePath = "<local-path-to-your-service-configuration-file-cscfg>"
$cspkgUrl = "<sas-token-url-of-the-service-package-file-cspkg>"
# Code execution
$keyVault = Get-AzKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroupKeyVault
$certificate = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName
$vaultSecretGroupObject = @{
CertificateUrl = $certificate.SecretId
Id = $keyVault.ResourceId
}
$secretGroup = New-AzCloudServiceVaultSecretGroupObject @vaultSecretGroupObject
$osProfile = @{secret = @($secretGroup)}
$cses = Get-AzCloudService @cloudService
$cses.Configuration = Get-Content $cscfgFilePath | Out-String
$cses.PackageUrl = $cspkgUrl
$cses.OSProfile = $osProfile
$cses | Update-AzCloudService
Antes de continuar, consulte Implementación de un servicio en la nube (soporte extendido) mediante plantillas de ARM. A continuación, siga estos pasos para configurar la plantilla de ARM:
Vaya a la entrada de blog titulada Migración manual desde el servicio en la nube clásico al soporte extendido del servicio en la nube con la plantilla de ARM y siga los pasos del 7 al 10. Estas instrucciones muestran cómo realizar los pasos siguientes:
Empaquetar el proyecto.
Cargue los archivos del paquete de servicio generado (<project-name.cspkg>) y la configuración del servicio en la nube (ServiceConfiguration.Cloud.cscfg) en un contenedor de cuentas de almacenamiento para el servicio en la nube.
Genere una dirección URL de firma de acceso compartido (SAS) para cada uno de los archivos cargados.
Obtenga los siguientes valores de la página de certificados del almacén de claves en Azure Portal:
- Dirección URL del certificado de Key Vault
- Id. de suscripción
- Nombre del grupo de recursos en el que se implementa el almacén de claves
- Nombre del servicio para el almacén de claves
En la plantilla de ARM original para el servicio en la nube, busque la osProfile
propiedad . Si el proyecto de servicio en la nube original solo admite la comunicación HTTP, la osProfile
propiedad está vacía ("osProfile": {}
). Para permitir que el servicio en la nube recupere el certificado correcto del almacén de claves correcto, especifique qué almacén de claves desea usar en la plantilla de ARM. Puede usar un parámetro para representar este valor. O bien, puede codificar de forma dura el valor en la plantilla de ARM, como se muestra en el ejemplo siguiente:
"osProfile": {
"secrets": [
{
"sourceVault": {
"id": "/subscriptions/88889999-aaaa-bbbb-cccc-ddddeeeeffff/resourceGroups/cstocses/providers/Microsoft.KeyVault/vaults/cstocses"
},
"vaultCertificates": [
{
"certificateUrl": "https://cstocses.vault.azure.net/secrets/csescert/0123456789abcdef0123456789abcdef"
}
]
}
]
}
En el texto JSON de la plantilla de ARM, el id
valor del sourceVault
parámetro forma parte de la dirección URL de la página key Vault en Azure Portal. El certificateUrl
valor es la dirección URL del certificado del almacén de claves que encontró anteriormente. Los formatos de texto de estos valores se muestran en la tabla siguiente.
Parámetro |
Format |
Identificador del almacén de origen |
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name> |
Dirección URL del certificado de Key Vault |
https://<key-vault-name>.vault.azure.net/secrets/<certificate-name>/<certificate-secret> |
Implemente la plantilla de ARM actualizada que contiene nuevos parámetros, como el token de SAS del paquete, el token de SAS de configuración, etc. Para ver cómo declarar y especificar estos parámetros, puede revisar un archivo de plantilla de ARM de ejemplo y un archivo de parámetros de plantilla de ARM de ejemplo. A continuación, espere a que finalice la implementación.
Nota:
Si recibe un mensaje de error que indica que se usa la dirección IP pública, quite la dirección IP pública del archivo de configuración del servicio (.cscfg) y el archivo de parámetros de plantilla de ARM. No quite la declaración de dirección IP pública del propio archivo de plantilla de ARM.
Antes de continuar, consulte Implementación de Cloud Services (soporte extendido) mediante el SDK de Azure.
En esta sección se describe cómo usar Azure SDK y C# para realizar los cambios de configuración correctos. Para usar correctamente el SDK para implementar el proyecto de servicio en la nube y modificar la configuración relacionada, debe registrar una aplicación en microsoft Entra ID. Para realizar el registro, consulte el artículo Uso del portal para crear una aplicación y una entidad de servicio de Microsoft Entra que puedan acceder a los recursos . En la tabla siguiente se describen los pasos específicos que se deben realizar y la subsección correspondiente que se va a leer en ese artículo.
Siga estos pasos para realizar los cambios de configuración correctos:
Vaya a la entrada de blog titulada Migración manual del servicio en la nube clásico al soporte extendido del servicio en la nube con la plantilla de ARM y siga los pasos del 7 al 10. Estas instrucciones muestran cómo realizar los pasos siguientes:
Empaquetar el proyecto.
Cargue el archivo del paquete de servicio generado (<project-name.cspkg>) en un contenedor de cuentas de almacenamiento para el servicio en la nube.
Nota:
A pesar de lo que se indica en las instrucciones, no tiene que cargar el archivo de configuración del servicio en la nube (ServiceConfiguration.Cloud.cscfg). Solo el archivo de paquete de servicio debe cargarse aquí.
Genere una dirección URL de firma de acceso compartido (SAS) para el archivo de paquete de servicio cargado.
Obtenga los siguientes valores de la página de certificados del almacén de claves en Azure Portal:
- Dirección URL del certificado de Key Vault
- Id. de suscripción
- Nombre del grupo de recursos en el que se implementa el almacén de claves
- Nombre del servicio para el almacén de claves
Descargue el proyecto de ejemplo (un archivo de archivo comprimido) y extraiga su contenido.
Abra el archivo SDKSample\CreateCloudService\CreateCloudService\LoginHelper.cs en un editor de texto. En el InitializeServiceClient
método , sobrescriba los valores de las tenantId
variables de cadena , clientId
y clientCredentials
con los valores para el identificador de inquilino, el identificador de aplicación y el secreto de aplicación, respectivamente. Estos valores son los que copió al registrar la aplicación.
Abra el archivo SDKSample\CreateCloudService\CreateCloudService\Program.cs en un editor de texto. En el Main
método , sobrescriba algunos de los valores inicializados de las variables declaradas al principio del método . En la tabla siguiente se muestran los nombres de variable y los valores que debe usar para ellos.
Nombre de la variable |
Valor nuevo |
m_subId |
Identificador de la suscripción que contiene el servicio en la nube |
csrgName |
Nombre del grupo de recursos que contiene el servicio en la nube |
csName |
Nombre del recurso del servicio en la nube |
kvrgName |
Nombre del grupo de recursos que contiene el recurso del almacén de claves |
kvName |
Nombre del recurso del almacén de claves |
kvsubid |
Identificador de la suscripción que contiene el almacén de claves (esto puede diferir del identificador de suscripción del servicio en la nube) |
secretidentifier |
Dirección URL del certificado del almacén de claves |
filename |
Ruta de acceso local al archivo de configuración del servicio (ServiceConfiguration.Cloud.cscfg) |
packageurl |
Dirección URL de SAS para el archivo de paquete de servicio (project-name.cspkg>)< |
En el panel Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el nodo del proyecto y seleccione Administrar paquetes NuGet. En la pestaña Examinar , busque, seleccione e instale los siguientes paquetes:
Microsoft.Azure.Management.ResourceManager
Microsoft.Azure.Management.Compute
Microsoft.Azure.Management.Storage
Azure.Identity
Microsoft.Rest.ClientRuntime.Azure.Authentication
Ejecute el proyecto y espere a que los mensajes aparezcan en el panel Salida . Si el panel muestra "salir con el código 0", la actualización y la implementación deben funcionar correctamente. Si muestra "salir con el código 1", es posible que tenga que comprobar si hay mensajes de error para revisar los problemas.
Antes de continuar, consulte Creación e implementación en Cloud Services (soporte extendido) en Visual Studio.
En Visual Studio, debe realizar dos cambios de configuración. Configure la configuración del servicio para que el contexto local se alinee con el contexto en la nube y, a continuación, especifique dónde se encuentra el almacén de claves.
Para la configuración del servicio, copie el contenido del contexto en la nube (el archivo ServiceConfiguration.Cloud.cscfg ) y péguelo en el contexto local (el archivo ServiceConfiguration.Local.cscfg ). ¿Tiene una configuración diferente o todavía necesita el archivo de configuración local para otros usos? Si alguna condición es true, conserve los certificate
elementos del contexto local existente.
En el panel Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el nodo del proyecto y, a continuación, seleccione Publicar. Continúe con el Asistente para publicar App de Azure lication hasta que llegue a la pestaña Configuración. En esa pestaña, establezca el campo Almacén de claves en la ubicación en la que se guarda el almacén de claves. Por último, seleccione el botón Publicar y espere a que finalice la implementación.
Después de realizar los cambios de configuración, los clientes podrán comunicarse con el sitio web de servicios en la nube mediante el protocolo HTTPS. Si el certificado está autofirmado, el explorador podría notificar una advertencia de que el certificado no es seguro, pero el explorador no bloqueará la conexión.
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.