Mejore la seguridad de cloud aplicando restricciones basadas en contexto
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.
Esta guía de aprendizaje le guía a través del proceso de implementación de restricciones basadas en contexto (CBRs) en su cuenta de IBM Cloud. Los CRB le ayudan a proteger más el entorno de nube y a avanzar hacia un modelo de seguridad de confianza cero.
En la guía de aprendizaje se describe cómo crear zonas de red y reglas de contexto y cómo verificar que funcionan. En la guía de aprendizaje, aprenderá a crear los objetos CBR en la consola del navegador y como infraestructura como código con Terraform. También conocerá los criterios sobre cómo definir la estrategia de acceso para los recursos de nube.
Objetivos
- Conozca las restricciones basadas en contexto para proteger sus recursos de cloud
- Definir zonas de red para identificar orígenes de tráfico para acceso permitido y denegado
- Crear reglas que definen el contexto para acceder a los recursos de nube
- Saber cómo probar y supervisar reglas de contexto
El diagrama siguiente muestra la arquitectura de la solución tal como se utiliza en la guía de aprendizaje Aplicar seguridad de extremo a extremo a una aplicación de nube. Los recuadros adicionales con guiones azules alrededor del clúster Kubernetes Service, Container Registry, Key Protecty Object Storage denotan restricciones basadas en contexto implementadas como reglas de contexto. Tenga en cuenta que Secrets Manager también podría haberse protegido, pero sólo es un servicio opcional y no se utiliza en esta guía de aprendizaje.
Antes de empezar
Esta guía de aprendizaje requiere:
- CLI de IBM Cloud,
- Cliente de
dockerpara enviar y extraer imágenes de contenedor.
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 en la consola de IBM Cloud.
Configuración
En un paso posterior, Utilizar Terraform para configurar restricciones basadas en contexto, va a desplegar objetos CBR como capa de seguridad adicional sobre los recursos utilizados en la guía de aprendizaje Aplicar seguridad de extremo a extremo a una aplicación de nube.
-
Despliegue recursos utilizando Terraform gestionado por Schematics tal como se describe en el repositorio GitHub complementario.
-
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.
Visión general: Restricciones basadas en contexto
Restricciones basadas en contexto(CBRs) proporcionan la capacidad de definir y aplicar restricciones de acceso para los recursos de IBM Cloud en función de la ubicación de red y el tipo de solicitudes de acceso. Debido a que tanto las políticas de IAM como las restricciones basadas en el contexto hacen cumplir el acceso, las restricciones basadas en el contexto ofrecen protección incluso ante credenciales comprometidas o mal gestionadas.
Una regla controla el acceso a un recurso identificado por su nombre y tipo de servicio, así como por atributos adicionales. Pueden incluir la región, el grupo de recursos y otras propiedades específicas del servicio. Los atributos de una regla son en su mayoría opcionales, por lo que puede gobernar, por ejemplo, todas las instancias de Key Protect juntas, o dirigirse a un conjunto de claves específico en una instancia de Key Protect identificada.
El contexto de una restricción se compone de zonas de red y puntos finales de servicio. Es posible que desee definir zonas basadas en direcciones IP o rangos específicos, o configurando el tráfico que se origina en una o más VPC o servicios de nube. Con ello, el acceso a la instancia de ejemplo de Key Protect sólo se puede permitir desde, por ejemplo, una instancia de Object Storage específica, un rango conocido de direcciones IP y sólo a través del punto final privado.
Las zonas de red se pueden utilizar para la definición de varias reglas. Las reglas tienen una modalidad de imposición que es una de inhabilitadas, de sólo informe o habilitadas.
Por el momento, no todos los servicios en la nube dan soporte a la modalidad de solo informe. Además, estos servicios tampoco generan entradas de registro relacionadas con CBR cuando están habilitadas. Consulte la documentación de servicio individual para obtener detalles.
Crear zona y regla
Para evaluar el impacto de las restricciones basadas en contexto, va a crear una regla que rija el acceso a un espacio de nombres en Container Registry. Empiece creando ese espacio de nombres y, a continuación, una zona de red para identificar una VPC como origen de tráfico.
- Vaya al Container Registry namespaces y anote el nombre del espacio de nombres configurado anteriormente.
- En la consola de IBM Cloud, pulse el menú Gestionar y seleccione Restricciones basadas en contexto. En la página de visión general, pulse Crear una zona de red.
- Introduzca VPCzone como nombre. En VPC permitidas, seleccione la que tiene el clúster Kubernetes Service. Pulse Siguiente para revisar y, a continuación, Crear la zona.
- A continuación, cree una regla utilizando la zona pulsando Reglas en la navegación de la izquierda y, a continuación, Crear.
- Seleccione Container Registry en la sección Servicio y pulse Siguiente.
- Deje la sección API con Todas las API de servicio pulse Siguiente.
- A continuación, en Recursos, elija Recursos específicos. Elija Tipo de recurso como atributo y especifique namespace como valor. Añada otra condición y configure Resource Name como NAMESPACE (el mismo valor que en el paso 1). Haga clic en Revisar y, a continuación, en Continuar.
- Seleccione la VPCzone que ha creado anteriormente en la lista. A continuación, utilice Añadir y Continuar para ir al último paso del diálogo. Marque Obligatoriedad como Sólo informe. A continuación, cree la regla.
Tenga en cuenta que las zonas y reglas CBR se despliegan de forma asíncrona. Puede tardar hasta unos minutos para que se activen (eventualmente consistentes).
Probar la regla y sus modalidades de aplicación
-
En una nueva pestaña del navegador, abra el servicioIBM Cloud Logs y seleccione la pestaña Cloud Logs y haga clic en el nombre de la instancia que está recibiendo los eventos de auditoría.
-
Inicie una nueva sesión de IBM Cloud Shell en otro separador del navegador.
-
En el shell, ejecute los mandatos siguientes: Establezca una variable de entorno en la región de nube que va a utilizar para Container Registry, por ejemplo, us o de.
export REGION=usEstablece otra variable para el espacio de nombres Container Registry:
export NAMESPACE=<YOUR_NAMESPACE>Ahora inicie sesión en Container Registry.
ibmcloud cr loginA continuación, extraiga una imagen de contenedor en el entorno de shell.
docker pull docker.io/library/hello-world:latestVuelva a etiquetar la imagen para cargarla en el espacio de nombres del registro.
docker tag docker.io/library/hello-world $REGION.icr.io/$NAMESPACE/hello-worldPor último, inserte la imagen del contenedor en el registro.
docker push $REGION.icr.io/$NAMESPACE/hello-world -
Cambie a la pestaña del navegador con el IBM Cloud Logs mostrando los registros de auditoría. En el modo de informe, las entradas de registro se escriben en IBM Cloud Activity Tracker Event Routing cuando una regla coincide, independientemente del resultado de la decisión. El registro de anotaciones tiene detalles sobre la solicitud. En la imagen siguiente, la regla para permitir el acceso a un espacio de nombres Container Registry coincide en el modo de informe.
Una restricción de contexto coincidente en modalidad de informe Como se ha comentado, en modalidad de informe, todas las solicitudes coincidentes generan una entrada de registro. En los detalles del suceso, verá un atributo decision con un valor de Permiso o Denegar. En la captura de pantalla anterior es Denegar.
-
De nuevo en el separador del navegador con el shell, liste las imágenes de contenedor en el espacio de nombres.
ibmcloud cr images --restrict $NAMESPACE -
En una tercera pestaña del navegador, vaya a las reglas CBR. Junto a la regla relacionada con el registro que ha creado anteriormente, pulse el menú de puntos y seleccione Editar. Vaya a Describir la regla (Paso 3) y cambie la regla de Sólo informe a Habilitado. Active el cambio pulsando el botón Aplicar.
-
Vuelva al separador del navegador con IBM Cloud Shell. Emita el mismo mandato que antes para listar las imágenes:
ibmcloud cr images --restrict $NAMESPACEEsta vez, debería dar como resultado un mensaje de error que indica que no está autorizado.
-
En la pestaña del navegador con los registros, debería encontrar un nuevo registro similar al siguiente:
Una restricción de contexto ha representado una denegación La regla se ha aplicado y, en función de cómo ha intentado acceder al registro, se ha denegado el acceso. La razón es que la regla solo permite el acceso desde una VPC específica. El entorno Cloud Shell y su dirección IP, como se documenta en los registros en los campos requestData->environment, difieren. Por lo tanto, se deniega la solicitud.
Cuando trabaje con los registros IBM Cloud Logs, puede utilizar cadenas de consulta como las siguientes para encontrar fácilmente los registros relevantes:
- Cuando está en modalidad de informe,
"context restriction" permit OR denydevuelve las líneas de registro con acceso que habrían representado un Permiso o Denegar. - En la modalidad de informe, puede utilizar
"context restriction" permitpara mostrar sólo el acceso que se hubiera permitido. De forma similar, utilice"context restriction" denypara denegar el acceso. - Por último, cuando esté en modalidad aplicada, utilice una serie de consulta como
context restriction renderedpara las líneas de registro relacionadas con el acceso denegado.
Se recomienda supervisar una nueva regla durante 30 días antes de aplicarla. Obtenga más información sobre Supervisión de restricciones basadas en contexto tanto en modalidad de solo informe como habilitada en la documentación de CBR.
Para prepararse para el despliegue de objetos CBR con Terraform en una sección más abajo, vaya a la pestaña del navegador con las reglas CBR. Allí, suprima la regla creada anteriormente pulsando en su menú de puntos y seleccionando Eliminar y, a continuación, confirmando con Suprimir. A partir de entonces, pulse Zonas de red y suprima la zona creada anteriormente.
Definir la estrategia de acceso para los recursos de nube
Para configurar el conjunto correcto de reglas para restricciones basadas en contexto (CBRs), debe haber definido la estrategia de acceso para los recursos de nube. Todos los recursos deben estar protegidos por la gestión de identidad y acceso (IAM). Esto significa que las comprobaciones de autenticación y autorización deben realizarse antes de que un usuario o ID de servicio acceda a un recurso. Los CRB se añaden a la protección cortando el acceso a la red en función de los criterios de origen y otras reglas, pero no sustituyen la configuración de IAM adecuada. Además, muchos servicios dan soporte a la limitación del tráfico de red a puntos finales privados, con lo que ya se reducen las opciones de acceso.
Es posible que algunas reglas afecten a la comodidad de la administración de recursos, por ejemplo, a través de la consola del navegador. Además, debe asegurarse de que no se deniega el acceso a recursos, paneles de control de gestión y API. Por lo tanto, debe tener en cuenta los hosts de bastión, las redes corporativas, las pasarelas e incluso Cloud Shell. Además, algunos servicios dan soporte a una distinción precisa de plano de datos y acceso de lugar de control para la configuración de CBR, por ejemplo, API de gestión y clúster deKubernetes Service.
En resumen, estas preguntas deben hacerse:
- ¿Todos los recursos están protegidos por IAM y similares?
- ¿Cómo se accede a los recursos, ya están limitados a puntos finales privados cuando es posible?
- ¿Es posible separar el plano de datos y el acceso al plano de control?
- ¿Qué es el tráfico relacionado con el uso, cuál con el trabajo administrativo? ¿Cómo se manejan las emergencias?
- ¿De dónde se origina el tráfico anterior?
Utilice la modalidad de informe para tener en cuenta las actividades que coinciden con las restricciones basadas en contexto. ¿Representan las decisiones basadas en reglas un permiso o una denegación? ¿Coincide eso con su expectativa? Para aprender sobre las actividades y manejarlas correctamente con las reglas CBR, se recomienda una fase de prueba en modo de informe de al menos un mes. Esto permite un enfoque iterativo hacia el conjunto deseado de zonas de red y reglas de contexto.
Para esta guía de aprendizaje, vamos a definir las siguientes zonas de red:
- una zona para el clúster Kubernetes Service
- una zona para Object Storage
- para un rango de IP con las direcciones de una red doméstica (corporativa o bastión) para servir como homezone
A partir de entonces, vamos a definir las reglas de contexto de la siguiente manera:
- para el acceso a la instancia de Key Protect desde las zonas:
- Clúster de Kubernetes Service
- Object Storage
- para el acceso a la instancia de Object Storage y su grupo desde las zonas:
- Clúster de Kubernetes Service
- homezona
- para el acceso a Container Registry y al espacio de nombres con la imagen de contenedor de las zonas:
- Clúster de Kubernetes Service
- para el acceso al clúster Kubernetes Service y su API de gestión desde las zonas:
- homezona
Todas las zonas y reglas anteriores se pueden desplegar en modalidad de solo informe o en modalidad forzada con un único mandato de Terraform. Tenga en cuenta que las reglas no están pensadas para el uso de producción, sino como ejemplo para investigar el uso y el tráfico en modalidad de solo informe.
La documentación tiene una lista de recursos soportados como referencias de servicio. También puede recuperar la lista utilizando el mandato de CLI de service-ref-targets o la función de API relacionada Listar destinos de referencia de servicio disponibles.
Utilizar Terraform para configurar restricciones basadas en contexto
En lugar de crear manualmente las zonas de red y las reglas de contexto para un proyecto, se recomienda automatizar el despliegue. Las restricciones basadas en contexto se pueden desplegar utilizando la infraestructura como código (IaC), es decir, código de Terraform. En primer lugar, puede desplegar las zonas y reglas con reglas en modalidad de solo informe para pruebas. A continuación, después de realizar pruebas exhaustivas, cambie a la modalidad impuesta actualizando la configuración desplegada.
Recursos de Terraform para zonas y reglas
A continuación, desplegará el código de Terraform para crear un conjunto básico de zonas de red y reglas de contexto. El código de las zonas utiliza el recurso ibm_cbr_zone. A continuación se muestra una especificación de zona que identifica el clúster de Kubernetes. Un clúster de este tipo es una de las referencias de servicio soportadas.
resource "ibm_cbr_zone" "cbr_zone_k8s" {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
addresses {
type = "serviceRef"
ref {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
service_instance = data.ibm_container_vpc_cluster.cluster.id
service_name = "containers-kubernetes"
}
}
description = "Zone with the Kubernetes cluster"
name = "cbr_zone_k8s"
}
El código de las reglas utiliza el recurso ibm_cbr_rule. A continuación se muestra la configuración de Terraform para una regla típica. De forma similar a la interfaz de usuario del navegador, tiene los elementos siguientes:
- Contextos para especificar las zonas
- Modalidad de obligatoriedad
- Recursos a los que se aplica, identificados por atributos
resource "ibm_cbr_rule" "cbr_rule_cos_k8s" {
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_k8s.id
}
}
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_homezone.id
}
}
description = "restrict COS access, limit to cluster"
enforcement_mode = var.cbr_enforcement_mode
resources {
attributes {
name = "accountId"
value = data.ibm_iam_account_settings.team_iam_account_settings.account_id
}
attributes {
name = "serviceInstance"
operator = "stringEquals"
value = var.cos.guid
}
attributes {
name = "serviceName"
operator = "stringEquals"
value = "cloud-object-storage"
}
}
}
Desplegar los recursos de Terraform
Con la comprensión de los recursos de Terraform relacionados con CBR, es hora de desplegarlos encima de los recursos existentes para crear zonas y reglas.
- En el navegador, vaya a los espacios de trabajo deIBM Cloud Schematics. Seleccione el espacio de trabajo con los recursos existentes de la configuración anterior.
- Haga clic en Configuración. En la lista de Variables y localice la fila con deploy_cbr. Su valor debe ser false, el valor predeterminado.
- En el menú de puntos de la variable, seleccione Editar. A continuación, en el formulario emergente, desmarque Utilizar valor predeterminado para poder cambiar el valor. Escriba true en el campo para Valor de la variable denominada: deploy_cbr. A partir de entonces, finalice la actualización pulsando Guardar.
- Una vez que se haya actualizado la página de valores, continúe con Generar plan en la parte superior. La salida del plan debería indicar que se crearían zonas y reglas CBR.
- Cree los objetos CBR utilizando el botón Aplicar plan.
De forma predeterminada, la modalidad de imposición está configurada en report-only. Puede cambiar la variable cbr_enforcement_mode por el valor enabled para aplicar las restricciones.
Probar las reglas de contexto
Con el conjunto de restricciones basadas en contexto desplegado, es hora de volver a verificarlas y probarlas. Para verificar los objetos CBR, vaya a la visión general de restricciones basadas en contexto. A continuación, inspeccione las nuevas zonas y reglas.
Las pruebas se deben realizar en Container Registry, Object Storage y Key Protect y se deben validar supervisando los registros como se han realizado anteriormente. Puesto que las zonas y reglas incluyen una restricción de acceso en Container Registry, puede repetir las pruebas realizadas en la sección Probar la regla y sus modalidades de aplicación.
Para probar la nueva regla para acceder a Object Storage, siga estos pasos:
- En un separador del navegador, vaya a la lista de Object Storage. Pulse el nombre de servicio para la guía de aprendizaje, por ejemplo, secure-file-storage-cos.
- En una segunda pestaña del navegador, visite el panel ya utilizado IBM Cloud Logs con los registros de auditoría.
- De nuevo en el separador con la visión general de Object Storage, en la lista de Grupos, pulse el grupo de almacenamiento.
- Utilice Cargar para importar un archivo en el grupo. Deje el valor como Transferencia estándar y utilice el área Cargar archivos (objetos) para seleccionar un archivo. Termina haciendo clic en Cargar.
- De vuelta en la pestaña del navegador con los registros de auditoría, debería haber registros de registro relacionados con CBR titulados
Context restriction matched while in report mode. Esto se debe al hecho de que las reglas se han desplegado en modalidad de informe. Expanda algunos registros para comprobar los datos de decisión y isEnforced notificados. En función del rango de IP configurado para la zona hogareña, decisión puede ser Permiso o Denegar. El valor de isEnforced debe ser false debido a la modalidad de creación de informes.
Para realizar pruebas adicionales, es posible que desee cambiar el rango de IP de la zona homezone. Es la variable homezone_iprange en los valores de Schematics.
Eliminación de recursos
Para eliminar el recurso, utilice el navegador y vaya a la visión general de los espacios de trabajo deIBM Cloud Schematics. Seleccione el espacio de trabajo y, a continuación, en el menú Acciones, seleccione en primer lugar Destruir recursos y, a continuación, utilice Suprimir espacio de trabajo.