Cuando estamos desarrollando casi siempre usamos nuestras Access Keys para utilizar los servicios de AWS, la recomendación es siempre utilizarlas en un equipo seguro, sin embargo hay ocasiones en las que debemos compartir equipo y se nos olvida eliminar las Access Key para que la persona que use el equipo no vaya a utilizarlas. Con el fin de tener un control adicional, en este post vamos a crear una regla en EventBridge para que llame una función Lambda y borre las Access Keys cada cierto tiempo.
Servicios a utilizar:
*IAM
*Lambda
*EventBridge
Para comenzar vamos a crear algunos usuarios de prueba utilizando la CLI. Vamos a adicionarles un path para poder diferenciarlos y no borrar las Access Keys de los usuarios que tengamos en nuestra cuenta.
aws iam create-user \
--path "/blogtest/" \
--user-name "blogtest1"
aws iam create-access-key --user-name blogtest1
aws iam create-user \
--path "/blogtest/" \
--user-name "blogtest2"
aws iam create-access-key --user-name blogtest2
aws iam create-user \
--path "/otro/" \
--user-name "blogtest3"
aws iam create-access-key --user-name blogtest3
Ahora que tenemos creados nuestros usuarios con sus respectivas Access Keys, vamos a crear la función Lambda con el código necesario para eliminar las Access Keys de los usuarios que acabamos de crear.
Vamos a la pantalla principal de Lambda y damos click en Create function
Con nuestra función creada vamos a copiar el siguiente código y damos click en el botón Deploy:
import json
import boto3
client = boto3.client('iam')
def getUsers(path):
users =[]
for user in client.list_users(PathPrefix = path)["Users"]:
users.append(user["UserName"])
return users
def deleteAccessKeys(user):
for key in client.list_access_keys(UserName = user)["AccessKeyMetadata"]:
client.delete_access_key(UserName=user,AccessKeyId=key["AccessKeyId"])
def lambda_handler(event, context):
for user in getUsers("/blogtest/"):
deleteAccessKeys(user)
Al método getUsers le estamos enviando como parámetro /blogtest/ que es el path con el cual se crearon nuestros usuarios. El path únicamente se puede definir desde la _CLI o el SDK por lo que todos los usuarios que creamos por la consola quedan con el path /. Si queremos que se borren las Access Key de todos los usuarios debemos pasar al método getUsers el valor /.
Como ya sabemos es necesario agregar los políticas necesarias al rol de la función Lambda para que se pueda ejecutar. Para este vamos a Configuration-Permissions y damos click en el nombre del rol.
Damos click en Create inline policy
En la pestaña JSON agregamos la siguiente política y damos click en el botón Review Policy:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*",
"Resource": "*"
}
}
Le damos un nombre (access_keey_users) y damos click en el botón Create policy.
Hasta el momento creamos la función Lambda y le dimos permisos para eliminar las llaves de los usuarios que tengan un path especifico.
El siguiente paso es crear una regla en EventBridge para que nuestra función se ejecute cada cierto periodo de tiempo.
Vamos al buscador de servicios y colocamos EventBridge. Ya en la pantalla principal damos click en Create Rule
Debemos definir el nombre de la regla y su tipo, para este caso definimos una regla de tipo Schedule (se ejecuta periódicamente)
Definimos la periodicidad con la cual queremos que se ejecute la función Lambda, para efectos de prueba, la vamos a dejar en 5 minutos.
Debemos seleccionar la función Lambda que creamos y damos click en Next.
En la sección Tags la dejamos vació y da click en Next.
Revisamos la configuración realizada y damos click en Create rule.
Después de unos minutos podemos dar click en el nombre de la regla e ir a la pestaña Monitoring para ver como ha sido su ejecución.
Los invito a comprobar que las Access Key fueron borradas ingresando a IAM-Users-Seleccionar el usuario blogtest1 e ir a la pestaña Security Credentials y modificar el código para que se borren las Access Key del usuario blogtest3
Me pueden encontrar en:
Top comments (0)