By: [Filipe Romano] / Technical Reviewer: [Rodrigo Gomes]

No IIS 6 e IIS 7 todos as novas application pools criadas eram executadas por padrão com a conta de NetworkService. Sendo uma conta de usuário que não requer manutenção ou senha e tem privilégios restritos durante muito tempo ela foi uma boa opção de configuração.

No entanto, devido a cada vez mais serviços diferentes do Windows também utilizarem a mesma conta surgiu a necessidade de isolar ainda mais os processos pertencentes ao IIS para garantir a segurança do sistema.

O IIS introduziu uma nova funcionalidade com a instalação do Service Pack 2 para Windows 2008 e Windows Vista, e que também está presente no IIS 7.5. Ela é conhecida como Application Pool Identities e é possivel devido a um tipo novo de conta de serviço introduzido no Windows conhecida como “contas virtuais” (link: http://technet.microsoft.com/pt-br/library/dd548356.aspx)

Ao criarmos um novo site no IIS 7 com SP2 e 7.5,  um novo application pool será criado automaticamente com o mesmo nome do site. Para fornecer um nivel ainda maior de isolamento essa nova application pool será executada por um usuário novo, unico, que terá o mesmo nome da application pool.

Este usuário é um usuário virtual do IIS e pode ser utilizado para definir permissões NTFS para o diretório físico do site como qualquer outro usuário, porém ele não estará visivel na lista de usuários locais visto no painel de Gerenciamento do Computador.

Para editar as permissões de um diretório e adicionar o usuário, lembre-se de utilizar o seguinte padrão IIS APPPOOL\<Nome_do_App_pool>

A responsabilidade da criação destes usuários virtuais, é do serviço ApplicationHost Helper Service, que além de fazer este mapeamento das contas do Application Pool, é responsável por manter o histórico das configurações do IIS.

Quando há a necessidade de criar múltiplos sites de maneira automatizada ( através de aplicações customizadas ou scripts), problemas podem ocorrer se, durante a execução deste procedimento, você tentar usar essa nova conta de usuário assumindo que ela já existe, porém o SID deste usuário virtual não foi ainda criado. Este processo, pode gerar exceções, como por exemplo a exceção System.Security.Principal.IdentityNotMappedException

Este comportamento do ApplicationHost Helper Service é esperado, uma vez que para gerar o usuário ele deve fazer uma varredura por toda a configuração do IIS antes de confirmar a criação do objeto. Assim, dependendo da carga de trabalho do servidor o intervalo de criação entre um site e seu usuário pode variar fazendo com que este problema venha à tona.

Visto que não temos como saber quando exatamente o SID foi criado para o usuário virtual pelo AppHostSvc, nós recomendamos que a aplicação ou script capture essa exceção e tente novamente a operação após alguns segundos para que ele consiga adicionar/manipular as permissões desse novo usuário.

Referências

Aplication Pool Isolation.

( http://blogs.msdn.com/b/tom/archive/2008/03/05/automatic-application-pool-isolation-in-iis7-why-you-ll-want-to-use-this.aspx )

IIS Application Host Helper Service (AppHostSvc)

http://technet.microsoft.com/en-us/library/cc735036(WS.10).aspx