Você certamente fez sua pesquisa ...
De toda a minha experiência com ansible o que você está procurando realizar, não é suportado. Como você mencionou, ansible afirma que não requer sudo sem senha, e você está correto, isso não acontece. Mas ainda tenho que ver qualquer método de usar várias senhas sudo dentro de ansible, sem, claro, executar várias configurações.
Então, não posso oferecer a solução exata que você está procurando, mas você perguntou ...
"So... how are people using Ansible in situations like these? Setting NOPASSWD in /etc/sudoers, reusing password across hosts or enabling root SSH login all seem rather drastic reductions in security."
Eu posso te dar uma visão sobre isso. Meu caso de uso é de 1k nós em vários datacenters que suportam uma empresa SaaS global na qual eu tenho que projetar / implementar alguns controles de segurança insanamente rígidos devido à natureza de nossos negócios. A segurança é sempre um ato de equilíbrio, mais usabilidade menos segurança, esse processo não é diferente se você estiver executando 10 servidores ou 1.000 ou 100.000.
Você está absolutamente correto em não usar logins de raiz via senha ou chaves ssh. Na verdade, o login raiz deve ser desativado totalmente se os servidores tiverem um cabo de rede conectado a eles.
Vamos falar sobre reutilização de senha, em uma empresa grande, é razoável pedir aos administradores de sistemas que tenham senhas diferentes em cada nó? para alguns nós, talvez, mas meus administradores / engenheiros se revoltariam se tivessem senhas diferentes em 1000 nós. Implementando isso seria quase impossível também, cada usuário teria que armazenar suas próprias senhas em algum lugar, esperançosamente um keypass, não uma planilha. E toda vez que você coloca uma senha em um local onde possa ser retirada em texto simples, você diminuiu muito sua segurança. Eu preferiria que eles soubessem, de cor, uma ou duas senhas realmente strongs do que ter que consultar um arquivo keypass toda vez que precisassem se logar ou invocar o sudo em uma máquina.
Assim, a redefinição e padronização de senha é algo completamente aceitável e padrão, mesmo em um ambiente seguro. Caso contrário, ldap, keystone e outros serviços de diretório não precisariam existir.
Quando nos movemos para usuários automatizados, as chaves ssh funcionam muito bem para você entrar, mas você ainda precisa passar pelo sudo. Suas escolhas são uma senha padronizada para o usuário automatizado (o que é aceitável em muitos casos) ou para ativar o NOPASSWD como você apontou. A maioria dos usuários automatizados só executa alguns comandos, então é bem possível e certamente desejável ativar o NOPASSWD, mas apenas para comandos pré-aprovados. Eu sugiro usar seu gerenciamento de configuração (ansible neste caso) para gerenciar seu arquivo sudoers para que você possa atualizar facilmente a lista de comandos sem senha.
Agora, há algumas etapas que você pode seguir depois de começar a escalonar para isolar ainda mais o risco. Embora tenhamos 1000 ou mais nós, nem todos eles são servidores de produção, alguns são ambientes de teste, etc. Nem todos os administradores podem acessar servidores de produção, mas podem usar a mesma chave de usuário / senha do SSO . Mas os usuários automatizados são um pouco mais seguros, por exemplo, uma ferramenta automatizada que os administradores que não são de produção podem acessar tem um usuário & credenciais que não podem ser usadas na produção. Se você deseja executar ansible em todos os nós, é necessário fazer isso em dois lotes, uma para não produção e outra para produção.
Também usamos o fantoche, já que é uma ferramenta de gerenciamento de configuração imponente, portanto, a maioria das alterações em todos os ambientes seria eliminada por meio dele.
Obviamente, se a solicitação de recurso que você mencionou for reaberta / concluída, o que você deseja fazer seria totalmente compatível. Mesmo assim, a segurança é um processo de avaliação e comprometimento de riscos. Se você tiver apenas alguns nós para os quais possa se lembrar das senhas sem recorrer a uma nota de post-it, as senhas separadas seriam um pouco mais seguras. Mas para a maioria de nós, não é uma opção viável.