Hola a todos,
Estamos pensando en mejorar la forma en que Discourse maneja la autenticación de AWS [1], y nos gustaría entender cómo está configurado actualmente antes de realizar cualquier cambio.
La Situación Actual
En este momento, hay algunas formas de configurar la autenticación de AWS en Discourse:
Opción 1: Credenciales Explícitas (a través de la configuración del sitio)
- configure
s3_access_key_idys3_secret_access_keyen la configuración de su sitio - la autenticación es por sitio
Opción 2: Credenciales Explícitas (a través de variables de entorno)
- configure las variables de entorno:
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY - la autenticación es la misma para todos los sitios en un clúster multisitio
Opción 3: Configuración “Usar Perfil IAM”
- habilite la configuración del sitio
s3_use_iam_profileo configure la variable de entornoDISCOURSE_S3_USE_IAM_PROFILE=true - le dice a Discourse que deje que el SDK de AWS encuentre las credenciales automáticamente
- originalmente diseñado para instancias EC2 y para obtener credenciales a través de IMDS, pero funciona en otros entornos
Por Qué Queremos Cambiar
1. Nombre de Configuración Confuso
El nombre de la configuración s3_use_iam_profile es engañoso. Sugiere que solo funciona con perfiles de instancia EC2, pero en realidad habilita cualquier fuente de credenciales del SDK de AWS:
- Perfiles de instancia EC2
- Roles de tarea ECS
- Variables de entorno
- Archivos de credenciales de AWS
- Asunción de roles IAM
- Y más…
2. Seguridad: Claves Estáticas vs. Asunción de Roles
En nuestra plataforma de alojamiento dedicada, actualmente usamos claves de acceso que se rotan regularmente. Nuestro objetivo es cambiar a la asunción de roles para un mejor aislamiento, mejores oportunidades de control de acceso y para respaldar un mejor proceso interno.
Desventajas del enfoque actual:
- las claves de acceso no caducan (hasta que se rotan)
- tienen amplios ámbitos de permisos
- pueden ser comprometidas si se filtran
- requieren procedimientos de rotación manual
Ventajas de usar la asunción de roles en su lugar:
- las credenciales persistentes se pueden restringir por dirección IP
- las operaciones se realizan utilizando credenciales temporales que caducan automáticamente (generalmente 1 hora)
- acceso justo a tiempo, ya que las credenciales solo existen cuando son necesarias
- radio de explosión reducido, ya que las credenciales temporales comprometidas caducan rápidamente
- sin rotación de claves: el proceso de asunción de roles se encarga de la actualización
- mejores pistas de auditoría: cada sesión se rastrea por separado
Lo Que Estamos Considerando
Estamos pensando en:
- Renombrar la configuración a algo más claro como
aws_credentials_from_environment - Eliminar la configuración por completo y detectar automáticamente cuándo las credenciales deben provenir del entorno en lugar de la configuración del sitio
¡Necesitamos Tu Opinión!
Por favor, háganos saber:
-
¿Cómo se autentica con S3?
- Claves de acceso explícitas en la configuración del sitio
- Perfil de instancia EC2 (con
s3_use_iam_profilehabilitado) - Rol de tarea ECS (con
s3_use_iam_profilehabilitado) - Variables de entorno (con
s3_use_iam_profilehabilitado) - … ¿algo más?
-
Si usa
s3_use_iam_profile:- ¿En qué entorno se está ejecutando? (EC2, ECS, Docker, bare metal, etc.)
- ¿El nombre/descripción actual causó alguna confusión?
- ¿Sería más claro un nombre diferente?
-
¿Alguna preocupación sobre los cambios en esta configuración?
- ¿Le preocupa que se rompa su configuración actual?
- ¿Necesita tiempo para probar los cambios?
- ¿Otras consideraciones?
Por Qué Esto Importa
Una mejor autenticación de S3 significa:
- Más seguro: sin claves estáticas que administrar
- Configuración más fácil: especialmente para implementaciones en la nube
- Menos confusión: configuraciones y documentación más claras
- Mejor soporte para patrones modernos de autenticación de AWS
Sus comentarios nos ayudarán a realizar mejoras que funcionen para todos. ¡Gracias por tomarse el tiempo de compartir su configuración!
aquí se lee: cualquier proveedor de almacenamiento de objetos compatible con S3 que esté utilizando ↩︎