

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Una política de IAM comprende uno o varios elementos `Statement`, cada uno de los cuales consta de un conjunto de elementos que define la política. Para obtener una lista completa de los elementos y un análisis general acerca de cómo crear políticas, consulte [El lenguaje de la política de acceso](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html). El control de acceso a Amazon SWF se basa en los siguientes elementos:

Efecto  
(Obligatorio) El efecto de la instrucción: `deny` o `allow`.  
Debe permitir el acceso de forma explícita. IAM deniega el acceso de forma predeterminada.

Recurso  
(Obligatorio) El recurso (una entidad de un AWS servicio con la que el usuario puede interactuar) al que se aplica la declaración.  
Solo puede expresar los permisos a nivel de recursos para los dominios. Por ejemplo, una política puede permitir acceder solo a determinados dominios en su cuenta. Para expresar los permisos de un dominio, `Resource` configúrelo en el nombre de recurso de Amazon (ARN) del dominio, que tiene el formato «arn:aws:swf::: /domain/». *Region* *AccountID* *DomainName* *Region*es la AWS región, *AccountID* es el ID de la cuenta sin guiones y es el nombre de dominio. *DomainName*

Action  
(Obligatorio) La acción a la que se aplica la declaración, a la que puede hacer referencia utilizando el siguiente formato:*serviceId*:*action*. Para Amazon SWF, *serviceID* establézcalo en. `swf` Por ejemplo, `swf:StartWorkflowExecution` hace referencia a la [StartWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html)acción y se utiliza para controlar qué usuarios pueden iniciar flujos de trabajo.  
 Si concedes permiso de uso [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html), también puedes controlar el acceso a la lista de decisiones incluida `Action` para expresar los permisos de la pseudoAPI. Dado que IAM deniega el acceso de forma predeterminada, la decisión del decisor debe indicarse explícitamente o, de lo contrario, no se aceptará. Puede utilizar un valor `*` para permitir todas las decisiones.

Condición  
(Opcional) Expresa una restricción en uno o más parámetros de una acción, que limitan los valores permitidos.  
Las acciones de Amazon SWF tienen a menudo un gran alcance, que se puede reducir con la ayuda de condiciones de IAM. Por ejemplo, para limitar las listas de tareas a las que puede acceder la [PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html)acción, debes incluir una `Condition` y utilizar la `swf:taskList.name` clave para especificar las listas permitidas.   
Puede expresar restricciones para las siguientes entidades:  
+ El tipo de flujo de trabajo. El nombre y la versión tienen claves independientes.
+ El tipo de actividad. El nombre y la versión tienen claves independientes.
+ Las listas de tareas.
+ Tags. Puede especificar varias etiquetas para algunas acciones. En ese caso, cada etiqueta tiene una clave distinta.
Para Amazon SWF, todos los valores son cadenas, de modo que puede limitar un parámetro por medio de un operador de cadena como `StringEquals`, que limita el parámetro a una cadena especificada. Sin embargo, los operadores de comparación de la cadena regulares como `StringEquals` requieren que todas las solicitudes incluyan el parámetro. Si no incluye el parámetro de forma explícita, y no hay un valor predeterminado como la lista de tareas predeterminada provista durante el registro del tipo, se denegará el acceso.  
A menudo es útil tratar las condiciones como si fueran opcionales. De este modo, puede llamar a una acción sin incluir necesariamente el parámetro asociado. Por ejemplo, es posible que desee permitir que un decisor especifique un conjunto de [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)decisiones, pero también permitirle especificar solo una de ellas para una llamada determinada. En ese caso, puede limitar los parámetros pertinentes con un operador `StringEqualsIfExists`, a fin de permitir el acceso si el parámetro satisface la condición, pero sin denegar el acceso si el parámetro está ausente.
Para obtener una lista completa de los parámetros que puede limitar y las claves asociadas, consulte [Resumen de las API](swf-dev-iam.api.md).

La siguiente sección proporciona ejemplos de cómo crear políticas de Amazon SWF. Para obtener más información, consulte [Condiciones de la cadena](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#AccessPolicyLanguage_ConditionType). 

## Redacción de políticas para Amazon SWF
<a name="swf-dev-iam.policies.examples"></a>

Un flujo de trabajo consta de varios *actores*: actividades, decisores, etc. Para controlar el acceso de cada actor, asocie una política de IAM adecuada.

Con la siguiente acción, el actor tendrá acceso completo a la cuenta en todas las regiones:
+ **Acción:** `swf:*`
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/*`

 Puede utilizar comodines para que un solo valor represente varios recursos, acciones o regiones.
+ El primer comodín (`*`) del `Resource` valor indica que los permisos de recursos se aplican a todas **las regiones**. 

  Para limitar los permisos a una sola región, sustituya el comodín por la cadena de región apropiada, como us-east-1. 
+ El segundo comodín (`*`) en el valor `Resource` permite al actor acceder a todos los dominios en las regiones especificadas.
+ El comodín (`*`) en el valor `Action` permite al actor llamar a cualquier acción de Amazon SWF. 

Para obtener más información sobre el uso de los comodines, consulte [Descripciones de elementos](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html)

### Permisos de dominio
<a name="swf-dev-iam.policies.examples.domain"></a>

Para restringir los flujos de trabajo de un departamento a un dominio concreto, puedes conceder un permiso que permita a un actor realizar cualquier acción, pero solo para un departamento específico. 

Para conceder a un actor acceso a más de un dominio, expresa el permiso para cada dominio en forma de lista de declaraciones:
+ **Acción:** `swf:*`
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/department1` 
+ **Recurso:** `arn:aws:swf:*:123456789012:/domain/department2` 

Puede permitir que un actor utilice cualquier acción de Amazon SWF en los dominios `department1` y`department2`. También puede utilizar comodines en ocasiones para representar varios dominios. 

### Restricciones y permisos de la API
<a name="swf-dev-iam.policies.examples.api"></a>

Usted controla qué **acciones** puede utilizar un actor especificando la acción en el `Action` elemento. 

Con la siguiente acción, un actor solo puede llamar `StartWorkflowExecution` para iniciar flujos de trabajo. No puede usar ninguna otra acción.
+ **Acción:** `swf:StartWorkflowExecution` 

**Condiciones**  
Si lo desea, puede restringir los valores de los parámetros permitidos de la acción mediante un `Condition` elemento.

Para restringir los flujos de trabajo que puede iniciar un actor, restrinja uno o más de los valores de los `StartWorkflowExecution` parámetros, de la siguiente manera:

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

Un actor con las restricciones anteriores solo `version2` puede ejecutar `workflow1` y ambos parámetros deben incluirse en la solicitud.

Para limitar un parámetro sin tener que incluirlo en una solicitud, utilice un operador `StringEqualsIfExists`, como sigue:

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

Un actor con la política anterior puede especificar opcionalmente una lista de tareas al iniciar la ejecución de un flujo de trabajo.

Puede limitar la lista de etiquetas para algunas acciones. Cada etiqueta tiene una clave independiente, por lo que puede `swf:tagList.member.0` restringir la primera etiqueta de la lista, `swf:tagList.member.1` restringir la segunda etiqueta de la lista, etc., hasta un máximo de 5. 

Debe tener cuidado al restringir las listas de etiquetas. Por ejemplo, ***no*** se recomienda la siguiente condición. 

**No** se recomienda la siguiente condición porque permite especificar opcionalmente una `some_ok_tag` u otra`another_ok_tag`. Sin embargo, la condición restringe solo el **primer elemento** de la lista de etiquetas. La lista podría tener elementos adicionales con valores arbitrarios, todos los cuales estarían permitidos porque la condición no aplica ninguna condición `swf:tagList.member.1``swf:tagList.member.2`, etc.

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

Una forma de solucionar el problema anterior es impedir el uso de listas de etiquetas. 

La siguiente política asegura que solo se permitan `some_ok_tag` o `another_ok_tag` al exigir que la lista tenga solo un elemento.

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

### Restricciones y permisos de pseudo API
<a name="pseudo-api-permissions-constraints"></a>

Para restringir las decisiones disponibles`RespondDecisionTaskCompleted`, primero debes permitir que el actor llame`RespondDecisionTaskCompleted`. A continuación, debes expresar los permisos para los miembros de la pseudoAPI correspondientes utilizando la misma sintaxis que para la API normal, de la siguiente manera:
+ **Declaración 1**

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

  **Acción:** `swf:RespondDecisionTaskCompleted` 
+ **Declaración 2**

  **Recurso:** `*` 

  **Acción:** `swf:ScheduleActivityTask` 

  **Condición**: ` "StringEquals" : { "swf:activityType.name" : "SomeActivityType" }` 

La primera `Statement` permite al actor llamar`RespondDecisionTaskCompleted`. La segunda afirmación permite al actor utilizar la `ScheduleActivityTask` decisión de ordenar a Amazon SWF que programe una tarea de actividad. Para permitir todas las decisiones, sustituya «swf:ScheduleActivityTask" por «swf: \$1».

Puede utilizar operadores de condición para limitar los parámetros al igual que con la API normal. El `StringEquals` operador del ejemplo anterior `Condition` permite `RespondDecisionTaskCompleted` programar una tarea de actividad para la `SomeActivityType` actividad y debe programarla. Si quiere permitir que `RespondDecisionTaskCompleted` utilice un valor de parámetro pero sin que sea obligatorio, utilice el operador `StringEqualsIfExists`.

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

Puede asociar la política `SimpleWorkflowFullAccess` a las identidades de IAM.

Esta política proporciona acceso completo al servicio de configuración de Amazon SWF.

## Limitaciones del modelo de servicio de las políticas de IAM
<a name="swf-dev-iam.policies.allowed"></a>

Debe tener presentes las restricciones del modelo de servicio al crear políticas de IAM. Es posible crear una política de IAM válida desde el punto de vista sintáctico que represente una solicitud de Amazon SWF no válida; una solicitud permitida en términos de control de acceso puede producir un error, ya que se trata de una solicitud no válida. 

Por ejemplo, el modelo de servicio de Amazon SWF **no** permite utilizar `tagFilter` los parámetros `typeFilter` and en la misma `[ListOpenWorkflowExecutions](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListOpenWorkflowExecutions.html)` solicitud. La siguiente condición permitiría que las llamadas que el servicio rechazara (mediante el lanzamiento) por considerarlas solicitudes no válidas`ValidationException`:

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