Aplicación de seguridad de extremo a extremo a una aplicación de nube
Esta guía de aprendizaje puede incurrir en costes. Utilice Estimador de costes para generar una estimación del coste basada en el uso previsto.
En esta guía de aprendizaje se muestran los servicios de seguridad clave disponibles en el catálogo de IBM Cloud® y cómo utilizarlos conjuntamente. Una aplicación que proporciona compartición de archivos pondrá en práctica los conceptos de seguridad.
Ninguna arquitectura de aplicación está completa sin una visión clara de los riesgos de seguridad potenciales y de cómo protegerse frente a dicha amenaza. Los datos de la aplicación son un recurso crítico que no se puede perder, comprometer ni robar. Además, los datos deberían protegerse tanto en reposo como en tránsito mediante técnicas de cifrado. El cifrado de los datos en reposo impide que se distribuya la información, incluso si se los datos pierden o son robados. El cifrado de datos en tránsito (por ejemplo, a través de Internet) mediante métodos como HTTPS, SSL y TLS evita que sean espiados y los ataques de tipo hombre en el medio.
Autenticar y autorizar el acceso de los usuarios a recursos específicos es otro requisito común para muchas aplicaciones. Es posible que sea necesario dar soporte a diferentes esquemas de autenticación: clientes y proveedores que utilizan identidades sociales, socios de los directorios alojados en la nube y empleados de un proveedor de identidades de una organización.
Objetivos
- Cifre el contenido en los depósitos de almacenamiento con sus propias claves de cifrado.
- Exigir a los usuarios que se autentiquen antes de acceder a una aplicación.
- Supervisar y auditar las llamadas a la API relacionadas con la seguridad y otras acciones en los servicios en la nube.
En la guía de aprendizaje se utiliza una aplicación de ejemplo que permite a los grupos de usuarios cargar archivos a una agrupación de almacenamiento común y proporcionar acceso a dichos archivos mediante enlaces que se pueden compartir. La aplicación está escrita en Node.js y se implementa como un contenedor en IBM Cloud Kubernetes Service o Red Hat OpenShift on IBM Cloud. Aprovecha varios servicios y funciones relacionados con la seguridad para mejorar la seguridad de la aplicación.
Este tutorial funcionará con un clúster que se ejecute en infraestructura clásica o infraestructura VPC.
- El usuario se conecta a la aplicación.
- Si se utiliza un dominio personalizado y un certificado TLS, el certificado es gestionado y desplegado desde Secrets Manager.
- App ID protege la aplicación y redirige al usuario a la página de autenticación. Los usuarios también pueden registrarse.
- La aplicación se ejecuta en un clúster de Kubernetes desde una imagen almacenada en Container Registry. Esta imagen se explora automáticamente para detectar vulnerabilidades.
- Los archivos cargados se almacenan en Object Storage con los metadatos adjuntos almacenados en IBM Cloudant.
- Los grupos de almacenamiento de objetos, App IDy Secrets Manager servicios aprovechan una clave proporcionada por el usuario para cifrar datos.
- Las actividades de gestión de aplicaciones son registradas por " IBM Cloud Activity Tracker Event Routing " y enviadas a " IBM Cloud Logs " para su análisis.
Antes de empezar
Esta guía de aprendizaje requiere:
- CLI de IBM Cloud,
- plugin de IBM Cloud Kubernetes Service (
kubernetes-service), - plugin de Container Registry (
container-registry),
- plugin de IBM Cloud Kubernetes Service (
kubectlpara interactuar con los clústeres de Kubernetes,gitpara clonar el repositorio de código fuente.
Encontrará instrucciones para descargar e instalar estas herramientas para su entorno operativo en la guía Tutoriales de introducción a la solución.
Para evitar la instalación de estas herramientas, puede utilizar el Cloud Shell desde la consola de IBM Cloud.
Creación de servicios
En la próxima sección, va a suministrar los servicios que utiliza la aplicación.
Decida dónde desea desplegar la aplicación
La ubicación y el grupo de recursos de todos los recursos que cree deben coincidir con la ubicación y el grupo de recursos del clúster de Kubernetes.
Captura de actividades de usuario y de aplicación
El IBM Cloud Activity Tracker Event Routing debe estar configurado para enrutar los eventos de auditoría a una IBM Cloud Logs instancia de destino. Enrute los eventos de auditoría como se describe en la configuración de un destino IBM Logs si no está configurado actualmente en su cuenta.
Al final de esta guía de aprendizaje, revisará los sucesos que se han generado completando los pasos de la guía de aprendizaje.
Creación de un clúster para la aplicación
IBM Cloud Kubernetes Service y Red Hat OpenShift on IBM Cloud proporcionan entornos para desplegar apps de alta disponibilidad en contenedores que se ejecutan en clústeres de Kubernetes.
Omita esta sección si ya tiene un clúster de almacenamiento de archivos seguro ( Kubernetes ) que desea reutilizar con este tutorial. A lo largo del resto de este tutorial, se hace referencia al nombre del clúster como secure-file-storage-cluster, simplemente sustitúyalo por el nombre de su clúster.
Un clúster mínimo con una (1) zona, un (1) nodo trabajador y el menor tamaño disponible (Tipo) son suficientes para esta guía de aprendizaje. Para crear su IBM Cloud Kubernetes Service clúster, siga los pasos para Crear clústeres VPC o Crear clústeres clásicos. Para crear su Red Hat OpenShift on IBM Cloud clúster, siga los pasos para Crear clústeres VPC o Crear clústeres clásicos.
Utilización de sus propias claves de cifrado
Key Protect le ayuda a suministrar claves cifradas para aplicaciones en los servicios de IBM Cloud. Key Protect y IBM Cloud Object Storage trabajan de forma conjunta para proteger sus datos en reposo. En esta sección, creará una clave raíz para el grupo de almacenamiento.
- Cree una instancia de Key Protect.
- Seleccione una ubicación.
- Establezca el nombre en
secure-file-storage-kp. - Seleccione el grupo de recursos donde crear la instancia de servicio y pulse Crear.
- En Claves, pulse el botón Añadir para crear una nueva clave raíz. Se utilizará para cifrar el grupo de almacenamiento y los datos App ID .
- Establezca el tipo de clave en Clave raíz.
- Establezca el nombre en
secure-file-storage-root-enckey. - A continuación, Añadir clave.
Para traer su propia clave (BYOK), importe una clave raíz existente.
Configuración del almacenamiento para los archivos de usuario
La aplicación para compartir archivos guarda los archivos en el cubo de almacenamiento de archivos temporales ( Object Storage ). La relación entre archivos y usuarios se almacena como metadatos en la base de datos IBM Cloudant. En esta sección, creará y configurará estos servicios.
Un grupo para el contenido
- Cree una instancia de Object Storage.
- Seleccione un plan estándar y establezca el nombre como
secure-file-storage-cos. - Utilice el mismo grupo de recursos que para los servicios anteriores y pulse Crear.
- Seleccione un plan estándar y establezca el nombre como
- Seleccione Credenciales de servicio, cree una Nueva credencial.
- Establezca el nombre en
secure-file-storage-cos-acckey. - En Rol, seleccione Escritor.
- En Opciones avanzadas, seleccione Incluir credencial de HMAC. Esto es necesario para generar los URL prefirmados.
- Pulse Añadir.
- Anote las credenciales. Las necesitará en un paso posterior.
- Establezca el nombre en
- Pulse Puntos finales en la barra lateral de navegación:
- Establezca Resiliencia en Regional y establezca Ubicación en la ubicación de destino:
- Para la infraestructura clásica: copie el punto final de servicio Privado . Se utilizará más adelante en la configuración de la aplicación.
- Para la infraestructura de VPC: copie el punto final de servicio Direct . Se utilizará más adelante en la configuración de la aplicación.
Antes de crear el grupo, otorgará el acceso a la instancia de servicio de Object Storage a la clave raíz almacenada en la instancia de servicio de Key Protect.
- Vaya a Administrar > Acceso(IAM)> Autorizaciones en la consola de administración de Internet ( IBM Cloud ).
- Pulse el botón Crear.
- En el menú Servicio de origen, seleccione Almacenamiento de objetos de nube.
- Cambie a Recursos basados en atributos seleccionados, compruebe Instancia de servicio de origen y seleccione la instancia de servicio Object Storage creada anteriormente.
- En el menú Servicio de destino, seleccione Key Protect.
- Cambie a Recursos basados en atributos seleccionados, compruebe ID de instancia, seleccione la instancia de servicio Key Protect creada anteriormente.
- Habilite el rol Lector.
- Pulse el botón Autorizar.
Finalmente, cree el grupo.
- Acceda a la instancia del servicio Object Storage desde la Lista de recursos en Almacenamiento.
- Haga clic en Crear depósito y, a continuación, en Personalizar su depósito.
- Utilice un valor exclusivo para nombre, como por ejemplo
<your-initials>-secure-file-upload. - Establezca Resistencia en Regional.
- Establezca Ubicación en la misma ubicación en la que ha creado la instancia de servicio de Key Protect.
- Establezca Clase de almacenamiento en Estándar
- Utilice un valor exclusivo para nombre, como por ejemplo
- En Integraciones de servicio (opcional)/Cifrado, habilite Gestión de claves
- Seleccione la Key Protect instancia de servicio creada anteriormente pulsando en Utilizar instancia existente
- Seleccione secure-file-storage-root-enckey como la clave y pulse Asociar clave.
- En Integraciones de servicios (opcional) / Supervisión y seguimiento de la actividad, active Seguimiento de la actividad para que los eventos de auditoría se conserven para su análisis.
- Después de pulsar la marca de selección, debe mostrarse la información de servicio para la instancia de Activity Tracker en la región.
- Ahora, habilite Seguimiento de sucesos de datos y seleccione leer y escribir como Sucesos de datos.
- Pulse Crear grupo.
Relaciones de correlación de base de datos entre los usuarios y sus archivos
La base de datos de IBM Cloudant contendrá metadatos para todos los archivos cargados desde la aplicación.
- Cree una instancia del servicio IBM Cloudant.
- Seleccione Cloudant como la oferta.
- Seleccione un entorno Multiarrendatario y una región igual que los servicios anteriores.
- Establezca el nombre en
secure-file-storage-cloudant. - Utilice el mismo grupo de recursos que ha usado para los servicios anteriores.
- Establezca Método de autenticación en IAM.
- Pulse Crear.
- De nuevo en la Lista de recursos, localice el servicio que acaba de crear y pulse sobre el mismo. Nota: tendrá que esperar hasta que el estado cambie a Activo.
- En Credenciales de servicio, cree una Nueva credencial.
- Establezca el nombre en
secure-file-storage-cloudant-acckey. - Para Rol, seleccione Gestor.
- Mantenga los valores predeterminados para los campos restantes.
- Pulse Añadir.
- Expanda las credenciales recién creadas y anote los valores. Las necesitará en un paso posterior.
- En Gestionar, pulse Iniciar panel de instrumentos.
- Haga clic en Crear base de datos para crear una base de datos no particionada llamada
secure-file-storage-metadata.
Autenticación de usuarios
Con App ID, puede proteger los recursos y añadir autenticación a las aplicaciones. Como alternativa no utilizada en esta guía de aprendizaje, App ID puede integrar con Kubernetes Service para autenticar a los usuarios que acceden a las aplicaciones desplegadas en el clúster.
Antes de crear el servicio App ID , otorgue acceso de servicio al servicio Key Protect . Debe ser el propietario de la cuenta o un administrador para la instancia de Key Protect con la que está trabajando. También debe tener al menos acceso de visor para el servicio App ID .
- Vaya a Gestionar > Acceder a IAM > Autorizaciones y haga clic en Crear.
- Seleccione el App ID servicio como su servicio de origen.
- Seleccione Key Protect como servicio de destino.
- Cambie a Recursos basados en atributos seleccionados, compruebe ID de instancia, seleccione la instancia de servicio Key Protect creada anteriormente.
- Asigne el rol Lector bajo acceso de servicio.
- Pulse Autorizar para confirmar la autorización delegada.
Ahora, cree una instancia del servicio App ID .
-
Vaya a la App ID página de creación de servicios.
- Utilice la misma ubicación utilizada para los servicios anteriores.
- Seleccione el Por niveles como plan.
- Establezca el nombre del Servicio como
secure-file-storage-appid. - Seleccione un grupo de recursos igual que los servicios anteriores.
- Seleccione el Key Protect nombre de servicio autorizado y la clave raíz de los menús desplegables respectivos.
- Pulse Crear.
-
En Gestionar autenticación, en el separador Valores de autenticación, añada un URL de redirección web que apunte al dominio que va a utilizar para la aplicación. El formato del URL es
https://secure-file-storage.<Ingress subdomain>/redirect_uri. Por ejemplo:- con el subdominio de ingreso:
mycluster-1234-d123456789.us-south.containers.appdomain.cloud - la dirección de redireccionamiento URL es
https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri.
App ID requiere la redirección web URL a https o http. Puede ver su subdominio de Ingress en el panel de control del clúster o con
ibmcloud ks cluster get --cluster <cluster-name>. - con el subdominio de ingreso:
-
En el mismo separador, bajo Valores de autenticación en Actividad de tiempo de ejecución, habilite los sucesos de captura en IBM Cloud Activity Tracker Event Routing.
-
Crear credenciales de servicio:
- En Credenciales de servicio, cree una Nueva credencial.
- Establezca el nombre en
secure-file-storage-appid-acckey. - Para Rol, seleccione Gestor.
- Mantenga los valores predeterminados para los campos restantes.
- Pulse Añadir.
Debe personalizar los proveedores de identidades utilizados así como el inicio de sesión y la experiencia de gestión de los usuarios en el panel de control de App ID. En esta guía de aprendizaje se utilizan los valores predeterminados para simplificar. En el caso de un entorno de producción, considere la posibilidad de utilizar la autenticación de varios factores (MFA) y reglas avanzadas de contraseña.
Despliegue de la app
Se han configurado todos los servicios. En esta sección desplegará la aplicación de la guía de aprendizaje en el clúster. Todo esto se puede lograr desde un entorno de shell (terminal).
Obtención del código
- Obtenga el código de la aplicación:
git clone https://github.com/IBM-Cloud/secure-file-storage - Vaya al directorio secure-file-storage/app :
cd secure-file-storage/app
Rellenar valores de configuración y credenciales
-
Si no ha iniciado sesión, utilice
ibmcloud loginoibmcloud login --ssopara iniciar sesión de forma interactiva. Establezca como destino la región y el grupo de recursos de IBM Cloud.ibmcloud target -r <region> -g <resource_group>Puede encontrar más mandatos de CLI en el tema Mandatos generales de IBM Cloud CLI (ibmcloud) de la documentación.
-
Establezca las variables de entorno necesarias para generar archivos de configuración en el paso siguiente.
- Empiece estableciendo el nombre del clúster sustituyendo
<YOUR_CLUSTER_NAME>:export MYCLUSTER=<YOUR_CLUSTER_NAME> - Establezca el subdominio ingress utilizando los mandatos
ibmcloud ks:export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname') - Establezca el secreto de ingress utilizando los mandatos
ibmcloud ks:export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName') - Establezca el nombre del repositorio de imágenes en la imagen preconstruida
icr.io/solution-tutorials/tutorial-cloud-e2e-security:export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security - Establezca variables de entorno adicionales sustituyendo los valores predeterminados:
export BASENAME=secure-file-storage - Establezca el espacio de nombres para utilizar:
export TARGET_NAMESPACE=default - Establezca opcionalmente una variable de entorno
$IMAGE_PULL_SECRETsolo si está utilizando un espacio de nombres de Kubernetes distinto del espacio de nombresdefaulty el IBM Cloud Container Registry para la imagen. Esto requiere una configuración adicional de Kubernetes (es decir, la creación de un secreto de registro de contenedor en el nuevo espacio de nombres).
- Empiece estableciendo el nombre del clúster sustituyendo
-
Ejecute el siguiente comando para generar
secure-file-storage.yamlysecure-file-storage-ingress.yaml. Utilizará las variables de entorno que acaba de configurar junto con los archivos de plantillasecure-file-storage.template.yamlysecure-file-storage-ingress.template.yaml../generate_yaml.shPor ejemplo, suponiendo que la aplicación se despliegue en el espacio de nombres Kubernetes predeterminado:
Variables de entorno utilizadas por el script Variable Valor Descripción $IMAGE_PULL_SECRETNo definir cuando se utiliza la imagen proporcionada Un secreto para acceder al registro. $IMAGE_REPOSITORYicr.io/solution-tutorials/tutorial-cloud-e2e-security o icr.io/namespace/image-name El identificador de tipo URL para la imagen creada a partir del URL de registro, el espacio de nombres y el nombre de imagen de la sección anterior. $TARGET_NAMESPACEvalor predeterminado El espacio de nombres Kubernetes en el que se enviará la app. $INGRESS_SUBDOMAINsecure-file-stora-123456.us-south.containers.appdomain.cloud Recupere desde la página de visión general del clúster o con ibmcloud ks cluster get --cluster <your-cluster-name>.$INGRESS_SECRETsecure-file-stora-123456 Recuperar con ibmcloud ks cluster get --cluster <your-cluster-name>.$BASENAMEsecure-file-storage El prefijo utilizado para identificar recursos. -
Copie
credentials.template.envencredentials.env:cp credentials.template.env credentials.env -
Edite
credentials.envy rellene los espacios en blanco con estos valores:- el punto final regional de servicio de Object Storage, el nombre del grupo, las credenciales creadas para el servicio Object Storage,
- las credenciales para secure-file-storage-cloudant,
- y las credenciales de App ID. La variable
appid_redirect_urises una lista separada por comas de URI de redirección tal como se ha descrito anteriormente.
Al utilizar Cloud Shell, puede utilizar
nano credentials.envpara editar el archivo.
Despliegue en el clúster
- Acceda a su clúster como se describe en las instrucciones. Conéctese a través de CLI, accesible desde el menú Acciones... en la página de resumen de su consola.
ibmcloud ks cluster config --cluster $MYCLUSTER --admin - Compruebe que haya un secreto de Ingress disponible en el espacio de nombres de destino. Si no es así, debe crearlo.
Si el secreto de Ingress tiene un CRN, utilice su nombre y CRN para crear un secreto en el espacio de nombres de destino:ibmcloud ks ingress secret ls -c $MYCLUSTERSi el secreto de Ingress no tiene un CRN, utilice el mandato siguiente para volver a crearlo en el espacio de nombres de destino:ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply --namespace=$TARGET_NAMESPACE -f - - Cree el secreto utilizado por la aplicación para obtener las credenciales de servicio:
kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env - Despliegue la app.
kubectl apply -f secure-file-storage.yaml - Despliegue el direccionamiento de red (un servicio ClusterIP e Ingress) para que la app sea accesible desde la Internet pública.
kubectl apply -f secure-file-storage-ingress.yaml
Prueba de la aplicación
Se puede acceder a la aplicación en https://secure-file-storage.<your-cluster-ingress-subdomain>/.
- Vaya a la página de inicio de la aplicación. Se le redirigirá a la página de inicio de sesión predeterminada de App ID.
- Regístrese para obtener una nueva cuenta con una dirección de correo electrónico válida.
- Espere a recibir el correo electrónico en su bandeja de entrada para verificar la cuenta.
- Inicie una sesión.
- Elija el archivo que quiere cargar. Pulse Cargar.
- Utilice la acción Compartir en un archivo para generar un URL prefirmado que se puede compartir con otros para acceder al archivo. El enlace se establece de modo que caduca transcurridos 5 minutos.
Los usuarios autenticados tienen sus propios espacios para almacenar archivos. Aunque no pueden ver los archivos de los demás, pueden generar URL prefirmados para otorgar acceso temporal a un archivo específico.
Puede encontrar más detalles sobre la aplicación en el repositorio de código fuente.
Revisión de sucesos de seguridad
Ahora que la aplicación y sus servicios se han desplegado correctamente, puede revisar los sucesos de seguridad generados por ese proceso. Todos los sucesos están disponibles de forma centralizada en la instancia de IBM Cloud Logs.
- En el panel de control de Observability, seleccione la pestaña Cloud Logs y localice la instancia IBM Cloud Logs que está recibiendo los eventos de auditoría y haga clic en Abrir panel de control.
- Revise todos los registros enviados al servicio a medida que suministraba e interactuaba con los recursos.
Opcional: utilización de un dominio personalizado y cifrado del tráfico de red
De forma predeterminada, se puede acceder a la aplicación en un subdominio genérico de containers.appdomain.cloud. Sin embargo, también se puede utilizar un dominio personalizado con la app desplegada. Para el soporte continuado
de https, para el acceso con tráfico de red cifrado, se debe proporcionar un certificado para el nombre de host deseado o un certificado comodín. Existen diversas combinaciones de servicios que se pueden utilizar para gestionar
nombres DNS y certificados TLS para la integración en una aplicación Kubernetes. Esta guía de aprendizaje utilizará los servicios siguientes:
- Subdominio DNS, secure-file-storage, de su propio dominio DNS personalizado, gestionado por el servicio IBM Cloud Internet Services (CIS). Para simplificar los pasos de esta guía de aprendizaje, utilizaremos example.com para el nombre del dominio DNS personalizado, asegúrese de sustituirlo por el dominio DNS personalizado en todos los pasos.
- Cifremos para generar los certificados TLS.
- IBM Cloud Secrets Manager para integrar con Let's Encrypt para generar el certificado TLS para secure-file-storage.example.com y almacenarlo de forma segura.
- Kubernetes Operador de secretos externos para extraer el certificado TLS secreto directamente de Secrets Manager
En lugar de los pasos siguientes, también puede crear un CNAME que apunte al URI de la app en el proveedor de DNS, generar un certificado TLS e importar sus componentes en Secrets Manager.
Provisión de instancias CIS y Secrets Manager
- Se necesita una instancia de IBM Cloud Internet Services. Utilice una instancia existente o cree una a partir de esta entrada de catálogo. Hay una serie de planes de precios disponibles, incluyendo una prueba gratuita. El proceso de suministro de un nuevo CIS explicará cómo configurar el registrador DNS existente (quizás
no en IBM Cloud) para utilizar los servidores de nombres de dominio proporcionados por CIS. Exporte el dominio personalizado en la ventana de shell:
export MYDOMAIN=example.com - Se requiere una instancia de Secrets Manager. Utilice una instancia existente o cree una nueva descrita en Creación de una instancia de servicio de Secrets Manager. Si crea una instancia nueva, asígnele el nombre secure-file-storage-sm. Puede mejorar la seguridad de sus secretos en reposo integrándolos con la instancia de Key Protect creada anteriormente.
Cree una entrada DNS en la instancia de CIS utilizando el subdominio de Ingress del clúster de Kubernetes como alias.
- Abra la instancia de servicio de CIS ; puede encontrarla en la Lista de recursos.
- Haga clic en la pestaña Fiabilidad a la izquierda.
- Haga clic en la pestaña DNS en la parte superior.
- Desplácese hacia abajo hasta la sección Registros DNS y pulse Añadir para crear un nuevo registro:
- Tipo: CNAME
- Nombre: secure-file-storage
- Alias: el subdominio de Ingress del clúster. Puede obtener el valor correcto en el shell ejecutando el mandato siguiente:
echo $INGRESS_SUBDOMAIN - Pulse Añadir para añadir el nuevo registro.
Conecte la instancia de Secrets Manager a Let's Encrypt.
-
Se necesita una cuenta de Let's Encrypt ACME y el archivo .pem asociado. Utilice uno existente o cree uno:
- Instale acme-account-creación-tool. Creación de una cuenta de Let's Encrypt ACME contiene instrucciones y un enlace a la herramienta de creación.
- Ejecute acme-account-create-tool para crear una cuenta específicamente para este ejemplo de almacenamiento de archivos seguro. A continuación se muestra un ejemplo:
$ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem Account Info { "email": "YOUREMAIL", "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087", "registration_body": { "status": "valid", "contact": [ "mailto:YOUREMAIL" ] } }% $ ls secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
-
Conecte la cuenta de Let's Encrypt ACME a la instancia de Secrets Manager. Consulte Adición de una configuración de entidad emisora de certificados en la interfaz de usuario para obtener más detalles:
- Abra la instancia de servicio Secrets Manager ; puede encontrarla en la Lista de recursos.
- Abra Motores de secretos a la izquierda y pulse Certificados públicos.
- En Entidades emisoras de certificados, pulse Añadir.
- Nombre: LetsEncrypt y Entidad emisora de certificados: Let's Encrypt.
- En Seleccionar archivo, pulse Añadir archivo y elija el archivo secure-file-storage.example.com-private-key.pem o el archivo .pem existente del selector.
- Pulse Añadir.
-
Conecte CIS como proveedor de DNS:
- En proveedores de DNS, pulse Añadir.
- Nombre cis y elija Cloud Internet Services en el desplegable.
- Pulse Siguiente.
- En el separador Autorización, elija la instancia de CIS.
- Pulse Añadir.
-
Solicitar un certificado en Secrets Manager
- Abra el servicio Secrets Manager y seleccione Secretos a la izquierda.
- Pulse Añadir.
- Pulse Certificado público y, a continuación, pulse Siguiente.
- Complete el formulario:
- Nombre: escriba un nombre que pueda recordar.
- Descripción: escriba la descripción que desee.
- PulseSiguiente.
- En Entidad emisora de certificados, seleccione el motor de entidad emisora de certificados Let's Encrypt configurado.
- En Algoritmo de clave, elija el algoritmo que desee,
- Certificados de paquete: déjelo desactivado
- Rotación automática de certificados: déjelo desactivado
- En Proveedor de DNS, seleccione la instancia de proveedor de DNS configurada
- Pulse Seleccionar dominios, elija Seleccionar con comodín, deje el dominio sin seleccionar y pulse Hecho.
- Pulse Siguiente.
- Revise las selecciones y pulse Añadir.
- Pulse el menú de tres puntos verticales para el secreto activo y elija Detalles y copie el CRN del diálogo. Exporte el valor en el shell. Será algo similar a lo siguiente:
export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
-
Esta guía de aprendizaje aprovecha la autorización de servicio a servicio para proporcionar al clúster acceso a la instancia de servicio Secrets Manager y sus secretos gestionados.
- Vaya a la página Autorizaciones de IAM y pulse Crear para añadir una nueva autorización.
- En Origen, seleccione Kubernetes Service y, a continuación, pulse para seleccionar Recursos específicos. A continuación, para Instancia de servicio de origen, elija el clúster.
- En Destino seleccione Secrets Manager y, a continuación, con Recursos específicos e ID de instancia, seleccione la instancia de servicio de Secrets Manager.
- Por último, en Roles, seleccione Gestor y otorgue la autorización pulsando Autorizar.
-
Verifique que los valores de MYDOMAIN y PUBLIC_CERT_CRN se han exportado al entorno:
echo MYDOMAIN $(printenv MYDOMAIN) echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN) -
Cree un secreto de Ingress a partir del nuevo certificado TLS.
ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE -
Ejecute el mandato siguiente para generar nuevas copias de los archivos de configuración. Utilizará todas las variables de entorno que ha configurado junto con los archivos de plantilla
secure-file-storage.template.yamlysecure-file-storage.template-ingress.yaml. Es posible que desee guardar primero la versión actual:cp secure-file-storage.yaml /tmp cp secure-file-storage-ingress.yaml /tmp./generate_yaml.sh -
Aplique los cambios de configuración a su clúster:
kubectl apply -f secure-file-storage-ingress.yaml -
Vuelva al navegador. En la lista de recursos de IBM Cloud, localice el servicio App ID que ha creado y configurado anteriormente e inicie su panel de control de gestión.
- Pulse Gestionar autenticación a la izquierda y la pestaña Valores de autenticación en la parte superior.
- En el formulario Añadir URL de redirección web, añada
https://secure-file-storage.example.com/redirect_uricomo otro URL.
- Ahora todo debería estar correctamente configurado. Pruebe la aplicación accediendo a ella en el dominio personalizado configurado
https://secure-file-storage.<your custom domain>.
Seguridad: rotar credenciales de servicio
Para mantener la seguridad, las credenciales de servicio, las contraseñas y otras claves se deben sustituir (rotar) de forma regular. Muchas políticas de seguridad tienen como requisito cambiar las contraseñas y credenciales cada 90 días o una frecuencia similar. Además, en el caso de que un empleado deje el equipo o en caso de que se produzcan incidencias de seguridad (sospechosas), los privilegios de acceso se deben cambiar inmediatamente.
En esta guía de aprendizaje, se utilizan servicios para distintos fines, desde el almacenamiento de archivos y metadatos mediante la protección del acceso a las aplicaciones hasta la gestión de imágenes de contenedor. La rotación de credenciales de servicio normalmente implica
- renombrar las claves de servicio existentes,
- crear un nuevo conjunto de credenciales con el nombre utilizado anteriormente,
- sustituir los datos de acceso en secretos de Kubernetes existentes y aplicar los cambios,
- y, tras la verificación, desactivar las credenciales antiguas suprimiendo las antiguas claves de servicio.
Ampliación de la guía de aprendizaje
La seguridad se debe gestionar constantemente. Pruebe las sugerencias siguientes para mejorar la seguridad de la aplicación.
- Sustituya IBM Key Protect por Hyper Protect Crypto Services por conseguir mayor seguridad y control sobre las claves de cifrado.
Recursos compartidos
Si desea trabajar con otros en recursos de esta guía de aprendizaje de soluciones, puede compartir todos o sólo algunos de los componentes. IBM Cloud Identity and Access Management (IAM) permite la autenticación de usuarios y de ID de servicio y el control de acceso a los recursos en la nube. Para otorgar acceso a un recurso, puede asignar roles de acceso predefinidos a un usuario, a un ID de servicio o a un grupo de acceso. Se puede crear un grupo de acceso para organizar un conjunto de usuarios y de ID de servicio en una sola entidad. Esto facilita la asignación de acceso. Puede asignar una única política al grupo en lugar de asignar el mismo acceso varias veces por usuario individual o ID de servicio. Por lo tanto, puede organizar grupos para roles en el proyecto de desarrollo y alinear la gestión de la seguridad y de los proyectos.
Encontrará información sobre los servicios individuales y sus roles de acceso de IAM disponibles aquí:
- Kubernetes Service o lo mismo para Red Hat OpenShift on IBM Cloud.
- Container Registry
- App ID
- IBM Cloudant
- Object Storage
- IBM Cloud Activity Tracker Event Routing
- Key Protect
- Secrets Manager
Para empezar, consulte las prácticas recomendadas para la gestión de acceso y cómo definir grupos de acceso.
Eliminación de recursos
Para eliminar el recurso, suprima el contenedor desplegado y luego los servicios suministrados.
Si comparte una cuenta con otros usuarios, asegúrese siempre de suprimir solo sus propios recursos.
-
Suprima la configuración de red desplegada y el contenedor:
kubectl delete -f secure-file-storage-ingress.yamlA continuación, ejecute el siguiente comando:
kubectl delete -f secure-file-storage.yaml -
Suprima los secretos del despliegue:
kubectl delete secret secure-file-storage-credentials -
Si ha utilizado Secrets Manager, elimine el servicio relacionado con la autorización de servicio.
-
En la lista de recursos de IBM Cloud, localice los recursos que se han creado para esta guía de aprendizaje. Utilice el recuadro de búsqueda y secure-file-storage como patrón. Suprima cada uno de los servicios pulsando en el menú de contexto situado junto a cada servicio y eligiendo Suprimir servicio. Tenga en cuenta que el servicio Key Protect solo se puede eliminar después de que se haya suprimido la clave. Pulse la instancia de servicio para ir al panel de control relacionado y para suprimir la clave.
En función del recurso, es posible que no se suprima de inmediato sino que se retenga (durante 7 días de forma predeterminada). Puede reclamar el recurso suprimiéndolo de forma permanente o lo puede restaurar dentro del periodo de retención. Consulte este documento sobre cómo utilizar una reclamación de recurso.