Protección de recursos de clúster con restricciones basadas en contexto

Las restricciones basadas en el contexto ofrecen a los propietarios y administradores de cuentas la posibilidad de definir y aplicar restricciones de acceso a los recursos de IBM Cloud® basadas en el contexto de las solicitudes de acceso. El acceso a los recursos de Red Hat OpenShift on IBM Cloud puede controlarse con restricciones basadas en el contexto y políticas de gestión de identidades y accesos.

Estas restricciones trabajan con políticas de IAM tradicionales, que se basan en la identidad, para proporcionar una capa de protección adicional. A diferencia de las políticas de IAM, las restricciones basadas en contexto no asignan el acceso. Las restricciones basadas en contexto comprueban que una solicitud de acceso provenga de un contexto permitido configurado. Como el acceso de IAM y las restricciones basadas en el contexto imponen el acceso, las restricciones basadas en el contexto ofrecen protección aunque las credenciales estén comprometidas o mal gestionadas. Para obtener más información, consulte Qué son las restricciones basadas en el contexto.

Un usuario debe tener el rol de Administrador en el servicio Red Hat OpenShift on IBM Cloud para crear, actualizar o eliminar reglas. Y un usuario debe tener el rol de Editor o Administrador en el servicio de restricciones basadas en contexto para crear, actualizar o suprimir zonas de red.

Los sucesos de registro de auditoría o Activity Tracker generados proceden del servicio de restricciones basadas en contexto y no de Red Hat OpenShift on IBM Cloud. Para obtener más información, consulte Supervisión de restricciones basadas en contexto.

Los intentos de acceso al plano de control del clúster, que pueden restringirse mediante el tipo de API Cluster, no generan eventos de registro de auditoría ni Activity Tracker.

Cómo se integra Red Hat OpenShift on IBM Cloud con restricciones basadas en contexto

Puede crear restricciones basadas en el contexto (CBR) para las API del plano de control de su clúster o para las API de gestión del clúster IBM Cloud. Con las restricciones basadas en contexto, puede proteger los recursos siguientes.

API del plano de control del clúster
Protege el acceso a las API de Red Hat OpenShift on IBM Cloud para sus clústeres o espacios de nombres específicos en sus clústeres. Por ejemplo, puede proteger la API para crear un espacio de nombres Kubernetes.
API de gestión
Protege el acceso a las API de Red Hat OpenShift on IBM Cloud para clusters específicos. Por ejemplo, puede proteger la API para crear un clúster.

Las aplicaciones que se ejecutan en clústeres Red Hat OpenShift on IBM Cloud, por ejemplo servidores web expuestos por un Kubernetes LoadBalancer no están restringidas por las reglas CBR.

Protección de recursos de clúster

Puede crear reglas CBR para proteger regiones y clústeres específicos.

Clúster
Protege un clúster Red Hat OpenShift on IBM Cloud específico. Si selecciona un clúster en la regla CBR, sólo el tráfico procedente de los recursos de las zonas de red que asocie con la regla puede interactuar con dicho clúster.
Si utiliza la CLI, puede especificar la opción --service-instance CLUSTER-ID para proteger un cluster específico.
Si utiliza la API, puede especificar "name": "serviceInstance","value": "CLUSTER-ID" en los atributos de los recursos.
Región
Protege los recursos Red Hat OpenShift on IBM Cloud en una región específica. Si selecciona una región en la regla CBR, sólo el tráfico procedente de los recursos de las zonas de red que asocie con la regla puede interactuar con los recursos de dicha región.
Si utiliza la CLI, puede especificar la opción --region REGION para proteger los recursos de una región específica.
Si utiliza la API, puede especificar el campo "name": "region","value": "REGION" en los atributos del recurso.
Grupo de recursos
Protege los recursos de Red Hat OpenShift on IBM Cloud en un grupo de recursos específico.
Si utiliza la CLI, puede especificar la opción --resource-group-id RESOURCE-GROUP-ID para proteger los recursos de un grupo de recursos específico.
Si utiliza la API, puede especificar el campo "name": "resourceGroupId","value": "RESOURCE-GROUP-ID" en los atributos del recurso.

Protección de API específicas

Puede crear reglas CBR para proteger los siguientes tipos de API para Red Hat OpenShift on IBM Cloud.

API de plano de control de clúster
Proteja el acceso a las API dentro de los clústeres, como por ejemplo las API para crear espacios de nombres, pods, etc. Las reglas CBR que se aplican al tipo de API de clúster controlan el acceso al servidor de API de clúster, que incluye todos los mandatos oc para ese clúster. Si selecciona las API del plano de control de clúster en la regla CBR, sólo el tráfico procedente de los recursos de las zonas de red que se asocian con dicha regla puede interactuar con las API del plano de control de clúster. Todas las demás solicitudes están bloqueadas.
Si utiliza la CLI, puede especificar la opción --api-types y el tipo crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster.
Si utiliza la API, puede especificar "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster" en la especificación "operations".
API de gestión
Proteja el acceso a las API para suministrar y gestionar clústeres, agrupaciones de nodos trabajadores, etc. Las reglas CBR que se aplican al control de tipo de API de gestión acceden a las API de Red Hat OpenShift on IBM Cloud, que incluye todas las llamadas de mandatos de ibmcloud oc, como ibmcloud oc clusters, ibmcloud oc cluster create, etc. Si selecciona las API de gestión en la regla CBR, los recursos de la zona de red que se asocian con la regla pueden interactuar con las API de gestión.
Si utiliza la CLI, puede especificar la opción --api-types y el tipo crn:v1:bluemix:public:containers-kubernetes::::api-type:management.
Si utiliza la API, puede especificar "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:management" en la especificación "operations".

Para seguir un escenario CBR de ejemplo, consulte Configuración de restricciones basadas en contexto.

Para obtener una lista de objetivos de referencia de servicio en la CLI, ejecute el comando ibmcloud cbr service-ref-targets.

Garantizar que Red Hat OpenShift on IBM Cloud pueda mantener el acceso a otros recursos de IBM Cloud cuando se habilite el CBR para ellos

Debe añadir containers-kubernetes a las zonas de red para las reglas creadas en los servicios siguientes.

Servicio de identidad IAM
Permita que Red Hat OpenShift on IBM Cloud cree señales y claves de API como la clave de API de clúster y la señal y clave de API IBM Cloud Container Registry.
Servicio de gestión de acceso de IAM
Permita que Red Hat OpenShift on IBM Cloud cree una política de acceso de IAM para el rol de acceso de servicio de lector en IBM Cloud Container Registry.
Servicio de grupos de acceso de IAM
Permita que Red Hat OpenShift on IBM Cloud busque grupos de acceso al sincronizar las políticas de acceso de IAM con RBAC en el clúster.
Gestión de usuarios
Permita que Red Hat OpenShift on IBM Cloud acceda a la información de usuario al sincronizar las políticas de acceso de IAM con RBAC en el clúster.
IBM Cloud Object Storage
Permita que Red Hat OpenShift on IBM Cloud realice una copia de seguridad de las imágenes de registro interno en los clústeres de VPC.
Protección de claves:
Permita que Red Hat OpenShift on IBM Cloud habilite el cifrado en el clúster.
Block Storage for VPC (Servidor Protect)
Permita que Red Hat OpenShift on IBM Cloud acceda a los volúmenes de Block Storage for VPC y los cifre.
VPC
Permitir el acceso de Red Hat OpenShift on IBM Cloud a los recursos de la VPC.

Creación de zonas de red

Las zonas de red actúan como listas de elementos permitidos para los recursos de destino que se definen al crear reglas CBR. Después de crear una zona de red o una lista de elementos permitidos, puede crear reglas que definan a qué recursos puede acceder la zona de red.

Asegúrese de añadir el servicio containers-kubernetes a sus zonas de red para las reglas que se aplican a otros recursos de IBM Cloud, como una regla que protege IBM Cloud Object Storage o algunas operaciones de clúster podrían fallar. Para más información, consulte Permitir a Red Hat OpenShift on IBM Cloud acceder a otros recursos de IBM Cloud mediante CBR.

Revise las limitaciones antes de crear zonas de red.

Creación de zonas de red desde la API

Puede crear zonas de red utilizando la API de /v1/zones. Para obtener más información, consulte el apartado Documentos de API. Puede añadir el servicio containers-kubernetes a las zonas de red para permitir que Red Hat OpenShift on IBM Cloud acceda a los recursos y servicios de su cuenta.

Puede incluir varios tipos de dirección en la carga útil de zona de red. Para obtener más información, consulte la carga útil de ejemplo en la documentación de la API.

Carga útil de ejemplo para añadir Red Hat OpenShift on IBM Cloud a una zona de red. El atributo serviceRef para Red Hat OpenShift on IBM Cloud es containers-kubernetes.

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    }
  ]
}

Carga útil de ejemplo para añadir varios servicios, direcciones IP y VPC a una zona de red.

{
  "name": "zone",
  "description": "",
  "addresses": [
    {
      "type": "ipAddress",
      "value": "192.168.0.0"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-east:a/CRN"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-south:a/CRN"
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "cloud-object-storage",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "codeengine",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_type": "platform_service",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "iam-groups",
        "account_id": "ACCOUNT-ID"
      }
    }
  ],
  "excluded": []
}

Creación de zonas de red desde la CLI

  1. Para crear zonas de red desde la CLI, instale el plugin de CLI de CBR.

  2. Puede utilizar el mandato cbr-zone-create para añadir recursos a zonas de red. Para obtener más información, consulte la referencia de CLI de CBR. Tenga en cuenta que service_name para Red Hat OpenShift on IBM Cloud es containers-kubernetes.

    Para encontrar una lista de referencias de servicio disponibles, ejecute ibmcloud cbr service-ref-targets mandato.

    Mandato de ejemplo para añadir el servicio containers-kubernetes a una zona de red.

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=containers-kubernetes
    

    El ejemplo siguiente crea una zona de red para permitir el acceso a una única dirección IP pública. También puede utilizar este ejemplo junto con la regla de un ejemplo de IP. Para obtener más información sobre este escenario, consulte Configuración de restricciones basadas en contexto.

    ibmcloud cbr zone-create --addresses 129.41.86.7 --description "Allow only client IP" --name allow-client-ip
    

Creación de zonas de red desde la consola

  1. Determine los recursos que desea añadir a la lista de elementos permitidos.
  2. Siga los pasos para crear restricciones basadas en contexto en la consola. Añada el servicio Kubernetes a las zonas de red para permitir que Red Hat OpenShift on IBM Cloud acceda a los servicios y recursos de su cuenta.

Creación de reglas

Defina reglas para proteger el acceso a los recursos de su cuenta. Los contextos que defina en las reglas determinan cómo los recursos de las zonas de red (listas de elementos permitidos) pueden interactuar con los recursos definidos en la regla.

Revise las limitaciones antes de crear reglas.

Creación de reglas utilizando la API

Revise las siguientes solicitudes de ejemplo para crear reglas. Para obtener más información sobre la API de v1/rules, consulte la documentación de la API.

Después de crear una regla, puede tardar hasta 10 minutos en actualizar dicha regla debido al almacenamiento en memoria caché de respuesta TTL de IAM.

La siguiente carga útil de ejemplo crea una regla que protege el clúster de CLUSTER-ID. Solo los recursos de la zona NETWORK-ZONE-ID pueden acceder al clúster. Puesto que no se especifica ningún operations, los recursos de la zona NETWORK-ZONE-ID pueden acceder a las API cluster y management.

{
  "description": "Example rule 1",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

La siguiente carga útil de ejemplo crea una regla que protege el clúster de CLUSTER-ID. Sólo los recursos definidos en la zona NETWORK-ZONE-ID pueden acceder al clúster. Puesto que se especifica el tipo de API cluster, los recursos de la zona NETWORK-ZONE-ID pueden acceder al clúster a través de las API de clúster a través de la red privada.

{
  "description": "Example rule 2",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "operations": {
    "api_types": [
      {
        "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
      }
    ]
  },
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

Creación de reglas desde la CLI

  1. Para crear reglas desde la CLI, instale el plugin de CLI CBR.
  2. Puede utilizar ibmcloud cbr rule-create mandato para crear reglas CBR. Para obtener más información, consulte la referencia de CLI de CBR. Tenga en cuenta que service_name para Red Hat OpenShift on IBM Cloud es containers-kubernetes. Para buscar una lista de nombres de servicio, ejecute el mandato ibmcloud cbr service-ref-targets. Para encontrar una lista de tipos de API para un servicio, ejecute el mandato ibmcloud cbr api-types --service-name SERVICE.

Mandato de ejemplo para crear una regla que utilice la clave addresses y el tipo de API cluster y el tipo ipAddress.

ibmcloud cbr rule-create my-rule-1 --service-name containers-kubernetes --api-type crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --zone-id ZONE-ID

El mandato siguiente crea una regla que protege el clúster de CLUSTER-ID. Solo los recursos de la zona de red de NETWORK-ZONE-ID pueden acceder al clúster. Esta regla incluye los tipos de API cluster y management.

ibmcloud cbr rule-create my-rule-2 --service-name containers-kubernetes --service-instance CLUSTER-ID --zone-id NETWORK-ZONE-ID

El siguiente mandato de ejemplo crea una regla que permite todas las conexiones de red privada, pero sólo permite que los recursos de la zona de red allow-client-ip se conecten al clúster a través de la red pública. Para obtener más información sobre este escenario, consulte Configuración de restricciones basadas en el contexto.

ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=allow-client-ip

Creación de reglas desde la consola

  1. Revise los contextos disponibles y determine las reglas que desea crear.
  2. Siga los pasos para crear restricciones basadas en contexto en la consola.

Limitaciones

  • Después de crear, aplicar o inhabilitar la aplicación de una regla, el cambio puede tardar hasta 10 minutos en entrar en vigor.
  • Las siguientes limitaciones se aplican a las reglas CBR de Red Hat OpenShift on IBM Cloud que se aplican a todos los tipos de API o a los tipos de API de cluster:
    • No deben hacer referencia a zonas de red que contengan direcciones IPv6. Las API incluidas en el tipo cluster no admiten IPv6.
    • No deben hacer referencia a otros servicios como IBM Cloud Object Storage o Key Protect en las zonas de red aplicadas.
    • No admiten la aplicación de Report-only para el tipo de API de clúster.
    • Están limitadas a no más de 200 IPs/subredes para reglas privadas, y 500 IPs/subredes para reglas públicas.
  • Para los clústeres de Red Hat OpenShift on IBM Cloud en VPC con un punto final de servicio público, si añade reglas CBR públicas al clúster, asegúrese de añadir también las direcciones IP de pasarela pública de las subredes de VPC a las reglas CBR. Si no incluye las IP de pasarela pública, los pods de consola de Red Hat OpenShift no funcionarán correctamente porque dichos pods necesitan acceder al puerto Oauth del maestro de clúster con la red pública.
  • Algunos clústeres de Red Hat OpenShift on IBM Cloud que se crearon antes del 8 de octubre de 2022 no pueden aplicar reglas CBR públicas para el APIserver del clúster. Para comprobar si el clúster da soporte a estas reglas CBR de tipo de API de clúster público, ejecute el mandato ibmcloud ks cluster get -c <CLUSTER-ID>. Si cualquiera de los URL de punto final de servicio empieza por https://cXXX (donde XXX es cualquier número de tres dígitos), el clúster no admite reglas CBR públicas. Si los URL de punto final de servicio empiezan por https://cX (donde el número después de c es un dígito único), el clúster no puede aplicar reglas CBR públicas para el APIserver del clúster. Para utilizar reglas CBR públicas, debe crear un nuevo clúster.