Configuração de segurança em repositórios de persistência

O acesso ao banco de dados de persistência do SQL Server é protegido pelas seguintes funções do SQL Server:

  • InstanceStoreUsers. Os membros dessa função podem carregar/salvar instâncias de fluxo de trabalho de/para o repositório de instâncias. O aplicativo que usa WorkflowServiceHost ou WorkflowApplication para hospedar serviços e usa SqlWorkflowInstanceStore para persistência deve ser executado sob uma identidade que seja um membro dessa função.

  • InstanceStoreObservers. Os membros dessa função podem consultar o repositório de instâncias. O aplicativo que usa WorkflowServiceHost ou WorkflowApplication para hospedar serviços e usa SqlWorkflowInstanceStore para persistência deve ser executado sob uma identidade que seja um membro dessa função.

  • WorkflowAdministrators. Os membros dessa função podem enfileirar (adicionar) comandos de controle à fila de comandos no repositório de instâncias.

  • WorkflowActivationUsers. Os membros dessa função podem consultar o repositório de instâncias para instâncias de fluxo de trabalho ativáveis. O Serviço de Gerenciamento de Fluxo de Trabalho (WMS) deve ser executado sob uma identidade que seja um membro dessa função.

  • WorkflowManagementServiceUsers. Os membros dessa função podem tirar da fila (recuperar) comandos de controle da fila de comandos no repositório de instâncias. O WMS deve ser executado sob uma identidade que seja um membro dessa função.

O acesso ao repositório de persistência SQL é concedido por repositório. Um usuário que tenha acesso a instâncias de um serviço de fluxo de trabalho armazenado em um repositório de instâncias tem acesso a todas as instâncias, incluindo instâncias de um serviço de fluxo de trabalho diferente no repositório. Para evitar que usuários com acesso a instâncias de um serviço acessem instâncias de outro serviço, você deve certificar-se de que repositórios de instância separados sejam usados para esses dois serviços.

Por exemplo, suponha que Service1 seja executado sob a identidade User1, Reader1 possa consultar instâncias de Service1 e Admin1 possa controlar instâncias de Service1. E Service 2 seja executado sob a identidade User2, Reader2 possa consultar instâncias de Service2 e Admini2 possa controlar instâncias de Service2. Para evitar que User1/Reader1/Admin1 carregue/consulte/controle instâncias de Service2 e que User2/Reader2/Admin2 carregue/consulte/controle instâncias de Service1, todas as instâncias de Service1 devem ser armazenadas em um repositório de instâncias Store1 e todas as instâncias de Service2 devem ser armazenadas em um repositório de instâncias Store2.

Neste cenário, um usuário tem que adicionar os seguintes usuários ou grupos do Windows a essas funções:

  • Adicione User1 à função InstanceStoreUsers do banco de dados de Store1. Como alternativa, adicione User1 a um grupo do Windows UserGroup1 e adicione UserGroup1 à função InstanceStoreUsers do banco de dados de Store1.

  • Adicione Reader1 ou ReaderGroup1, um grupo do Windows do qual Reader1 seja membro, à função InstanceStoreObservers do banco de dados de Store1.

  • Adicione Admin1 ou AdminGroup1, um grupo do Windows do qual Admin1 seja membro, à função WorkflowAdminstrators do banco de dados de Store1.

  • Adicione User2 ou UserGroup2, um grupo do Windows do qual User2 seja membro, à função InstanceStoreUsers do banco de dados de Store2.

  • Adicione Reader2 ou ReaderGroup2, um grupo do Windows do qual Reader2 seja membro, à função InstanceStoreObservers do banco de dados de Store2 .

  • Adicione Admin2 ou AdminGroup2, um grupo do Windows do qual Admin2 seja membro, à função WorkflowAdministrators do banco de dados de Store2 .

  • Adicione o identificador de segurança (SID) do WMS aos grupos do Windows AdminGroup1 e AdminGroup2.

Exemplo de Segurança de Persistência

Para aumentar mais a segurança, você pode executar várias instâncias do WMS. Por exemplo, suponha que você tem duas instâncias WMS1 e WMS2 do Serviços de Gerenciamento de Fluxo de Trabalho executado e ambas as instâncias sejam executadas na conta BUILTIN\Local Services. Suponha que WMS1 seja atribuído ao Identificador de Segurança WMS-SID1 e que WMS2 seja atribuído ao Identificador de Segurança WMS-SID2. Neste caso, você deve seguir essas etapas em vez de executar a última etapa na lista de etapas anterior:

  • Adicione WMS-SID1 ao grupo do Windows WMSGroup1 e adicione WMSGroup1 ao banco de dados de Store1 WorkflowActivationUsers e WorkflowManagementServiceUsers.

  • Adicione WMS-SID2 ao grupo do Windows WMSGroup2 e adicione WMSGroup2 ao banco de dados de Store2 WorkflowActivationUsers e WorkflowManagementServiceUsers.

Autorização do Ponto de Extremidade de Controle de Instância

Você deve alterar a autorização de Pontos de Extremidade de Controle de Instância (ICEs) de todos os serviços que persistem em Store1 para WMSGroup1 no cenário descrito na seção anterior. Da mesma forma, você deve alterar a autorização de ICEs de todos os serviços que persistem em Store2 para WMSGroup2. O exemplo a seguir mostra como proteger o acesso a um ICE usando um arquivo de configuração.

<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="myServiceBehavior">
                    <workflowInstanceManagement authorizedWindowsGroup="WMSGroup1" />
                </behavior>
            </serviceBehaviors >
        </behaviors>
    </system.serviceModel>
</configuration>

Autorização de Ponto de Extremidade de Gerenciamento de Serviço

Você deve alterar a autorização de Pontos de Extremidade de Gerenciamento de Serviço (SMEs) de todos os serviços que persistem em Store1 para WMSGroup1 no cenário descrito no início desse tópico. Da mesma forma, você deve alterar a autorização de SMEs de todos os serviços que persistem em Store2 para WMSGroup2. O exemplo a seguir mostra como proteger o acesso a um SME usando um arquivo de configuração.

<configuration>
    <microsoft.applicationServer>
        <hosting>
            <serviceManagement enabled="true" authorizedWindowsGroup="WMSGroup1" endpointConfiguration="ServiceManagementNetPipeEndpoint" />
        </hosting>
    </microsoft.applicationServer>
</configuration>

Configuração do Serviço de Gerenciamento de Fluxo de Trabalho

Você deve configurar WMS1 para monitorar Store1 e WMS2 para monitorar Store2 no cenário descrito no início do tópico. Para fazer isso, modifique a seção de configuração do Serviço de Gerenciamento de Fluxo de Trabalho no arquivo raiz Web.config conforme exibido na configuração de amostra a seguir.

<configuration>
    <microsoft.applicationServer>
        <persistence>
            <workflowManagement>
                <workflowManagementServiceInstances>
                    <workflowManagementServiceInstance name="WMS1">
                        <instanceStores>
                            <instanceStore name="Store1" location="[root, SiteName or VPath]" />
                        </instanceStores>
                    </workflowManagementServiceInstance>
                    <workflowManagementServiceInstance name="WMS2">
                        <instanceStores>
                            <instanceStore name="Store2" location="[root, SiteName or VPath]" />
                        </instanceStores>
                    </workflowManagementServiceInstance>
                </workflowManagementServiceInstances>
            </workflowManagement>
        </persistence>
    </microsoft.applicationServer>
</configuration>

Assistente de Configuração do Windows Server AppFabric

O Assistente de Configuração do AppFabric permite que você associe grupos do Windows a três tipos de usuários: Administradores, Leitores e Usuários. Por padrão, os grupos do Windows AS_Administrators, AS_Observers e IIS_USRS são associados a Administradores, Leitores e Usuários, respectivamente. O assistente adiciona AS_Administrators às funções InstanceStoreObservers, WorkflowActivationUsers, WorkflowAdministrators e WorkflowManagementServiceUsers no SQL Server, adiciona AS_Observers à função InstanceStoreObservers e adiciona IIS_USRS à função InstanceStoreUsers.

O assistente define o valor do atributo authorizedWindowsGroup do elemento workflowInstanceManagement e o valor do atributo authorizedWindowsGroup do elemento serviceManagement como AS_Administrators.

  2011-12-05