Habilitación de la comunicación HTTPS en Azure Cloud Services (soporte extendido)
Artículo
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).
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:
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 :
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:
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.
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:
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.
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:
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:
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.
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.
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.
Paso
Vínculo de subsección
Asignación de la suscripción al rol de propietario de la aplicación
Configure la directiva de acceso para el almacén de claves y conceda permiso a la aplicación (de al menos nivel de lectura) para acceder al certificado.
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 tenantIdvariables de cadena , clientIdy 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.
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.