Mejores prácticas de seguridad de configuración de Nacos


Prefacio



Como parte importante del desarrollo de software, la gestión de la configuración asume la responsabilidad de conectar el código y el entorno, y puede separar las preocupaciones de los desarrolladores y los encargados del mantenimiento.

La función de gestión de la configuración de Nacos satisface los requisitos de gestión de la configuración de las aplicaciones nativas de la nube: puede lograr tanto la configuración como la separación del código, así como la modificación dinámica de la configuración.

En enero, Nacos tenía una vulnerabilidad de seguridad que permitía a los usuarios externos hacerse pasar por Nacos-server para obtener / modificar la configuración (https://github.com/alibaba/nacos/issues/4593). Después de confirmar el problema, Nacos arregló rápidamente la vulnerabilidad, y el motor de microservicio (MSE) de Alibaba Cloud también retroportó la solución de reparación a la instancia de Nacos en MSE a fines de enero.

En este artículo, comenzaremos desde una perspectiva global y discutiremos cómo garantizar la seguridad de la configuración de Nacos, es decir, cómo garantizar que la información de configuración no sea obtenida o filtrada por usuarios malintencionados.

Arquitectura de configuración de Nacos


La estructura general de la sección de configuración de Nacos es la siguiente:

Para cada enlace de la figura anterior, debe considerar si hay dos acciones de seguridad básicas: autenticación (identificación) y autenticación (autenticación).

Como puede ver en la figura anterior, las posibles formas de filtrar información de configuración son:

  • Obtenga la configuración a través de Nacos-client.

  • Obtenga la configuración a través de la consola.

  • La configuración se obtiene mediante el protocolo de comunicación entre los servidores.

  • Acceso directo a la capa de persistencia (como DB) para configuración.

Los posibles puntos de fuga son los siguientes:


Certificación

Autenticación

Cliente de nacos

Los usuarios no registrados obtienen / modifican la configuración a través del cliente

El usuario obtuvo / modificó la configuración no autorizada a través del cliente.

Configurar la consola

Los usuarios no registrados obtienen / modifican la configuración a través de la consola

Configuración no autorizada obtenida / modificada por el usuario a través de la consola

Dentro del clúster de Nacos

El usuario finge ser un clúster de Nacos para obtener / modificar la configuración

Innecesario

Capa de persistencia

Los usuarios verifican directamente la base de datos, obtienen / modifican la configuración

Innecesario

Autenticación y autenticación del escenario del cliente Nacos


Cuando el cliente de Nacos intenta obtener la configuración del servidor, el servidor necesita confirmar la identidad del cliente y confirmar que la identidad tiene la autoridad para obtener la configuración.

Versión de código abierto de Nacos

En la configuración predeterminada del servidor de Nacos, el cliente no será autenticado, es decir, cualquier usuario que pueda acceder al servidor de Nacos podrá obtener directamente la configuración almacenada en Nacos. Por ejemplo, si un pirata informático irrumpe en la intranet de la empresa, puede obtener todas las configuraciones comerciales, lo que seguramente tendrá riesgos de seguridad.

Por lo tanto, la autenticación del servidor Nacos debe activarse primero. Modifique el valor nacos.core.auth.enabled en application.properties a verdadero en el servidor Nacos:

nacos.core.auth.enabled=true


Después de la configuración anterior, cuando el cliente de Nacos obtiene la configuración, necesita establecer el nombre de usuario y la contraseña correspondientes para obtener la configuración:

String serverAddr = "{serverAddr}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);properties.put("username","nacos-readonly");properties.put("password","nacos");ConfigService configService = NacosFactory.createConfigService(properties);

Lo anterior hablaba de cómo autenticar a un usuario, es decir, cómo determinar qué usuario está accediendo actualmente, pero también es necesario identificar la autoridad del usuario. Cuando el usuario no tiene la autoridad para obtener la configuración correspondiente, como cuando el inventario el servicio intenta obtener la configuración del servicio de pago, fallará.

Podemos crear usuarios y establecer permisos en la consola de código abierto de Nacos. Proceder de la siguiente:

Primero, vaya a localhost: 8848 / nacos e inicie sesión, control de acceso -> página Lista de usuarios , agregue un usuario:

En control de acceso -> Gestión de roles , vincule usuarios y roles:


Agregue permisos a los roles correspondientes. En el  control de permisos -> página de administración de permisos  , agregue permisos:

Después de la configuración anterior, el usuario de solo lectura solo puede acceder a la configuración en el espacio de nombres público.


Nube de Alibaba MSE-AK / SK

Para equipos pequeños, es suficiente usar el nombre de usuario y la contraseña para la autenticación. Sin embargo, para equipos grandes y medianos, los cambios regulares de contraseña y los cambios frecuentes de personal provocarán cambios frecuentes en los nombres de usuario y contraseñas.

En este momento, el uso de la autenticación de autenticación de nombre de usuario y contraseña requiere modificaciones frecuentes y lanzamiento de aplicaciones. Para resolver este problema, Nacos también proporciona un esquema de autenticación basado en AK / SK y un esquema para que ECS asocie roles de RAM, lo que puede evitar problemas frecuentes de publicación causados ​​por la modificación del nombre de usuario y la contraseña.

Tome Alibaba Cloud MSE como ejemplo. Los usuarios de Alibaba Cloud generalmente han utilizado el Servicio de control de acceso (RAM) de Alibaba Cloud como sistema de permisos. Si MSE es lo mismo que el código abierto, si el nombre de usuario y la contraseña se utilizan para autenticación y autenticación, entonces el usuario debe iniciar sesión en la RAM y MSE Nacos configura los permisos en dos lugares. Esto no solo es un inconveniente para la administración y revisión unificadas de los permisos de los usuarios, sino que también brinda una experiencia incoherente a los usuarios.

Por lo tanto, MSE (Micro Service Engine) proporciona un método de autenticación basado en AK / SK. El ejemplo de operación es el siguiente:

Primero, en un ejemplo de aplicación Nacos MSE (y observe la identificación de la instancia), luego los ejemplos Detalles -> Interfaz de preferencias  , el parámetro ConfigAuthEnabled (configurar autenticación) se establece en verdadero, de modo que los usuarios anónimos no pueden obtener la configuración:

Luego, puede configurar los permisos relacionados en el sistema Alibaba Cloud RAM. El sistema de permisos de las subcuentas de RAM se puede expresar simplemente de la siguiente manera:

  • Paso 1: cree una política de permisos de RAM de la siguiente manera:

En la figura, mse: Get *, mse: List *, mse: Query * indican que se puede leer la configuración y mse: * indica todos los permisos, incluidos los de modificación.

acs: mse: *: *: instancia / $ {instanceId} significa autorización al nivel de instancia, acs: mse: *: *: instancia / $ {instanceId} / $ {namespaceId} significa autorización al nivel de espacio de nombres.

  • Paso 2: cree usuarios y otorgue permisos:

Complete el nombre de usuario:

Luego obtenga el AK / SK del usuario:

Otorgue a este usuario los permisos correspondientes:

  • Finalmente, simplemente agregue AK / SK al código:

String serverAddr = "{serverAddr}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}");properties.put(PropertyKeyConst.SECRET_KEY, "${secret}");ConfigService configService = NacosFactory.createConfigService(properties);


Después de la configuración anterior, cuando el cliente accede a la instancia de Nacos comprada en el MSE , el MSE verificará el AK y la firma, confirmará que el usuario es un usuario legítimo y verificará la autoridad ; de lo contrario, se negará a brindar servicios.

Alibaba Cloud MSE: autenticación de rol Ram basada en ECS

Por supuesto, en el método de uso anterior, aún necesita configurar AK / SK en la configuración inicial (como el archivo bootstrap.yml en srping-cloud-alibaba-nacos-config). Cuando los piratas informáticos invaden la intranet o filtran el código fuente, también habrá filtraciones de AK / SK, lo que conlleva el riesgo de filtraciones de información de configuración .

En este caso, se recomienda utilizar la función de RAM asociada con ECS para la autenticación.

El modelo de autorización correspondiente al rol RAM asociado a ECS es el siguiente:

Los pasos clave mencionados anteriormente son el juego de roles. Solo el servidor en la nube asociado con la función de RAM puede desempeñar correctamente la función y obtener el permiso para operar la instancia de MSE Nacos.

Si el pirata informático solo obtiene el código, no puede desempeñar con éxito el papel de RAM y no puede operar la instancia de MSE Nacos. Si la máquina se ve comprometida, la función asociada con el servidor en la nube también se puede cancelar en la consola de Alibaba Cloud para detener la pérdida de tiempo.

Los pasos específicos son los siguientes:

  • El primer paso es crear una instancia de MSE Nacos y crear una política de permisos correspondiente (explicada anteriormente, por lo que no la repetiré aquí).

  • El segundo paso es crear un rol de RAM y autorizarlo.

Crear rol de RAM:

Después de crear un rol, agregue la política de permisos correspondiente para el rol:


  • El tercer paso es asociar el rol con ECS:

En la página de detalles de ECS correspondiente , haga clic en el rol de RAM otorgado / retirado :

Seleccione el rol correspondiente y otorgue :

  • El paso final en los roles de RAM especificados por  el código puede:

String serverAddr = "{serverAddr}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "StoreServiceRole");
ConfigService configService = NacosFactory.createConfigService(properties);

Después de la configuración anterior, cuando el cliente de Nacos obtenga la configuración, el servidor en la nube desempeñará la función de RAM designada y el token de seguridad temporal de Alibaba Cloud (Security Token Service, STS) accederá a la instancia de MSE Nacos.

Si el atacante obtiene el código, no se puede ejecutar en otras máquinas porque la máquina del atacante no tiene la autoridad para desempeñar el papel de RAM.

Si el atacante obtiene la información de autenticación después de la suplantación, debido a la falla breve del STS (el valor predeterminado es 1 hora), el atacante fallará poco después de obtenerla, reduciendo efectivamente la superficie de ataque.

Si necesita revocar la autorización, solo debe hacerlo en la consola de Alibaba Cloud y no es necesario que vuelva a publicar la aplicación.

En comparación con la autenticación y autenticación AK / SK, la autenticación y autenticación de los roles asociados con ECS es más controlable y segura, por lo que se recomienda este método de autenticación y autenticación.

Configurar la autenticación y la autenticación en escenarios de consola



Versión de código abierto de Nacos

En la versión de código abierto de la consola de Nacos, al iniciar sesión, obtendrá un accessToken temporal a través de la interfaz de inicio de sesión de la consola, y luego las operaciones posteriores utilizarán el accessToken para la autenticación.

Por ejemplo, el usuario de solo lectura mencionado anteriormente, después de iniciar sesión, solo puede ver la información de configuración en el espacio de nombres público y no puede modificar ni ver la información de configuración en otros espacios de nombres.

Además, si necesita crear o eliminar un espacio de nombres, solo puede iniciar sesión como administrador.

Para la autenticación y autorización de la versión de código abierto de Nacos, consulte este documento: https://nacos.io/zh-cn/docs/auth.html.


Alibaba Cloud MSE

Dado que Alibaba Cloud MSE brinda servicios a empresas, la división de permisos será más refinada.

Los recursos se dividen en nivel de instancia (acs: mse: *: *: instancia / $ {instanceId}) y nivel de espacio de nombres (acs: mse: *: *: instancia / $ {instanceId} / $ {namespaceId}).

El funcionamiento de los recursos también es más refinado, como:

Acción

Descripción

CreateEngineNamespace

Crea un espacio de nombres

DeleteEngineNamespace

Eliminar espacio de nombres

mse:Get*,mse:List*,mse:Query*

Leer configuración (cliente y consola de Nacos)

mse:*

Todos los permisos, incluida la modificación y eliminación de la configuración

mse:QueryNacosConfig

Configuración de lectura del cliente

mse:UpdateNacosConfig

El cliente modifica la configuración

Por ejemplo, solo se permite leer la configuración de un espacio de nombres y no se permite ninguna modificación. La política de permisos se puede escribir:

{  "Action": [    "mse:Get*",    "mse:List*",    "mse:Query*"  ],  "Resource": [    "acs:mse:*:*:instance/${instanceId}/${namespaceId}"  ],  "Effect": "Allow"}




Autenticación entre servidores


Parte de la información debe sincronizarse entre los servidores de Nacos. En este momento, la identidad de la otra parte debe autenticarse para confirmar que la otra parte es realmente el servidor de Nacos, en lugar de estar disfrazada.

Antes de la 1.4.1, la autenticación se realizaba a través del encabezado User-Agent. Este método de autenticación original se puede falsificar fácilmente. Como se mencionó al inicio de este artículo, esta es la razón de la vulnerabilidad que rompió Nacos en enero.

Por lo tanto, en las versiones 1.4.1 y posteriores, usted mismo puede configurar el encabezado certificado y el valor correspondiente. En application.properties, modifique los siguientes valores:

# 不使用User-Agent来认证nacos.core.auth.enable.userAgentAuthWhite=false# 认证header的keynacos.core.auth.server.identity=Authorization# 认证header的valuenacos.core.auth.server.identity.value=secret


De esta manera, solo después de que se envía la Authorization: secretsolicitud de encabezado se puede confirmar que la otra parte es el servidor y se puede sincronizar la información del clúster; de lo contrario, se rechaza la sincronización.

Dado que el servidor Nacos necesita todos los permisos para sincronizar los datos de configuración, no hay necesidad de autenticación entre los servidores Nacos.

De esta forma, la comunicación entre los servidores también puede ser segura y confiable.

La instancia de Nacos comprada en Alibaba Cloud MSE también ha respaldado la solución anterior a la versión 1.2, y no habrá problemas de seguridad correspondientes.

Seguridad de la capa de persistencia



La información de configuración de Nacos se almacena en la capa de persistencia. Por ejemplo, la capa de persistencia predeterminada de Nacos es MySQL.

Para evitar que el nombre de usuario y la contraseña de MySQL se filtren a través de git u otros métodos, debemos modificar el nombre de usuario y la contraseña de MySQL con regularidad.

La práctica habitual es utilizar dos usuarios de base de datos, como UserA y UserB. Si desea actualizar la contraseña, proceda de la siguiente manera:

  • Cambie el usuario del servidor Nacos para acceder a la base de datos de UserA a UserB.

  • Actualice la contraseña de UserA.

  • Cambie el usuario del servidor Nacos para acceder a la base de datos de UserB a UserA.

  • Actualice la contraseña de UserB.

Como producto de Alibaba Cloud, MSE tiene la política de cambiar regularmente el nombre de usuario y la contraseña de la base de datos, por lo que si ha comprado una instancia de MSE, no debe preocuparse por este problema.

Mejores prácticas de seguridad de configuración



Pasando por los puntos clave de la seguridad de la configuración de Nacos, ¿cómo podemos garantizar la seguridad de la configuración? Solo necesita realizar las siguientes prácticas recomendadas:

1. Modifique periódicamente la contraseña y ak / sk

En el caso de usar la autenticación de nombre de usuario y contraseña de Nacos (o AK / SK) (como usar el método de autenticación de Nacos de código abierto), si un usuario malintencionado obtiene el nombre de usuario y contraseña de Nacos (o AK / SK), entonces puede obtener el Configuración de la aplicación. Sin embargo, si la contraseña o AK / SK se cambian con regularidad, el período de tiempo para la fuga de configuración puede limitarse de manera efectiva y la superficie de ataque puede reducirse.

2. Utilice roles de ECS (uso recomendado)

Por supuesto, en la solución anterior, todavía habrá nombre de usuario y contraseña de Nacos o AK / SK en la configuración, y esta información también puede filtrarse, y la modificación después de la filtración debe volver a publicarse. Por lo tanto, se recomienda utilizar la función ECS de Alibaba Cloud. Toda la gestión de permisos se realiza en la consola de Alibaba Cloud .

3. Gire la clave de autenticación interna de Nacos

Como se mencionó anteriormente, la autenticación entre los servidores de Nacos se realiza a través de nacos.core.auth.server.identity, pero si un usuario malintencionado invade, también causará una fuga, lo que conducirá a una fuga de configuración.

Por lo tanto, para Nacos autoconstruido, nacos.core.auth.server.identity.value necesita ser reemplazado regularmente para asegurar que los usuarios malintencionados no puedan pretender ser Nacos Server para obtener y modificar la configuración.

Por supuesto, si está utilizando una instancia de Nacos alojada por MSE, MSE rotará automáticamente , por lo que no debe preocuparse por esto.

4. Nombre de usuario y contraseña de la capa de persistencia de rotación

Para evitar que la configuración se escape de la capa de persistencia, es necesario modificar periódicamente la información de autenticación de la capa de persistencia. Por lo general, la capa de persistencia de Nacos es DB, por lo que el nombre de usuario y la contraseña de la base de datos deben modificarse periódicamente.

Para los usuarios de MSE, no hay necesidad de hacer nada, MSE modificará periódicamente el nombre de usuario y la contraseña de la base de datos.

5. Diseñe un plan de seguridad y ejecútelo con regularidad

Con el seguro pesado anterior, es teóricamente infalible, pero debido a que siempre hay errores en las operaciones humanas, aún es necesario especificar un plan de seguridad:

  • Compruebe periódicamente la lista de escucha configurada para confirmar que no hay máquinas no autorizadas.

  • Cuando se filtra AK / SK, cómo actualizar AK / SK y cómo revocar el AK / SK filtrado.

  • Para los Nacos autoconstruidos, cómo modificar el esquema de nacos.core.auth.server.identity.value después de que el servidor se vea comprometido.

para resumir


El Nacos de código abierto básicamente puede satisfacer las necesidades de las pequeñas y medianas empresas en términos de gestión de configuración y gestión de autoridad.

Para empresas medianas y grandes, el producto MSE de Alibaba Cloud admite una configuración de permisos y una gestión de seguridad más refinada y flexible, y también se puede utilizar con otros productos de Alibaba Cloud para lograr capacidades de configuración más seguras.

Por supuesto, ya sea que esté construyendo Nacos usted mismo o usando Alibaba Cloud MSE, debe prestar atención a los puntos de seguridad mencionados anteriormente para evitar la fuga de información de configuración y causar pérdidas comerciales. Las mejores prácticas de seguridad de configuración que se mencionan al final también pueden garantizar que después de las fugas de configuración, tengan la capacidad de repararlas a tiempo para evitar problemas antes de que ocurran.

Reclutamiento


Nuestro equipo de comercialización de Dubbo / Spring Cloud está contratando personas. Además de EDAS, también tenemos productos independientes como ARMS (Servicio de monitoreo de aplicaciones en tiempo real), MSE (Micro Service Engine) y SAE (Serverless Application Engine). ¿Qué estamos haciendo? Pulir estos productos es nuestro trabajo. El objetivo del equipo es exportar las mejores prácticas de Alibaba en gobernanza de servicios a clientes empresariales en Alibaba Cloud en forma de productización, y ayudar a los clientes a darse cuenta de que su negocio siempre está en línea.

Método de envío de CV: https://job.alibaba.com/zhaopin/position_detail.htm?positionId=98290

¿Cómo garantizar la coherencia distribuida del negocio instantáneo a través de mensajes de transacciones?

27/02/2021

Función de cálculo de aceleración del espejo: el salto de minutos a segundos

27/02/2021

Actual Combat | ¿Cómo realizar la arquitectura de corte de fotogramas de video basada en la tecnología Serverless?

25/02/2021

Haga clic en uno para ver, dejar que más personas vean

Supongo que te gusta

Origin blog.csdn.net/weixin_39860915/article/details/114697118
Recomendado
Clasificación