

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Políticas do IAM do Amazon SWF
<a name="swf-dev-iam.policies"></a>

Uma política do IAM contém um ou mais elementos `Statement`, cada um dos quais contém um conjunto de elementos que definem a política. Para obter uma lista completa de elementos e uma discussão geral sobre como estruturar políticas, consulte [A linguagem da política de acesso](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html). O controle de acesso do Amazon SWF é baseado nos seguintes elementos:

Efeito  
(Obrigatório) O efeito da instrução: `deny` ou `allow`.  
Você deve permitir explicitamente o acesso; o IAM nega o acesso por padrão.

Recurso  
(Obrigatório) O recurso — uma entidade em um AWS serviço com a qual o usuário pode interagir — ao qual a declaração se aplica.  
Você pode expressar permissões de recursos apenas para domínios. Por exemplo, uma política pode permitir acesso a apenas certos domínios na sua conta. Para expressar permissões para um domínio, `Resource` defina o Amazon Resource Name (ARN) do domínio, que tem o formato “arn:aws:swf::: /domain/”. *Region* *AccountID* *DomainName* *Region*é a AWS região, *AccountID* é o ID da conta sem traços e *DomainName* é o nome do domínio.

Ação  
(Obrigatório) A ação à qual a declaração se aplica, à qual você se refere usando o seguinte formato:*serviceId*:*action*. Para Amazon SWF, *serviceID* defina como. `swf` Por exemplo, `swf:StartWorkflowExecution` refere-se à [StartWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html)ação e é usado para controlar quais usuários têm permissão para iniciar fluxos de trabalho.  
 Se você conceder permissão de uso [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html), também poderá controlar o acesso à lista de decisões incluída usando `Action` para expressar permissões para a pseudo-API. Como o IAM nega o acesso por padrão, a decisão de um agente de decisão deve ser explicitamente permitida ou não será aceita. Você pode usar um valor `*` para permitir todas as decisões.

Condição  
(Opcional) Expressa uma restrição em um ou mais dos parâmetros de uma ação, o que restringe os valores permitidos.  
As ações do Amazon SWF geralmente têm um escopo amplo, que você pode reduzir usando as condições do IAM. Por exemplo, para limitar quais listas de tarefas a [PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html)ação pode acessar, você inclui um `Condition` e usa a `swf:taskList.name` chave para especificar as listas permitidas.   
É possível expressar restrições para as seguintes entidades.  
+ O tipo de fluxo de trabalho. O nome e a versão têm chaves separadas.
+ O tipo de atividade. O nome e a versão têm chaves separadas.
+ Listas de tarefas.
+ Tags. É possível especificar várias tags para algumas ações. Nesse caso, cada tag tem uma chave separada.
Para o Amazon SWF, os valores são todos strings, portanto, você restringe um parâmetro usando um operador de string, como `StringEquals`, que restringe o parâmetro a uma string especificada. No entanto, os operadores de comparação de string regulares, como `StringEquals`, exigem que todas as solicitações incluam o parâmetro. Se você não incluir o parâmetro explicitamente, e não houver um valor padrão, como a lista de tarefas padrão fornecida durante o registro de tipo, o acesso será negado.  
Muitas vezes, é útil tratar condições como opcionais, para que você possa chamar uma ação sem necessariamente incluir o parâmetro associado. Por exemplo, talvez você queira permitir que um decisor especifique um conjunto de [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)decisões, mas também permita que ele especifique somente uma delas para qualquer chamada específica. Nesse caso, você restringe os parâmetros apropriados usando um operador `StringEqualsIfExists`, o que permite o acesso se o parâmetro atender à condição, mas não nega o acesso se o parâmetro estiver ausente.
Para obter uma lista completa de parâmetros restritivos e as chaves associadas, consulte [Resumo de APIs](swf-dev-iam.api.md).

A seção a seguir fornece exemplos de como estruturar políticas do Amazon SWF. Para obter detalhes, consulte [Condições de string](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#AccessPolicyLanguage_ConditionType). 

## Escrevendo políticas para o Amazon SWF
<a name="swf-dev-iam.policies.examples"></a>

Um fluxo de trabalho consiste em vários *atores* — atividades, decisores e assim por diante. Você pode controlar o acesso de cada ator anexando uma política do IAM apropriada.

Com a ação a seguir, o ator terá acesso total à conta em todas as regiões:
+ **Ação:** `swf:*`
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/*`

 Você pode usar curingas para que um único valor represente vários recursos, ações ou regiões.
+ O primeiro caractere curinga (`*`) no `Resource` valor indica que as permissões do recurso se aplicam a todas as **regiões**. 

  Para restringir as permissões a uma única região, substitua o curinga pela string da região apropriada, como us-east-1. 
+ O segundo curinga (`*`) no valor `Resource` permite que o atuador acesse qualquer um dos domínios da conta nas regiões especificadas.
+ O caractere curinga (`*`) no valor de `Action` permite que o ator chame qualquer ação do Amazon SWF. 

Para obter detalhes sobre como usar curingas, consulte [Descrições de elementos](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html)

### Permissões de domínio
<a name="swf-dev-iam.policies.examples.domain"></a>

Para restringir os fluxos de trabalho de um departamento a um domínio específico, você pode conceder uma permissão que permita que um ator execute qualquer ação, mas somente para um departamento específico. 

Para conceder a um ator acesso a mais de um domínio, expresse a permissão para cada domínio como uma lista de declarações:
+ **Ação:** `swf:*`
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/department1` 
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/department2` 

Você pode permitir que um ator use qualquer ação do Amazon SWF nos domínios `department1` e. `department2` Você também pode usar curingas para representar vários domínios. 

### Permissões e restrições da API
<a name="swf-dev-iam.policies.examples.api"></a>

Você controla quais **ações** um ator pode usar especificando a ação no `Action` elemento. 

Com a ação a seguir, um ator só pode ligar `StartWorkflowExecution` para iniciar fluxos de trabalho. Ele não pode usar nenhuma outra ação.
+ **Ação:** `swf:StartWorkflowExecution` 

**Condições**  
Opcionalmente, você pode restringir os valores de parâmetros permitidos da ação usando um elemento. `Condition`

Para restringir quais fluxos de trabalho um ator pode iniciar, restrinja um ou mais dos valores dos `StartWorkflowExecution` parâmetros, da seguinte forma:

```
"Condition" : {
   "StringEquals" : { 
      "swf:workflowType.name" : "workflow1",
      "swf:workflowType.version" : "version2" 
    }
}
```

Um ator com as restrições anteriores só `version2` pode ser executado `workflow1` e ambos os parâmetros devem ser incluídos na solicitação.

Você pode restringir um parâmetro sem exigir que ele seja incluído em uma solicitação, usando um operador `StringEqualsIfExists`, da seguinte maneira:

```
"Condition" : {
   "StringEqualsIfExists" : { "swf:taskList.name" : "task_list_name" }
}
```

Um ator com a política anterior pode, opcionalmente, especificar uma lista de tarefas ao iniciar a execução de um fluxo de trabalho.

É possível restringir uma lista de tags para algumas ações. Cada tag tem uma chave separada, então você usa `swf:tagList.member.0` para restringir a primeira tag na lista, `swf:tagList.member.1` para restringir a segunda tag na lista e assim por diante, até um máximo de 5. 

Você deve ter cuidado ao restringir as listas de tags. Por exemplo, a condição a seguir ***não*** é recomendada. 

A condição a seguir **não** é recomendada porque permite que você opcionalmente especifique um `some_ok_tag` ou`another_ok_tag`. No entanto, a Condição restringe somente o **primeiro elemento** da lista de tags. A lista pode ter elementos adicionais com valores arbitrários que seriam todos permitidos porque a condição não aplica nenhuma condição a `swf:tagList.member.1``swf:tagList.member.2`, e assim por diante.

```
// Example to illustrate an insecure Condition
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
   }
}
```

Uma forma de resolver o problema anterior é proibir o uso de listas de tags. 

A seguinte política garante que somente `some_ok_tag` ou `another_ok_tag` seja permitido, exigindo que a lista tenha apenas um elemento.

```
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
    },
    "Null" : { "swf:tagList.member.1" : "true" }
}
```

### Permissões e restrições da pseudo API
<a name="pseudo-api-permissions-constraints"></a>

Para restringir as decisões disponíveis`RespondDecisionTaskCompleted`, primeiro você deve permitir que o ator ligue`RespondDecisionTaskCompleted`. Em seguida, você expressa as permissões para os membros apropriados da pseudo-API usando a mesma sintaxe da API normal, da seguinte forma:
+ **Declaração 1**

  **Recurso:** `arn:aws:swf:*:123456789012:/domain/*` 

  **Ação:** `swf:RespondDecisionTaskCompleted` 
+ **Declaração 2**

  **Recurso:** `*` 

  **Ação:** `swf:ScheduleActivityTask` 

  **Condição**: ` "StringEquals" : { "swf:activityType.name" : "SomeActivityType" }` 

O primeiro `Statement` permite que o ator ligue`RespondDecisionTaskCompleted`. A segunda declaração permite que o ator use a `ScheduleActivityTask` decisão para orientar o Amazon SWF a programar uma tarefa de atividade. Para permitir todas as decisões, substitua “swf:ScheduleActivityTask" por “swf: \$1”.

É possível operadores de condição para restringir parâmetros, como é o caso com a API regular. O `StringEquals` operador no exemplo anterior `Condition` permite `RespondDecisionTaskCompleted` agendar uma tarefa de atividade para a `SomeActivityType` atividade e deve agendar essa tarefa. Se você quiser permitir que `RespondDecisionTaskCompleted` use um valor de parâmetro, mas não exige que ele faça isso, poderá usar o operador `StringEqualsIfExists`.

## AWS política gerenciada: SimpleWorkflowFullAccess
<a name="swf-full-accss-mngd-policy"></a>

É possível anexar a política `SimpleWorkflowFullAccess` às suas identidades do IAM.

Essa política fornece acesso total ao serviço de configuração do Amazon SWF.

## Limitações do modelo de serviço nas políticas do IAM
<a name="swf-dev-iam.policies.allowed"></a>

Você deve considerar as restrições do modelo de serviço ao criar políticas do IAM. É possível criar uma política do IAM sintaticamente válida que represente uma solicitação inválida do Amazon SWF; uma solicitação permitida em termos de controle de acesso ainda pode falhar por ser uma solicitação inválida. 

Por exemplo, o modelo de serviço Amazon SWF **não** permite que os `tagFilter` parâmetros `typeFilter` e sejam usados na mesma `[ListOpenWorkflowExecutions](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListOpenWorkflowExecutions.html)` solicitação. A condição a seguir permitiria chamadas que o serviço rejeitaria, lançando, como uma solicitação inválida`ValidationException`:

```
"Condition" : {
   "StringEquals" : { 
      "swf:typeFilter.name" : "workflow_name",
      "swf:typeFilter.version" : "workflow_version",
      "swf:tagFilter.tag" : "some_tag" 
    }
}
```