DEV Community

camilo cabrales
camilo cabrales

Posted on

Programar borrado de Access keys con EventBridge y Lambda

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
Enter fullscreen mode Exit fullscreen mode

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

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)
Enter fullscreen mode Exit fullscreen mode

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.

Modify Rol

Damos click en Create inline policy

Modify Rol

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": "*"
  }
}
Enter fullscreen mode Exit fullscreen mode

Modify Rol

Le damos un nombre (access_keey_users) y damos click en el botón Create policy.

Modify Rol

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

Modify Rol

Debemos definir el nombre de la regla y su tipo, para este caso definimos una regla de tipo Schedule (se ejecuta periódicamente)

Define Rule

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.

Periodicidad

Debemos seleccionar la función Lambda que creamos y damos click en Next.

Select Target

En la sección Tags la dejamos vació y da click en Next.

Tag

Revisamos la configuración realizada y damos click en Create rule.

Create Rule Final

Create Rule Final

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.

Monitoring Rule

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:

Camilo Cabrales

Referencias

IAM Path

IAM Boto3

Discussion (0)