

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 Amazon Verified Permissions
<a name="policies"></a>

Una *política* es una instrucción que permite o prohíbe a una *entidad principal* realizar una o más *acciones* en un *recurso*. Cada política se evalúa de forma independiente de las demás políticas. Para obtener más información sobre cómo se estructuran y evalúan las políticas de Cedar, consulte la sección sobre la [validación de las políticas de Cedar con el esquema](https://docs.cedarpolicy.com/policies/validation.html) en la Guía de referencia sobre el lenguaje de las políticas de Cedar.

Si lo desea, puede asignar un nombre de política a una política. Los nombres de las políticas deben ser únicos para todas las políticas del almacén de políticas y tener el prefijo. `name/` Puede utilizar un nombre de política en lugar del identificador de la política en las operaciones del plano de control que acepten un `policyId` parámetro. En el siguiente ejemplo, se utiliza un nombre de política para recuperar una política con él`GetPolicy`.

```
$ aws verifiedpermissions get-policy \
    --policy-id name/example-policy \
    --policy-store-id PSEXAMPLEabcdefg111111
```

**importante**  
Cuando redacte las políticas de Cedar que hagan referencia a las entidades principales, los recursos y las acciones, puede definir los identificadores únicos que se utilizan para cada uno de esos elementos. Le recomendamos encarecidamente que siga las siguientes prácticas recomendadas:  
**Utilice identificadores únicos universales (UUIDs) para todos los identificadores principales y de recursos.**  
Por ejemplo, si el usuario `jane` deja la empresa y luego permite que otra persona use el nombre `jane`, ese nuevo usuario tendrá acceso automáticamente a todo lo que otorgan las políticas que aún hacen referencia a `User::"jane"`. Cedar no puede distinguir entre el usuario nuevo y el antiguo. Esto también se aplica a los identificadores de las entidades principales y de los recursos. Utilice siempre identificadores con garantías de que son únicos y que no se han reutilizado nunca para asegurarse de no conceder acceso involuntariamente debido a la presencia de un identificador antiguo en una política.  
Cuando utilice un UUID para una entidad, le recomendamos que lo siga del especificador//comentario y del nombre “descriptivo” de la entidad. Esto ayuda a que sus políticas sean más fáciles de entender. Por ejemplo: principal == Role: :"a1b2c3d4-e5f6-a1b2-c3d4- «,//administradores EXAMPLE11111
**No incluya información de identificación personal, confidencial o sensible como parte del identificador único de sus entidades principales o recursos.** Estos identificadores se incluyen en las entradas de registro compartidas en las rutas. AWS CloudTrail 

**Topics**
+ [Creación de políticas estáticas de Amazon Verified Permissions](policies-create.md)
+ [Edición de políticas estáticas de Amazon Verified Permissions](policies-edit.md)
+ [Añadir contexto](context.md)
+ [Uso del banco de pruebas de permisos verificados de Amazon](test-bench.md)
+ [Ejemplo de políticas de Amazon Verified Permissions](policies-examples.md)

# Creación de políticas estáticas de Amazon Verified Permissions
<a name="policies-create"></a>

Puede crear una política estática para que los directores les permitan o prohíban realizar acciones específicas en recursos específicos para su aplicación. Una política estática incluye valores específicos `principal` `resource` y está lista para usarse en las decisiones de autorización. 

------
#### [ Consola de administración de AWS ]

**Para crear una política estática**

1. Abra la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions/). Elige tu almacén de políticas.

1. En el panel de navegación de la izquierda, elija **Políticas**.

1. Seleccione **Crear política** y, a continuación, elija **Crear política estática**.
**nota**  
Si tienes una declaración de política que te gustaría usar, pasa al **paso 8** y pega la política en la sección **Política** de la página siguiente.

1. En la sección **Efecto de la política**, seleccione si la política **permitirá** o **prohibirá** una acción cuando una solicitud coincida con la política. Si eliges **Permitir**, la política permite a los directores realizar las acciones con los recursos. Por el contrario, si eliges **Prohibir**, la política no permite que los directores realicen las acciones en los recursos.

1. En el campo **Ámbito de las entidades principales**, elija el ámbito de las entidades principales al que se aplicará la política.
   + Elija **Entidad principal específica** para aplicar la política a una entidad principal concreta. Especifica el tipo de entidad y el identificador del principal al que se le permitirá o prohibirá realizar las acciones especificadas en la política.
   + Seleccione **Grupo de entidades principales** para aplicar la política a un grupo de entidades principales. Escriba el nombre del grupo de entidades principales en el campo **Grupo de entidades principales**.
   + Seleccione **Todas las entidades principales** para aplicar la política a todas las entidades principales de su almacén de políticas.

1. En el campo **Ámbito de los recursos**, elija el ámbito de los recursos al que se aplicará la política.
   + Seleccione **Recursos específicos** para aplicar la política a un recurso específico. Especifique el tipo de entidad y el identificador del recurso al que se debe aplicar la política.
   + Seleccione **Grupo de recursos** para aplicar la política a un grupo de recursos. Escriba el nombre del grupo de recursos en el campo **Grupo de recursos**.
   + Seleccione **Todos los recursos** para aplicar la política a todos los recursos de su almacén de políticas.

1. En el campo **Ámbito de las acciones**, elija el ámbito de los recursos al que se aplicará la política.
   + Seleccione **Conjunto específico de acciones** para aplicar la política a un conjunto de acciones. Seleccione las casillas de verificación situadas junto a las acciones para aplicar la política.
   + Seleccione **Todas las acciones** para aplicar la política a todas las acciones de su almacén de políticas.

1. Elija **Siguiente**.

1. En la sección **Política**, revise su política de Cedar. Puede elegir **Formato** para dar formato a la sintaxis de su política con el espaciado y la sangría recomendados. Para obtener información más detallada consulte el tema sobre la [construcción básica de políticas en Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) en la Guía de referencia sobre el lenguaje de las políticas de Cedar.

1. En la sección **Detalles**, escriba una descripción opcional de la política.

1. Elija **Crear política**.

------
#### [ AWS CLI ]

**Para crear una política estática**  
Puede crear una política estática mediante la [CreatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicy.html)operación. En el ejemplo siguiente se crea una política estática sencilla.

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Description\": \"MyTestPolicy\", \"Statement\": \"permit(principal,action,resource) when {principal.owner == resource.owner};\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111
{
"Arn": "arn:aws:verifiedpermissions::123456789012:policy/PSEXAMPLEabcdefg111111/SPEXAMPLEabcdefg111111",
    "createdDate": "2023-05-16T20:33:01.730817+00:00",
    "lastUpdatedDate": "2023-05-16T20:33:01.730817+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC"
}
```

**Para crear una política con un nombre de política**  
Si lo desea, puede especificar un nombre de política al crear una política. El nombre debe ser único para todas las políticas del almacén de políticas y debe ir precedido de`name/`. Puede usar el nombre en lugar del ID de la política.

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Statement\": \"permit(principal, action, resource in Album::\\\"public_folder\\\");\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "resource": {
        "entityId": "public_folder",
        "entityType": "Album"
    }
}
```

**nota**  
Si especifica un nombre que ya está asociado a otra política en el almacén de políticas, recibirá un `ConflictException` error.

------

# Edición de políticas estáticas de Amazon Verified Permissions
<a name="policies-edit"></a>

Puede editar una política estática existente en su almacén de políticas. Solo puede actualizar directamente las políticas estáticas. Para cambiar una política vinculada a una plantilla, debe actualizar la plantilla de política. Para obtener más información, consulte [Edición de plantillas de política de permisos verificados de Amazon](policy-templates-edit.md).

Puede cambiar los siguientes elementos de una política estática:
+ La `action` referenciada por la política.
+ Una cláusula de condición, como `when` y `unless`.

No puede cambiar los siguientes elementos de una política estática. Para cambiar cualquiera de estos elementos, tendrá que eliminar y volver a crear la política.
+ Una política pasa de ser una política estática a una política vinculada a una plantilla.
+ El efecto de una política estática procedente de o. `permit` `forbid`
+ La `principal` a la que hace referencia una política estática.
+ El `resource` al que hace referencia una política estática.

------
#### [ Consola de administración de AWS ]

**Para editar una política estática**

1. Abra la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions/). Elige tu almacén de políticas.

1. En el panel de navegación de la izquierda, seleccione **Políticas**.

1. Seleccione el botón de opción situado junto a la política estática que desee editar y, a continuación, **Editar**.

1. En la sección **Cuerpo de la política**, actualice `action` o la cláusula de condición de su política estática. No puede actualizar el efecto de la política, `principal`, o `resource` de la política.

1. Elija **Actualizar política**.
**nota**  
Si la [validación de políticas](policy-validation-mode.md) está habilitada en el almacén de políticas, la actualización de una política estática hace que Verified Permissions valide la política con el esquema del almacén de políticas. Si la política estática actualizada no supera la validación, se produce un error en la operación y la actualización no se guarda.

------
#### [ AWS CLI ]

**Para editar una política estática**  
Puede editar una política estática mediante la [UpdatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdatePolicy.html)operación. En el ejemplo siguiente se edita una política estática sencilla. 

En el ejemplo, se utiliza el archivo `definition.txt` para incluir la definición de la política.

```
{
    "static": {
        "description":  "Grant everyone of janeFriends UserGroup access to the vacationFolder Album",
        "statement": "permit(principal in UserGroup::\"janeFriends\", action, resource in Album::\"vacationFolder\" );"
    }
}
```

El siguiente comando hace referencia a ese archivo.

```
$ aws verifiedpermissions create-policy \
    --definition file://definition.txt \
    --policy-store-id PSEXAMPLEabcdefg111111

{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

**Para actualizar el nombre de una política**  
Puede establecer o actualizar el nombre de una política al actualizar una política. El nombre debe ser único para todas las políticas del almacén de políticas y debe ir precedido de`name/`. Si no incluye el campo de nombre en la solicitud de actualización, el nombre existente no cambiará. Para eliminar un nombre, configúrelo en una cadena vacía.

```
$ aws verifiedpermissions update-policy \
    --policy-id SPEXAMPLEabcdefg111111 \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --definition file://definition.txt \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:47:42.804511+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

------

# Añadir contexto
<a name="context"></a>

El *contexto* es la información relevante para las decisiones políticas, pero no forma parte de la identidad del director, la acción o el recurso. La afirmación del token de acceso es el contexto. Es posible que desee permitir una acción solo desde un conjunto de direcciones IP de origen o solo si el usuario ha iniciado sesión con MFA. Su aplicación tiene acceso a estos datos de sesión contextuales y debe rellenarlos para las solicitudes de autorización. Los datos de contexto de una solicitud de autorización de permisos verificados deben tener formato JSON en un elemento. `contextMap`

Los ejemplos que ilustran este contenido provienen de un almacén de políticas de [muestra](policy-stores-create.md). Para continuar, cree el almacén de políticas de **DigitalPetStore**muestra en su entorno de pruebas.

El siguiente objeto de contexto declara uno de cada tipo de datos de Cedar para una aplicación según el almacén de **DigitalPetStore**políticas de muestra.

```
"context": {
  "contextMap": {
    "AccountCodes": {
      "set": [
        {
          "long": 111122223333
        },
        {
          "long": 444455556666
        },
        {
          "long": 123456789012
        }
      ]
    },
    "approvedBy": {
    "entityIdentifier": {
      "entityId": "Bob",
      "entityType": "DigitalPetStore::User"
    }
    },
    "MfaAuthorized": {
      "boolean": true
    },
    "NetworkInfo": {
      "record": {
        "IPAddress": {
          "string": "192.0.2.178"
        },
        "Country": {
          "string": "United States of America"
        },
        "SSL": {
          "boolean": true
        }
    }
    },
    "RequestedOrderCount": {
      "long": 4
    },
    "UserAgent": {
      "string": "My UserAgent 1.12"
    }
  }
}
```Tipos de datos en el contexto de la autorización

**Booleano**  
Un binario `true` o un `false` valor. En el ejemplo, el valor booleano `true` for `MfaAuthenticated` indica que el cliente ha realizado una autenticación multifactorial antes de solicitar ver su pedido.

**Establezca**  
Un conjunto de elementos contextuales. Los miembros del conjunto pueden ser todos del mismo tipo, como en este ejemplo, o de tipos diferentes, incluido un conjunto anidado. En el ejemplo, el cliente está asociado a 3 cuentas diferentes.

**Cadena**  
Secuencia de letras, números o símbolos, encerrados entre `"` caracteres. En el ejemplo, la `UserAgent` cadena representa el navegador que el cliente utilizó para solicitar ver su pedido.

**Largo**  
Un número entero. En el ejemplo, `RequestedOrderCount` indica que esta solicitud forma parte de un lote que surgió cuando el cliente solicitó ver cuatro de sus pedidos anteriores.

**Registro**  
Un conjunto de atributos. Debe declarar estos atributos en el contexto de la solicitud. Un almacén de políticas con un esquema debe incluir esta entidad y los atributos de la entidad en el esquema. En el ejemplo, el `NetworkInfo` registro contiene información sobre la IP de origen del usuario, la geolocalización de esa IP determinada por el cliente y el cifrado en tránsito.

**EntityIdentifier**  
Una referencia a una entidad y a los atributos declarados en el `entities` elemento de la solicitud. En el ejemplo, el empleado aprobó el pedido del usuario`Bob`.

Para probar este contexto de ejemplo en la **DigitalPetStore**aplicación de ejemplo, debes actualizar tu solicitud`entities`, el esquema del almacén de políticas y la política estática con la descripción **Customer Role: Get Order**.

## Modificar DigitalPetStore para aceptar el contexto de autorización
<a name="authorization-context-example"></a>

Inicialmente, no **DigitalPetStore**es un almacén de políticas muy complejo. No incluye políticas ni atributos de contexto preconfigurados para respaldar el contexto que hemos presentado. Para evaluar un ejemplo de solicitud de autorización con esta información contextual, realice las siguientes modificaciones en su almacén de políticas y en su solicitud de autorización. Para ver ejemplos de contexto con la información del token de acceso como contexto, consulte [Mapear los tokens de Amazon Cognito acceso y Mapear los tokens](cognito-map-token-to-schema.md#cognito-map-access-token) [de acceso del OIDC](oidc-map-token-to-schema.md#oidc-map-access-token).

------
#### [ Schema ]

Aplique las siguientes actualizaciones al esquema de su almacén de políticas para admitir los nuevos atributos de contexto. `GetOrder`Actualícelo de la `actions` siguiente manera.

```
"GetOrder": {
  "memberOf": [],
  "appliesTo": {
    "resourceTypes": [
      "Order"
    ],
    "context": {
      "type": "Record",
      "attributes": {
        "AccountCodes": {
          "type": "Set",
          "required": true,
          "element": {
            "type": "Long"
          }
        },
        "approvedBy": {
          "name": "User",
          "required": true,
          "type": "Entity"
        },
        "MfaAuthorized": {
          "type": "Boolean",
          "required": true
        },
        "NetworkInfo": {
          "type": "NetworkInfo",
          "required": true
        },
        "RequestedOrderCount": {
          "type": "Long",
          "required": true
        },
        "UserAgent": {
          "required": true,
          "type": "String"
        }
      }
    },
    "principalTypes": [
      "User"
    ]
  }
}
```

Para hacer referencia al tipo de `record` datos mencionado `NetworkInfo` en el contexto de la solicitud, cree una construcción [CommonType](https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes) en el esquema añadiendo anteriormente `actions` lo siguiente al esquema. Una `commonType` construcción es un conjunto compartido de atributos que se pueden aplicar a distintas entidades.

```
"commonTypes": {
  "NetworkInfo": {
    "attributes": {
      "IPAddress": {
        "type": "String",
        "required": true
      },
      "SSL": {
        "required": true,
        "type": "Boolean"
      },
      "Country": {
        "required": true,
        "type": "String"
      }
    },
    "type": "Record"
  }
},
```

------
#### [ Policy ]

La siguiente política establece las condiciones que debe cumplir cada uno de los elementos de contexto proporcionados. Se basa en la política estática existente y se describe como **Customer Role: Get Order**. Inicialmente, esta política solo requiere que el principal que realiza una solicitud sea el propietario del recurso.

```
permit (
    principal in DigitalPetStore::Role::"Customer",
    action in [DigitalPetStore::Action::"GetOrder"],
    resource
) when {
    principal == resource.owner &&
    context.AccountCodes.contains(111122223333) &&
    context.approvedBy in DigitalPetStore::Role::"Employee" &&
    context.MfaAuthorized == true &&
    context.NetworkInfo.Country like "*United States*" &&
    context.NetworkInfo.IPAddress like "192.0.2.*" &&
    context.NetworkInfo.SSL == true &&
    context.RequestedOrderCount <= 4 &&
    context.UserAgent like "*My UserAgent*"
};
```

Ahora exigimos que la solicitud de recuperación de un pedido cumpla con las condiciones de contexto adicionales que añadimos a la solicitud.

1. El usuario debe haber iniciado sesión con MFA.

1. El navegador web del usuario `User-Agent` debe contener la cadena`My UserAgent`.

1. El usuario debe haber solicitado ver 4 pedidos o menos.

1. Uno de los códigos de cuenta del usuario debe ser`111122223333`.

1. La dirección IP del usuario debe tener su origen en los Estados Unidos, debe estar en una sesión cifrada y su dirección IP debe empezar por`192.0.2.`.

1. Un empleado debe haber aprobado su pedido. En el `entities` elemento de la solicitud de autorización, declararemos un usuario `Bob` que tiene la función de`Employee`.

------
#### [ Request body ]

Tras configurar el almacén de políticas con el esquema y la política adecuados, puede presentar esta solicitud de autorización a la operación de la API de permisos verificados [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html). Tenga en cuenta que el `entities` segmento contiene una definición de `Bob` un usuario con un rol de`Employee`.

```
{
  "principal": {
    "entityType": "DigitalPetStore::User",
    "entityId": "Alice"
  },
  "action": {
    "actionType": "DigitalPetStore::Action",
    "actionId": "GetOrder"
  },
  "resource": {
    "entityType": "DigitalPetStore::Order",
    "entityId": "1234"
  },
  "context": {
    "contextMap": {
      "AccountCodes": {
        "set": [
          {"long": 111122223333},
          {"long": 444455556666},
          {"long": 123456789012}
        ]
      },
      "approvedBy": {
        "entityIdentifier": {
          "entityId": "Bob",
          "entityType": "DigitalPetStore::User"
        }
      },
      "MfaAuthorized": {
        "boolean": true
      },
      "NetworkInfo": {
        "record": {
          "Country": {"string": "United States of America"},
          "IPAddress": {"string": "192.0.2.178"},
          "SSL": {"boolean": true}
        }
      },
      "RequestedOrderCount":{
        "long": 4
      },
      "UserAgent": {
        "string": "My UserAgent 1.12"
      }
    }
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Alice"
        },
        "attributes": {
          "memberId": {
            "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Customer"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Bob"
        },
        "attributes": {
          "memberId": {
            "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Employee"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::Order",
          "entityId": "1234"
        },
        "attributes": {
          "owner": {
            "entityIdentifier": {
              "entityType": "DigitalPetStore::User",
              "entityId": "Alice"
            }
          }
        },
        "parents": []
      }
     ]
   },
   "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------

# Uso del banco de pruebas de permisos verificados de Amazon
<a name="test-bench"></a>

Utilice el banco de pruebas de permisos verificados para probar las políticas de permisos verificados y solucionar sus problemas mediante la ejecución de [solicitudes de autorización en función](terminology.md#term-authorization-request) de ellas. El banco de pruebas utiliza los parámetros que usted especifique para determinar si las políticas de Cedar de su almacén de políticas autorizarían la solicitud. Puede cambiar entre el **modo visual** y el modo **JSON** mientras prueba las solicitudes de autorización. Para obtener más información sobre cómo se estructuran y evalúan las políticas de Cedar, consulte la sección sobre la [construcción básica de políticas en Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) en la Guía de referencia sobre el lenguaje de las políticas de Cedar.

**nota**  
Al realizar una solicitud de autorización mediante Verified Permissions, puede proporcionar la lista de entidades principales y recursos como parte de la solicitud en la sección **Entidades adicionales**. Sin embargo, no es posible incluir los detalles de las acciones. Deben especificarse en el esquema o deducirse de la solicitud. No puede incluir una acción en la sección **Entidades adicionales**.

Para obtener una descripción visual y una demostración del banco de pruebas, consulte [Amazon Verified Permissions: Policy Creation and Testing (Primer Series \$13)](https://www.youtube.com/watch?v=Gi3joEySMPQ) en el AWS YouTube canal.

------
#### [ Visual mode ]

**nota**  
Debe tener un esquema definido en su almacén de políticas para utilizar el **modo visual** del banco de pruebas.

**Para probar las políticas en modo visual**

1. Abre la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions/). Elige tu almacén de políticas.

1. En el panel de navegación de la izquierda, seleccione **Banco de pruebas**.

1. Elija **Modo visual**.

1. En la sección **Entidad principal**, elija **Entidad principal que realiza la acción** entre los tipos de entidad principal del esquema. Escriba un identificador para la entidad principal en el cuadro de texto.

1. (Opcional) Seleccione **Agregar un elemento principal** para añadir las entidades principales del elemento principal especificado. Para eliminar un elemento principal que se haya agregado a la entidad principal, seleccione **Eliminar** junto al nombre del elemento principal.

1. Especifique el **valor de atributo** para cada atributo de la entidad principal especificada. El banco de pruebas utiliza los valores de atributo especificados en la solicitud de autorización simulada.

1. En la sección **Recursos**, elija el **recurso sobre el que actúa la entidad principal**. Escriba un identificador para el recurso en el cuadro de texto.

1. (Opcional) Seleccione **Agregar un elemento principal** para añadir las entidades principales del recurso especificado. Para eliminar un elemento principal que se haya agregado al recurso, seleccione **Eliminar** junto al nombre del elemento principal.

1. Especifique el **valor de atributo** para cada atributo del recurso especificado. El banco de pruebas utiliza los valores de atributo especificados en la solicitud de autorización simulada.

1. En la sección **Acción**, elija **Acción que va a tomar la entidad principal** en la lista de acciones válidas para la entidad principal y el recurso especificados.

1. Especifique el **valor de atributo** para cada atributo de la acción especificada. El banco de pruebas utiliza los valores de atributo especificados en la solicitud de autorización simulada.

1. (Opcional) En la sección **Entidades adicionales**, elija **Agregar entidad** para agregar las entidades que se evaluarán para la decisión de autorización.

1. Elija el **identificador de entidad** en la lista desplegable y escriba el identificador de entidad.

1. (Opcional) Seleccione **Agregar un elemento principal** para añadir las entidades principales de la entidad especificada. Para eliminar un elemento principal que se haya agregado a la entidad, seleccione **Eliminar** junto al nombre del elemento principal.

1. Especifique el **valor de atributo** para cada atributo de la entidad especificada. El banco de pruebas utiliza los valores de atributo especificados en la solicitud de autorización simulada.

1. Elija **Confirmar** para añadir la entidad al banco de pruebas.

1. Seleccione **Ejecutar solicitud de autorización** para simular la solicitud de autorización para las políticas de Cedar en el almacén de políticas. El banco de pruebas muestra la decisión de aceptar o denegar la solicitud junto con información sobre las políticas satisfechas o los errores encontrados durante la evaluación.

------
#### [ JSON mode ]

**Para probar las políticas en modo JSON**

1. Abre la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions/). Elige tu almacén de políticas.

1. En el panel de navegación de la izquierda, seleccione **Banco de pruebas**.

1. Elija **Modo JSON**.

1. En la sección **Detalles de la solicitud**, si tiene un esquema definido, elija **Entidad principal que realiza la acción** entre los tipos de entidad principal de su esquema. Escriba un identificador para la entidad principal en el cuadro de texto.

   Si no tiene un esquema definido, escriba la entidad principal en el cuadro de texto **Entidad principal que realiza la acción**.

1. Si tiene un esquema definido, elija el **recurso** entre los tipos de recurso del esquema. Escriba un identificador para el recurso en el cuadro de texto.

   Si no tiene un esquema definido, escriba el recurso en el cuadro de texto **Recurso**.

1. Si tiene un esquema definido, elija la **acción** en la lista de acciones válidas para la entidad principal y el recurso especificados.

   Si no tiene un esquema definido, escriba el recurso en el cuadro de texto **Acción**.

1. Introduzca el contexto de la solicitud de simulación en el campo **Contexto**. El contexto de la solicitud es información adicional que se puede utilizar para tomar decisiones de autorización.

1. En el campo **Entidades**, introduzca la jerarquía de las entidades y los atributos que se van a evaluar para la decisión de autorización.

1. Seleccione **Ejecutar solicitud de autorización** para simular la solicitud de autorización para las políticas de Cedar en el almacén de políticas. El banco de pruebas muestra la decisión de aceptar o denegar la solicitud junto con información sobre las políticas satisfechas o los errores encontrados durante la evaluación.

------

# Ejemplo de políticas de Amazon Verified Permissions
<a name="policies-examples"></a>

Algunos de los ejemplos de políticas que se incluyen aquí son ejemplos básicos de políticas de Cedar y otros son específicos de permisos verificados. Los más básicos enlazan con la Guía de referencia sobre el lenguaje de las políticas de Cedar y están incluidos allí. Para obtener más información sobre la sintaxis de las políticas de Cedar, consulte el tema sobre la [construcción básica de políticas en Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) en la Guía de referencia sobre el lenguaje de las políticas de Cedar.

**Ejemplos de políticas**
+ [Permite el acceso a entidades individuales](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-indivuals)
+ [Permite el acceso a grupos de entidades](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-groups)
+ [Permite el acceso a cualquier entidad](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-any)
+ [Permite el acceso a los atributos de una entidad (ABAC)](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-abac)
+ [Denega el acceso](https://docs.cedarpolicy.com/policies/policy-examples.html#deny-access)
+ [Utiliza la notación entre corchetes para hacer referencia a los atributos del token](#policies-examples-brackets)
+ [Utiliza la notación de puntos para hacer referencia a los atributos](#policies-examples-dot)
+ [Refleja los atributos Amazon Cognito del token de ID](#policies-examples-cognito-id)
+ [Refleja los atributos del token de ID de OIDC](#policies-examples-oidc-id)
+ [Refleja los atributos del token de Amazon Cognito acceso](#policies-examples-cognito-access)
+ [Refleja los atributos del token de acceso del OIDC](#policies-examples-oidc-access)

## Utiliza la notación entre corchetes para hacer referencia a los atributos del token
<a name="policies-examples-brackets"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política que utilice la notación entre corchetes para hacer referencia a los atributos del token.

Para obtener más información sobre el uso de atributos de token en las políticas de Verified Permissions, consulte [Asignación de Amazon Cognito tokens a un esquema](cognito-map-token-to-schema.md) y [Asignación de tokens OIDC a](oidc-map-token-to-schema.md) un esquema.

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal has email && principal.email == "alice@example.com" &&
    context["ip-address"] like "192.0.2.*"
};
```

## Utiliza la notación de puntos para hacer referencia a los atributos
<a name="policies-examples-dot"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política que utilice la notación de puntos para hacer referencia a los atributos.

Para obtener más información sobre el uso de atributos de token en las políticas de Verified Permissions, consulte [Asignación de Amazon Cognito tokens a un esquema](cognito-map-token-to-schema.md) y [Asignación de tokens OIDC a](oidc-map-token-to-schema.md) un esquema.

```
permit(principal, action, resource)
when {
    principal.cognito.username == "alice" &&
    principal.custom.employmentStoreCode == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## Refleja los atributos Amazon Cognito del token de ID
<a name="policies-examples-cognito-id"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política a partir de las referencias a los atributos del token de ID Amazon Cognito.

Para obtener más información sobre el uso de atributos de token en las políticas de Verified Permissions, consulte [Asignación de Amazon Cognito tokens a un esquema](cognito-map-token-to-schema.md) y [Asignación de tokens OIDC a](oidc-map-token-to-schema.md) un esquema.

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## Refleja los atributos del token de ID de OIDC
<a name="policies-examples-oidc-id"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política que haga referencia a los atributos del token de ID desde un proveedor de OIDC.

Para obtener más información sobre el uso de atributos de token en las políticas de permisos verificados, consulte [Asignación de Amazon Cognito tokens a un esquema y Asignación](cognito-map-token-to-schema.md) [de tokens OIDC](oidc-map-token-to-schema.md) a un esquema.

```
permit (
    principal in MyCorp::UserGroup::"MyOIDCProvider|MyUserGroup",
    action,
    resource
) when {
    principal.email_verified == true && principal.email == "alice@example.com" &&
    principal.phone_number_verified == true && principal.phone_number like "+1206*"
};
```

## Refleja los atributos del token de Amazon Cognito acceso
<a name="policies-examples-cognito-access"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política desde la que se haga referencia a los atributos del token de acceso Amazon Cognito.

Para obtener más información sobre el uso de atributos de token en las políticas de Verified Permissions, consulte [Asignación de Amazon Cognito tokens a un esquema](cognito-map-token-to-schema.md) y [Asignación de tokens OIDC a](oidc-map-token-to-schema.md) un esquema.

```
permit(principal, action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"], resource)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI/mydata.write")
};
```

## Refleja los atributos del token de acceso del OIDC
<a name="policies-examples-oidc-access"></a>

En el siguiente ejemplo, se muestra cómo se puede crear una política que haga referencia a los atributos del token de acceso de un proveedor de OIDC.

Para obtener más información sobre el uso de atributos de token en las políticas de permisos verificados, consulte [Asignación de Amazon Cognito tokens a un esquema y Asignación](cognito-map-token-to-schema.md) [de tokens OIDC](oidc-map-token-to-schema.md) a un esquema.

```
permit(
    principal, 
    action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"],
    resource
)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI-read")
};
```