Usuarios y roles con el mínimo privilegio
TeselaDB
Equipo de TeselaDB
25 minIntermedio
Crea un rol que lee y escribe en una colección sin poder borrar y dáselo al usuario de una aplicación.
Una aplicación que solo crea y actualiza pedidos no necesita borrarlos ni leer otras colecciones. Con un rol a medida le das solo esas acciones sobre esa colección, así que si su contraseña se filtra, quien la use no puede hacer más de lo que podía hacer la aplicación.
Lo que vas a construir
Un rol ordersWriter con las acciones find, insert y update sobre la colección tienda.pedidos, y un usuario
tienda-pedidos que solo tiene ese rol.
Requisitos
- Un clúster de TeselaDB y
mongosh. - Un usuario con permiso para crear roles y usuarios, como
root.
1. Crea el rol
Cada privilegio une un recurso, aquí una colección, con las acciones permitidas sobre él:
db.getSiblingDB("admin").createRole({
role: "ordersWriter",
privileges: [{ resource: { db: "tienda", collection: "pedidos" }, actions: ["find", "insert", "update"] }],
roles: [],
});2. Crea el usuario
El usuario solo tiene el rol ordersWriter. passwordPrompt() pide la contraseña sin que quede en el historial
de mongosh:
db.getSiblingDB("admin").createUser({ user: "tienda-pedidos", pwd: passwordPrompt(), roles: ["ordersWriter"] });Probarlo
Conectado como tienda-pedidos, prueba una inserción y un borrado en tienda.pedidos, sabiendo que el rol lleva la
acción insert pero ninguna que borre documentos, así que solo puede funcionar la primera de las dos escrituras de
abajo:
const tienda = db.getSiblingDB("tienda");
tienda.pedidos.insertOne({ total: 30 });
tienda.pedidos.deleteOne({});La inserción funciona y el borrado falla con Unauthorized, el mismo error que recibes si intentas leer otra colección
de tienda.
Limpiar
Si era una prueba, borra el usuario y el rol conectado como root:
db.getSiblingDB("admin").dropUser("tienda-pedidos");
db.getSiblingDB("admin").dropRole("ordersWriter");Siguientes pasos
- Usuarios y roles, con los roles predefinidos y los privilegios que lleva cada uno.
- Acciones de privilegio, con todas las acciones que puede llevar un rol.