Controla lo que hacen tus usuarios con Amazon WS IAM (parte 1)
En proyectos pasados y actuales he tenido que lidiar con los servicios cloud de Amazon, los conocidos como Amazon Web Services. Para los que no los conozcan, son un conjunto de servicios de computación, almacenamiento, base de datos, redes, análisis… que permiten montar infraestructuras complejas, eficientes y escalablas a precios muy competitivos (se paga por uso).
En un principio me tocó montar la red, servidores, servicios y bases de datos. Ahora ando desde otro punto de vista, el de tratar de asegurar la infraestructura para que la continuidad de negocio de mi trabajo actual no se vea comprometida. La puerta de entrada son los usuarios y de eso vamos a hablar hoy.
Entendiendo Amazon WS IAM
Para gestionar el acceso a los recursos, AWS cuenta con un servicio llamada IAM (Identity & Access Management) que permite gestionar el acceso a los recursos en base a diferentes identidades:
Usuarios: es una entidad individual, una persona que utiliza recursos. Cuando creamos un usuario, le podemos dar acceso a la consola de administración o a la api para que pueda interactuar con aquello que deseemos de AWS mediante políticas de uso.
Grupos: se utilizan para agrupar usuarios que tienen características similares y, por tanto, permisos similares. Normalmente se usan para crear departamentos en los que todos los usuarios tienen que tener acceso a los mismo recursos. Editar, añadir o eliminar una política al grupo, afecta inmediatamente a todos los usuarios del mismo.
Roles: son parecidos a los usuarios, pero de forma inpersonal. Son permisos que se conceden para llevar a cabo determinadas tareas puntuales. Se suelen usar para asignar a máquinas o procesos que se lanzan de forma automática o incluso aquellas que se lanzan de forma manual sin importar el usuario que lo hace (no es el usuario el que tiene los premisos, es el popio proceso).
¿Cómo indico qué se puede o no hacer?
Para eso están las policies, que son reglas que se aplican para cada servicio y que pueden contener todo tipo de detalle para hacerlas completamente a medida. Una policy tiene un aspecto similar a esto:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }
Tener cierto control y destreza a la hora de escribir estas policies es complicado, por eso Amazon nos pone a mano dos recursos interesantes:
- AWS Policy Generator: una web en la que podemos ver todas las opciones que hay para cada servicio e incluso generar el fichero para hacer copy-paste.
- Herramienta interna de simulación: desde la consola de administración de IAM podemos hacer una simulación de la policy que realizará una prueba sobre los recursos y acciones que definamos.
Asignación de policies
A la hora de aplicarlas sobre un usuario o grupo, podemos optar por hacerlo de dos formas:
- Managed: podemos verlo como un policies que tenemos almacenadas y que asignamos con intención de que sea algo permanente (aunque, por supuesto, podemos revocar en cualquier momento).
- Inline: es algo así como permisos temporales que se asignan con la intención de que sea algo puntual, ya sea por la persona o grupo que lo recibe o por el tipo de permiso que se concede.
¿Vemos un ejemplo?
Con todo esto, una posible situación sería asignar grupos por departamento y entorno de desarrollo, asignando las policies necesarias para cada zona concreta. Por ejemplo:
- Departamento1-DEV: policies para usuarios del departamento1 con acceso a recursos de desarrollo.
- Departamento1-PRE: policies para usuarios del departamento1 con acceso a recursos de preproducción.
- Departamento1-PRO: policies para usuarios del departamento1 con acceso a recursos de producción.
Puesto que un usuario puede pertenecer a varios grupos, no habría problema en asignar a «Usuario1» a los grupos «DEV» y «PRE» del «Departamento1».
Control casero
Cuando todo esto empieza a crecer, utilizo un pequeño script que me lista todos los usuarios, así como las políticas que tiene asignadas como grupo o individualmente. Me sirve para exportar rápidamente esa información y poder ver en papel la foto actual de los permisos. Si utilizas la consola, tienes que entrar uno a uno y es un poco coñazo.
Lo único que hago es tirar consultas sobre la API para mostrar, de forma ordenada, la información que necesito.
########################################################################################## # # File: iam-list-users-policies.py # Author: Cristobal Espinosa # # https://boto3.readthedocs.org/en/latest/reference/services/index.html # ########################################################################################## # Imports ################################################################################ import boto3 from colorama import init, Fore, Style ########################################################################################## # Initial values ######################################################################### init(autoreset=True) step = False # Set as True to step by step view ########################################################################################## print print Fore.GREEN + '-- IAM POLICIES CONTROL' print Fore.GREEN + '----------------------------------------------------------------------------------' print client = boto3.client('iam') user_list = client.list_users() # List users for user in user_list['Users']: print Fore.YELLOW + '[**] ' + Fore.WHITE + user['UserName'] + ':' # List user inline policies print Fore.YELLOW + '\t[*] ' + Fore.WHITE + 'User inline policies:' user_policies = client.list_user_policies(UserName = user['UserName']) for policy in user_policies['PolicyNames']: print '\t\t- ' + policy print # List user managed policies print Fore.YELLOW + '\t[*] ' + Fore.WHITE + 'User managed policies:' user_policies = client.list_attached_user_policies(UserName = user['UserName']) for policy in user_policies['AttachedPolicies']: print '\t\t- ' + policy['PolicyName'] print # Get user groups user_groups = client.list_groups_for_user(UserName = user['UserName']) print Fore.YELLOW + '\t[*] ' + Fore.WHITE + 'User groups and associated policies:' for group in user_groups['Groups']: group_policies = client.list_attached_group_policies(GroupName = group['GroupName']) for group_policy in group_policies['AttachedPolicies']: print '\t\t- [' + group['GroupName'] + '] -> ' + group_policy['PolicyName'] print print Fore.GREEN + '----------------------------------------------------------------------------------' print if step: raw_input("Press Enter to continue...") print
Me gustaría trabajar en ampliar este script para que sea capaz de avisarme de cambios tanto en policies como en el contenido de las mismas, de forma que si un usuario «obtiene cambios fuera de control», pueda enterarme lo antes posible.
El resultado de este código es algo así:
Lo que podéis ver aquí es el modo paso a paso (step = True) con los resultados del primer usuario (el nombre es lo que hay borrado junto a [**]). Se ve rápidamente que no tiene policies de tipo inline o managed y que, todo lo que tiene, le llega por pertenecer a dos grupos del mismo departamento y diferente entorno (DEV y PRE). Las policies asociadas a cada grupo aparecen a la derecha del mismo.
Como véis, un script muy sencillo, pero que me permite exportar rápidamente la información que necesito para verificar si algún usuario tiene permisos que no debe o pertenece a algún grupo equivocado.
De momento, esto es todo, en la continuación de esta entrada hablaremos del usuario root y de la autenticación con segundo factor. Espero que os esté resultando interesante y, 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.
- GuardDuty: Un viaje a través del tiempo en AWS Security - 21 noviembre, 2023
- Webinar – Seguridad para familias - 11 enero, 2021
- SecurityInside Live: CISO Day 2020 - 17 septiembre, 2020
I loved the wit in this piece! For additional info, click here: EXPLORE FURTHER. Keen to hear everyone’s views!
mexican pharmaceuticals online: cmq mexican pharmacy online – medication from mexico pharmacy
medicine in mexico pharmacies
http://cmqpharma.com/# mexico drug stores pharmacies
best online pharmacies in mexico
mexico pharmacies prescription drugs: mexico pharmacy – buying prescription drugs in mexico online
https://indiapharmast.com/# best india pharmacy
is canadian pharmacy legit: canadian pharmacy meds review – is canadian pharmacy legit
indianpharmacy com: reputable indian pharmacies – best india pharmacy
mexican pharmaceuticals online: п»їbest mexican online pharmacies – п»їbest mexican online pharmacies
canadian mail order pharmacy online canadian drugstore pharmacy wholesalers canada
п»їbest mexican online pharmacies medicine in mexico pharmacies buying prescription drugs in mexico online
http://indiapharmast.com/# indian pharmacies safe
ed meds online canada: canadian pharmacy king – pharmacy com canada
best online pharmacy india: india pharmacy mail order – reputable indian pharmacies
Online medicine order: cheapest online pharmacy india – indianpharmacy com
canadian online pharmacy reviews: canadian neighbor pharmacy – canadian pharmacy phone number
pharmacies in mexico that ship to usa: pharmacies in mexico that ship to usa – mexican pharmaceuticals online
indian pharmacy online: п»їlegitimate online pharmacies india – indian pharmacy online
http://indiapharmast.com/# top online pharmacy india
reputable indian online pharmacy buy medicines online in india Online medicine home delivery
Online medicine order indianpharmacy com buy medicines online in india
mail order pharmacy india: cheapest online pharmacy india – reputable indian pharmacies
top 10 pharmacies in india: cheapest online pharmacy india – best online pharmacy india
http://foruspharma.com/# buying prescription drugs in mexico
indian pharmacy: reputable indian online pharmacy – buy prescription drugs from india
india pharmacy: Online medicine order – indianpharmacy com
mexico pharmacy: reputable mexican pharmacies online – best online pharmacies in mexico
india pharmacy reputable indian pharmacies buy prescription drugs from india
indian pharmacy paypal: cheapest online pharmacy india – online shopping pharmacy india
http://indiapharmast.com/# reputable indian pharmacies
canadian pharmacy 365 reputable canadian pharmacy onlinecanadianpharmacy
canadian drugs: cheap canadian pharmacy – onlinecanadianpharmacy
top 10 online pharmacy in india: indianpharmacy com – indian pharmacy paypal
mexican pharmaceuticals online: mexican rx online – mexico drug stores pharmacies
canadian drugs pharmacy: canadian drug stores – canadian pharmacy reviews
https://canadapharmast.online/# canadian family pharmacy
buying from online mexican pharmacy: mexican border pharmacies shipping to usa – buying from online mexican pharmacy
medicine in mexico pharmacies: mexican pharmacy – mexican border pharmacies shipping to usa
can i get generic clomid without a prescription: cost cheap clomid pills – where buy cheap clomid no prescription
http://doxycyclinedelivery.pro/# buy doxycycline online australia
https://doxycyclinedelivery.pro/# cheapest doxycycline tablets
doxycycline cap 50mg: how to buy doxycycline without a prescription – doxycycline discount
https://clomiddelivery.pro/# how to get generic clomid without prescription
https://clomiddelivery.pro/# cheap clomid for sale
how to get generic clomid: how to get clomid – where can i buy clomid without insurance
https://clomiddelivery.pro/# where can i buy generic clomid without a prescription
http://ciprodelivery.pro/# cipro pharmacy
cipro pharmacy: buy cipro cheap – ciprofloxacin 500mg buy online
http://amoxildelivery.pro/# amoxicillin 500 tablet
amoxicillin generic brand: order amoxicillin online – can you buy amoxicillin uk
http://clomiddelivery.pro/# where to buy generic clomid without rx
where can i get clomid prices: can i order generic clomid tablets – where to buy cheap clomid tablets
https://doxycyclinedelivery.pro/# doxycycline antibiotic
http://ciprodelivery.pro/# buy generic ciprofloxacin
amoxicillin 500 mg brand name: amoxicillin 500 coupon – order amoxicillin online uk
https://ciprodelivery.pro/# buy cipro online without prescription
https://doxycyclinedelivery.pro/# doxycycline 100mg online
ciprofloxacin order online: ciprofloxacin 500mg buy online – antibiotics cipro
https://ciprodelivery.pro/# cipro ciprofloxacin
http://ciprodelivery.pro/# п»їcipro generic
can i buy amoxicillin over the counter: amoxicillin price without insurance – amoxicillin online no prescription
https://ciprodelivery.pro/# buy cipro online canada
https://paxloviddelivery.pro/# paxlovid price
amoxicillin 500mg tablets price in india: amoxicillin 500 – amoxicillin 500 tablet
buy generic ciprofloxacin: cipro – cipro
http://doxycyclinedelivery.pro/# doxycycline 100mg
http://clomiddelivery.pro/# where buy clomid online
paxlovid price: Paxlovid over the counter – paxlovid price
amoxicillin pills 500 mg: amoxicillin pharmacy price – amoxicillin in india
order clomid without rx: can i buy generic clomid without prescription – where buy cheap clomid now