Capítulo 25 — Laboratório I
Mapa da aula
Aula 25 publicada. Mapa, exemplo, EX073.
flowchart TD
N0["25.1 A tarefa"]
N1["Laboratório — Encontrar permissões além das necessid"]
N2["25.2 Resultados"]
N3["25.3 Limitações"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX073"]
Desenho lógico
flowchart LR
N0["25.1 A tarefa"]
N1["Laboratório — Encontrar permissões além das necessid"]
N2["25.2 Resultados"]
N3["25.3 Limitações"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX073"]
[25.1 A tarefa]
|
v
[Laboratório — Encontrar permissões além das necessid]
|
v
[25.2 Resultados]
|
v
[25.3 Limitações]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX073]
Objetivos de aprendizagem
Você vai (1) construir um pequeno verificador de controle de acesso; (2) testar o menor privilégio sobre dados sintéticos de papéis; (3) relatar os resultados com suas limitações.
25.1 A tarefa
O Dr. Bellini propõe um exercício de laboratório: escrever um programa em Python que leia as definições sintéticas de papéis e as atribuições de usuários da Fernway e encontre os usuários cujas permissões excedem as necessidades da sua função. Lucas define do que cada função deve precisar, como a equipe de caixa precisar de vendas, mas não de mudanças de preço, e compara isso com o que cada usuário de fato tem. O programa roda offline sobre dados sintéticos, para que possa ser compartilhado com os colegas sem expor contas reais. O objetivo é praticar a transformação de um princípio, o menor privilégio, numa verificação repetível.
Laboratório — Encontrar permissões além das necessidades da função
# Find permissions beyond job needs (synthetic roles and users).
need = {"till": {"sales"}, "store-manager": {"sales", "rota", "refunds"},
"warehouse": {"picking", "stock-read"}, "buyer": {"stock-read", "price-change"}}
users = {"u01": ("till", {"sales"}), "u02": ("till", {"sales", "price-change"}),
"u03": ("till", {"sales", "price-change"}), "u04": ("store-manager", {"sales", "rota", "refunds"}),
"u05": ("warehouse", {"picking", "stock-read", "db-owner"}), "u06": ("buyer", {"stock-read", "price-change"}),
"u07": ("warehouse", {"picking", "stock-read"})}
found = 0
for u, (job, has) in sorted(users.items()):
extra = has - need[job]
if extra: found += 1; print(f"{u} ({job}) excess: {', '.join(sorted(extra))}")
print(f"{found} of {len(users)} users exceed job needs")
Execute com python3 lab_excess.py. Saída verificada:
u02 (till) excess: price-change
u03 (till) excess: price-change
u05 (warehouse) excess: db-owner
3 of 7 users exceed job needs
25.2 Resultados
O laboratório encontra três usuários com permissões em excesso. Dois funcionários de loja têm direitos de mudança de preço que sobraram de um projeto temporário de promoção, e um usuário do armazém tem direitos de dono do banco de dados concedidos durante uma correção urgente. Lucas confirma com Hannah que as definições das funções estão certas antes de chamar isso de achados, porque uma definição incorreta produziria alarmes falsos. Hannah remove os direitos da promoção na mesma semana e abre um ticket de mudança para substituir o direito de dono do banco por um papel mais restrito, depois que o desenvolvedor confirmar do que a tarefa do armazém precisa.
25.3 Limitações
Lucas lista os limites do seu verificador. Ele só conhece as permissões registradas na exportação, e não as que existem dentro de aplicações com listas de usuários próprias. As definições das funções são simplificadas e podem deixar de fora exceções legítimas. Ele encontra excessos, e não uso indevido. Ele sugere rodá-lo todo mês e acrescentar um campo para exceções aprovadas com datas de expiração, para que os direitos temporários fiquem visíveis em vez de esquecidos. O Dr. Bellini elogia a seção honesta de limitações, observando que os revisores confiam mais nas ferramentas quando seus autores dizem com clareza o que elas não conseguem fazer.
Exemplo resolvido
Lucas escreve um verificador offline de menor privilégio, encontra três permissões em excesso, confirma as definições com Hannah e lista os limites do verificador.
Caso sintético. Os papéis e os usuários são sintéticos.
Erros e limites
As permissões internas das aplicações são invisíveis para o verificador. As exceções precisam de expiração para continuarem honestas.
Exercícios
-
EX073 — Excesso encontrado. Quantos usuários tinham permissões em excesso, e por quê? Rubrica: 3 = três: dois resquícios da promoção e um direito de dono do banco de uma correção urgente;; 2 = três;; 1 = vago;; 0 = nenhuma.
-
EX074 — Conferir as definições. Por que confirmar as definições das funções antes de relatar? Rubrica: 3 = definições erradas causam alarmes falsos;; 2 = exatidão;; 1 = vago;; 0 = nenhuma.
-
EX075 — Campo de exceções. Que melhoria Lucas sugeriu para as exceções? Rubrica: 3 = um campo de exceção aprovada com datas de expiração;; 2 = expiração;; 1 = vago;; 0 = nenhuma.
Síntese
Um verificador simples transforma o menor privilégio em um teste mensal repetível, desde que seus limites sejam declarados.
Continue estudando — aula 25 (capítulo 25 de 40)
← Capítulo 24 · Índice das aulas · Capítulo 26 →
Continue para a próxima aula já escrita.