Listado de la etiqueta: aws

Mi experiencia como ponente en CyberCamp18

Aunque el año 2.007 fue un «no parar» en cuanto a esto de dar charlas y talleres tras ganar la Imagine Cup de Microsoft, desde entonces no había tenido la oportunidad de volver a subirme en un escenario para contar cosas.

En estos últimos años, entre formación, autoempleo, autoría de libros, desarrollo de ideas, docencia, consultoría, … y ser padre, se me complicó un poco sacar tiempo.

Sin embargo, tras cumplir el sueño de ser profesor, me apetecía mucho volver a tener los nervios de dar una charla, de dedicar tiempo a montar un taller en el que contar cosas que hago y he ido aprendiendo con la experiencia.

Sin embargo, meter la cabeza en un congreso no es nada sencillo. Hay que apuntarse al CFP (Call For Papers) y enviar lo que tienes en mente. Detallar en qué va a consistir, de qué vas a hablar y tratar de convencer a la organización del evento de que tu propuesta puede aportar valor a la audiencia.

Para que te hagas una idea, me he presentado a 8 congresos antes de conseguir que me aceptaran la primera ponencia. Mi «rebautismo» dando charlas ha sido el evento CyberCamp18.

En esta ocasión lancé un órdago al CFP y me presenté a las tres categorías posibles:

  • Ponencia tecnológica: propuse hablar de mi proyecto personal DefenderEye. Quería contar los motivos que me hicieron desarrollar la herramienta, para qué sirve y mostrar desde dentro cómo funciona (detallando código, infra, …).
  • Charla motivacional: propuse una charla en la que contar cómo iniciarse en el mundo de la seguridad, la formación disponible, certificaciones, tipos de perfiles laborales y, sobre todo, consejos basados en mi experiencia como gestor de equipos de seguridad y mi relación con RRHH en cuanto a búsqueda de perfiles. Todo, desde un punto de vista de mucho humor.
  • Taller técnico: propuse un taller en el que describir los principales servicios de AWS junto con las «best practices»a tener en cuenta para tener lo más seguro posible nuestro entorno.

Tras semanas de espera, me llegaron tres correos a la vez en la que se me comunicaba que no había sido elegido para las dos primeras opciones. Cuando abrí el tercero ya estaba resignado a que, un año más, no había conseguido el objetivo.

Sin embargo, en esta ocasión, el texto era diferente:

Una vez superada la emoción inicial, vienen los nervios… ¿soy capaz de estar dos horas hablando? ¿Me quedaré corto? ¿Me pasaré de tiempo?

Inicialmente hice una lista de todo lo que consideraba que debía contar, el cálculo de tiempo me daba… casi cinco horas. Mal empezamos…

Tras refinar, quitar y pulir temario, lo dejé en tres horas. Seguía sin valer.

Finalmente, tras muchas revisiones y el doloroso proceso de quitar cosas que sientes que tendrían que estar, conseguí clavar las 2 horas oficiales.

El resultado lo tenéis aquí, espero que os guste!

¿Y la experiencia, qué tal? Pues la verdad es que estupenda. La sensación de volver a subirme a un escenario y de tener de nuevo a un grupo de personas con ganas de escuchar lo que vienes a contar es realmente maravillosa.

No puedo más que dar las gracias al público que asistió al taller, todos mostraron interés en lo que le estaba contando y me lanzaron preguntas que denotaban que les estaba aportando valor, así que considero el objetivo cumplido.

Por otra parte, la organización de Incibe se portaron de 10. Trato amable, preocupación en todo momento por lo que pudiera necesitar y siempre con una gran sonrisa. Se nota que hablamos de un evento organizado desde la ilusión y las ganas de hacer algo interesante.

Sin mucho más que contar, me despido. Por mi parte, trataré de estar en CyberCamp19 y volver a formar parte de un evento tan importante como este.

Saludos!

aws-summit-madrid-16

SecurityInside Live: AWS Summit 2017

Tanto si eres nuevo en la nube o un usuario experimentado, no pierdas la ocasión de descubrir las últimas novedades Cloud en el Summit AWS de Madrid. Este evento gratuito está diseñado para presentar a nuevos clientes todas las funcionalidades sobre la plataforma AWS, y ofrecer a los clientes existentes información sobre las mejores prácticas de arquitectura y nuevos servicios.

El Keynote del AWS Summit de Madrid presentará Adrian Cockcroft, Vice President Cloud Architecture Strategy de Amazon Web Services. Durante su discurso de apertura, presentará las últimas novedades sobre las soluciones de AWS y podrás escuchar grandes historias de éxito de clientes AWS. Después del Keynote, podrás escoger entre diferentes sesiones dependiendo de tus intereses.

Leer más

security-api

Security API – Dale a tus empleados lo que necesitan (de forma segura)

Hace poco vimos en SecurityInside consejos a tener en cuenta para revisar la seguridad de tu API. Como comentamos, ofrecer servicios de información en el mundo de hoy si no tienes API, te da una desventaja considerable que podría terminar por arruinar tu negocio.

Es por eso que tu departamento de desarrollo debe tener en mente trabajar en una buena api (sencilla y segura) que de servicio tanto a clientes como a las plataformas y herramientas internas.

Hay muchas formas de desarrollar APIs, pero en mi caso me he decantado últimamente por Flask para Python sobre Elastic Beanstalk de Amazon Web Services.

Security API, ¿por qué?

Cada vez que arranco un proyecto de seguridad con una nueva empresa, me presento desde el punto de vista de vida laboral. Cuento mis años como becario, desarrollador, jefe de proyecto, consultor y luego el paso al mundo de la seguridad. Me miran como diciendo «¿para qué todo este rollo?». Sencillo, es la forma de introducir que soy un apasionado de la seguridad y que mi objetivo principal es asegurar los activos de la empresa, pero siempre tratando de hacer la vida sencilla a los compañeros que tienen que lidiar con todas las medidas y controles de seguridad que se implanten.

Conozco profesionales de la seguridad que nunca se han manchado las manos picando código y que aplican medidas maravillosas que fortifican los activos mientras complican el trabajo diario. Lo importante es la seguridad, pero mi perfil de desarrollador me hace pensar siempre en hacerlo de forma que ellos tengan todas las facilidades para trabajar. Seguros, pero trabajando.

Por todo esto, hace no mucho empecé a dar vueltas a la idea de crear una «security api» que diera servicio a determinadas necesidades de los compañeros de los diferentes departamentos. De esta forma, aplico medidas de seguridad generales y les doy la posibilidad de solicitar ciertos permisos, accesos, … de forma automática en base a roles.

¿Cómo funciona?

Básicamente todo funciona en base a usuarios que se autentican con login, password y 2fa (Google Authenticator, Android, iOS). Cada usuario tiene un rol y subrol con el que se indica qué cosas tienen permitidas y todo se gestiona mediante JSON Web Tokens.

Flask api template

Os he dejado en Github un nuevo repositorio que contiene el esqueleto de una api desarrollado en Python utilizando la biblioteca Flask.

Podéis lanzarlo en local para desarrollo y hacer pruebas de forma sencilla utilizando Postman, ya que os he dejado también un fichero con ejemplos de uso. Tendréis queja… 😀

Vamos viéndo cosillas

En el fichero principal (flask_api.py) veréis unas cuantas cosas que os voy a ir explicando.

Al principio, tenéis una función que se lanza tras arrancar el server, ahí se pueden configurar diferentes cosas (dar de alta la ip del server en determinados grupos de seguridad, enviar notificaciones, …):

##########################################################################################
# This function makes initial tasks.
##########################################################################################
@application.before_first_request
def _run_on_start():

    if not DEBUG:
        print "Flask started!"
        
        # Here you can do some initial tasks

##########################################################################################

Después se incluyen dos apartados para la gestión de códigos 404 y 405:

##########################################################################################
# This function returns happy 404.
##########################################################################################
@application.errorhandler(404)
def page_not_found(e):
    
    return redirect("https://goo.gl/LuKygx", code=302)

##########################################################################################

##########################################################################################
# This function returns happy 405.
##########################################################################################
@application.errorhandler(405)
def method_not_allowed(e):
    
    ret_html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>'
    ret_html = ret_html + '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">'
    ret_html = ret_html + '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'
    ret_html = ret_html + '<title>Flask API SecurityInside.info Template</title>'
    ret_html = ret_html + '<style type="text/css" media="screen">'
    ret_html = ret_html + 'h1 {text-align:left; color: #444;}'
    ret_html = ret_html + '</style></head><body>'
    ret_html = ret_html + '<h1>Flask API <a href="http://www.securityinside.info" target="blank">SecurityInside.info</a> Template</h1>'
    ret_html = ret_html + 'Method not allowed or missing params, check API doc to solve the problem.'
    ret_html = ret_html + '</body></html>'

    return flask_api_functions.ret_content_type(ret_html, 'html', 405) 

##########################################################################################

Una siempre interesante función ping para comprobar rápidamente si el server está vivo:

##########################################################################################
# This function shows API alive info. 
##########################################################################################
@application.route('/' + API_VERSION + '/ping', methods=['GET'])
def ping():
    
    response = {'code': 200, 'message': 'pong'}    
    return flask_api_functions.ret_content_type(response, 'json', 200)

##########################################################################################

La parte más interesante del ejemplo, la gestión del login y creación del token:

##########################################################################################
# This function checks auth user and return JWT.
##########################################################################################
@application.route('/' + API_VERSION + '/login', methods=['POST'])
def login():
    
    # Check preconditions
    ##################################################################################
    response = flask_api_functions.check_preconditions(request, False)
    
    if (response['code'] != 200):
        return flask_api_functions.ret_content_type(response, 'json', response['code'])
    ##################################################################################
    
    # Check for user credentials
    ##################################################################################
    response = flask_api_functions.check_auth(request)
    return flask_api_functions.ret_content_type(response, 'json', response['code'])
    ##################################################################################

##########################################################################################

Y la implementación concreta dentro del fichero flask_api_functions.py:

##########################################################################################
# This function checks user authorization header request.
#
# @param request - User request data.
#
# @return Formatted response.
# 
##########################################################################################
def check_auth(request):
    
    try:
        auth = base64.b64decode(request.headers['Authorization'].split()[1])
    
    except:
        response = {'code': 401, 'message': 'Invalid basic authorization header.'}
        return response

    if len(auth.split(':')) != 2:
        response = {'code': 401, 'message': 'Invalid basic authorization header.'}
        return response
    else:
        """
        Here you have to check user credentials and optional totp value.
        """

        # If user credentials is ok, then generate jwt
        if(True): 
            
            # User with valid credentials
            token = jwt.encode({
                'user_id': '<insert_here_user_id>',
                'user_name': '<insert_here_user_name>',
                'user_roles': '<insert_here_user_roles>',
                'other_fields': '<insert_here_other_fields>',
                'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=1)}, 
                SECRET)
                                
            response = {'code': 200, 'message': None, 'token': token}
            return response

        # If user credentials is not ok, then return error message
        else:
            response = {'code': 401, 'message': '(d\'oh!) Wrong user, password, totp value or maybe user is not active.'}
            return response

##########################################################################################

Para entender ciertas cosas como la forma de enviar el header «Authentication», pásate por el README.md del repositorio y ejecuta las pruebas con postman, verás que es la mar de sencillo.

El ejemplo es sólo parte del script completo. Si quieres utilizarlo o modificarlo, puedes descargarlo desde nuestro repositorio en GitHub.

 

Importante antes de terminar

Flask no está preparado para funcionar directamente en un entorno de producción, para hacerlo tienes que tener en cuenta un par de cosas (está todo en la documentación del repositorio).

En mi caso particular, ya os he dicho que lo tengo montado en Elastic Beanstalk de Amazon Web Services, si queréis os puedo contar cómo lo he hecho en otra entrada.

Por supuesto, si tenéis alguna duda sobre esta entrada, preguntad que estaré encantado de echar una mano.

Saludos!

sftp

sFTP en AWS EC2 en 5 minutos

En algún momento te puedes encontrar con la necesidad de levantar un sFTP para que alguien te envíe ficheros. Yo lo he necesitado hace poco y lo he solucionado rápidamente con una instancia de AWS EC2. Te dejo paso a paso lo que tienes que hacer por si lo necesitas.

Leer más

aws-summit-madrid-16

SecurityInside en el AWS Summit de Madrid 2016

Tras la visita el año pasado al AWS Summit de Barcelona, en esta ocasión nos pillaba mucho más cerca. El AWS Summit de Madrid se celebró el pasado Jueves en cines Kinépolis con una gran participación de público y de empresas patrocinadoras.

Puesto que trabajo en un entorno compuesto principalmente por servicios cloud de Amazon WS, la visita a este tipo de eventos es totalmente recomendada. Ya sabéis que la filosofía de SecurityInside es no dejar nunca de aprender.

El evento

Tal y como os comenté en la entrada de la Rooted CON, el sitio es un acierto total. Parece que los grandes eventos se están poniendo de acuerdo en utilizar las instalaciones de Kinépolis y, para el asistente, es una gran noticia. No hay problema de aparcamiento, gran oferta de restaurantes, cafeterías, espacio para apagar fuegos en remoto… todo genial.

Para el que no lo tenga claro, el AWS Summit es un evento en el que los responsables de diferentes servicios de Amazon nos explican las novedades y casos prácticos para que podamos utilizarlos en nuestro día a día. Además, lo complementan con ejemplos reales de empresas que han tenido éxito utilizando los diferentes servicios que se ofrecen y que siguen creciendo año a año.

aws-summit-2

Las sesiones

Puesto que el pasado Summit fue hace relativamente poco tiempo, en esta ocasión no hubo demasiadas novedadas, pero sí ejemplos de uso que te hacen pensar y que posiblemente acaben en nuestros sistemas a corto plazo. Lo bueno de este tipo de eventos es que te dan ideas y soluciones en las que no habías caído.

En mi caso particular, la sesión más interesante fue la relativa a la gestión de seguridad. Un repaso completo a la forma en la que tener todo bajo control desde el minuto cero que se nos contó en primera persona por Bill Murray, Director of AWS Security Programs y por los diferentes partners del evento:

aws-summit-madrid-sponsors

Seguridad en Amazon WS

La infraestructura en la nube de Amazon WS está diseñada para ser uno de los entornos de informática en la nube más flexibles y seguros de los disponibles en la actualidad. Ofrece una plataforma extremadamente escalable y de alta fiabilidad para que los clientes puedan implementar aplicaciones y datos de forma rápida y segura.

Los centros de datos de AWS disponen de la máxima seguridad 24/7. Los sistemas ambientales de los centros están diseñados para minimizar el impacto de las interrupciones en las operaciones. La existencia de varias regiones geográficas disponibles hace que la información sobreviva a la mayoría de las averías, incluidas catástrofes naturales.

AWS establece exhaustivos sistemas de supervisión de seguridad y red, protegiendo frente a ataques DDoS y detección de ataques de fuerza bruta contra sistemas de contraseñas en las cuentas de AWS, poniendo a prueba la infraestructura constantemente, desde todos los ángulos posibles y desde diferentes regiones.

Además del amplio equipo de expertos, AWS cuenta con una gran variedad de herramientas y sistemas que automatizan muchas de las tareas de seguridad, desde la gestión de credenciales hasta la supervisión del uso del servidor y red. Los programas de análisis automatizados, por ejemplo, han reducido el tiempo de una evaluación de ingeniería de seguridad de horas a minutos e incrementando la velocidad de análisis de docenas de hosts al día a miles de hosts en el mismo tiempo.

La infraestructura de AWS es mejorada constantemente, sustituyendo el hardware que llega al final de su vida con procesadores más recientes, mejorando así el rendimiento e incorporando tecnologías de seguridad, buscando reducir al máximo las fricciones entre los procesos de seguridad y los servicios.

AWS construye sus centros en múltiples regiones geográficas y numerosas zonas de disponibilidad dentro de cada región. Esto es, las zonas de disponibilidad están físicamente aisladas en una región y ubicadas en zonas de menor riesgo. En caso de improbable fallo, los procesos automatizados pueden desviar el tráfico de datos del cliente de la zona afectada (si hacemos uso de la configuración multi AZ), equilibrando la carga de tráfico entre los demás sitios.

Para clientes obligados a cumplir con determinadas leyes o normas de seguridad, AWS proporciona informes de certificación que describen cómo su infraestructura en la nube cumple con los controles exigidos por estas normas. Cada certificación que AWS obtiene significa que un auditor ha verificado que están instaurados los controles específicos y que funcionan según lo previsto.

Para ayudar al mantenimiento de seguridad de datos y sistemas en la nube, AWS dispone de una amplia variedad de funcionalidades y servicios:

  • Seguridad de red: Provee de diferentes opciones de seguridad a nivel de red para mantener los recursos y comunicaciones con la privacidad deseada.
  • Control de acceso: Solo permite acceso a usuarios, clientes y aplicaciones autorizadas a los recursos AWS, estableciendo políticas de control de acceso, cuentas individuales de usuarios y credenciales únicas.
  • Monitorización y seguimiento: AWS ofrece herramientas para hacer seguimiento y monitorizar los recursos en la nube. Con ellas, hay inmediata visibilidad del inventario, así como sobre usuarios y actividades sobre la aplicación.
  • Copias de seguridad: Una estrategia de seguridad debe incluir backups o snapshots de los datos con regularidad. Por eso, AWS realiza backups automáticos y, en otros casos, es posible configurar snapshots usando las diferentes opciones de configuración.
  • Cifrado: AWS utiliza sistemas de cifrado siempre que sea posible y recomienda su uso. Permite el almacenamiento de datos cifrados, centralización de gestión de claves y almacenamiento en hardware cifrado dedicado.
  • Región aislada: Para clientes con necesidades adicionales por cumplimiento de regulación especial, AWS ofrece regiones aisladas llamadas GovCloud (US) con estrictos y únicos requerimientos de seguridad que permiten un entorno en el que lanzar aplicaciones ITAR.

Ya sabemos que nada es 100% seguro, pero Amazon WS hace un gran esfuerzo por mantener unos servicios con el máximo nivel de fortificación para que nuestra actividad pueda resistir los múltiples vectores de ataque a los que estamos expuestos.

Y tu, ¿utilizas Amazon WS? Recuerda que tienes un gran abanico de recursos gratuitos para empezar a familiarizarte con este ecosistema.

 

De momento, eso es todo. Como siempre digo, si ves algún error, no estás de acuerdo con lo que cuento o quieres hacer alguna aportación, no dudes en pasarte por los comentarios.