

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.

# Crear almacenes de políticas de Verified Permissions
<a name="policy-stores-create"></a>

Puede crear un almacén de políticas mediante uno de los siguientes métodos:
+ **Siga una configuración guiada**: definirá un tipo de recurso con acciones válidas y un tipo principal antes de crear su primera política.
+ **Configure con una fuente de identidad API Gateway y una fuente** de identidad: defina sus entidades principales con los usuarios que inicien sesión con un proveedor de identidad (IdP) y sus acciones y entidades de recursos desde una API de Amazon API Gateway. Te recomendamos esta opción si quieres que tu aplicación autorice las solicitudes de API con la pertenencia a un grupo de usuarios u otros atributos.
+ **Comience con un ejemplo de almacén de políticas**: elija un ejemplo de almacén de políticas de proyecto predefinido. Le recomendamos esta opción si está aprendiendo sobre Verified Permissions y quiere ver y probar ejemplos de políticas.
+ **Cree un almacén de políticas vacío**: definirá usted mismo el esquema y todas las políticas de acceso. Recomendamos esta opción si ya está familiarizado con la configuración de un almacén de políticas.

------
#### [ Guided setup ]

**Para crear un almacén de políticas con el método **Configuración guiada****

El asistente de configuración guiada le guiará por el proceso de creación de la primera iteración de su almacén de políticas. Creará un esquema para el primer tipo de recurso, describirá las acciones que se aplican a ese tipo de recurso y el tipo de entidad principal para el que va a conceder permisos. A continuación, creará su primera política. Una vez que haya completado este asistente, podrá agregarla a su almacén de políticas, ampliar el esquema para describir otros tipos de recursos y entidades principales y crear políticas y plantillas adicionales.

1. En la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions), seleccione **Crear un nuevo almacén de políticas**.

1. En la sección **Opciones de inicio**, selecciona **Configuración guiada**.

1. Introduzca una **descripción del almacén de políticas**. Este texto puede ser el que mejor se adapte a su organización como referencia sencilla a la función del almacén de políticas actual, por ejemplo, la *aplicación web de actualizaciones meteorológicas*.

1. En la sección **Detalles**, escriba un **espacio de nombres para su esquema**. Para obtener más información sobre los espacios de nombres, consulte. [Definición de espacio de nombres](terminology-differences-avp-cedar.md#differences-namespaces)

1. Elija **Siguiente**.

1. En la ventana **Tipo de recurso**, escriba un nombre para el tipo de recurso. Por ejemplo, `currentTemperature` podría ser un recurso para la aplicación *web de actualizaciones meteorológicas*.

1. (Opcional) Seleccione **Agregar un atributo** para añadir los atributos del recurso. Escriba el **nombre del atributo** y seleccione un **tipo de atributo** para cada atributo del recurso. Elija si cada atributo es **obligatorio**. Por ejemplo, `temperatureFormat` podría ser un atributo del `currentTemperature` recurso y estar en grados Fahrenheit o Celsius. Para eliminar un atributo que se ha añadido al tipo de recurso, seleccione **Eliminar** junto al atributo.

1. En el campo **Acciones**, escriba las acciones que se van a autorizar para el tipo de recurso especificado. Para agregar acciones adicionales para el tipo de recurso, elija **Agregar una acción**. Por ejemplo, `viewTemperature` podría ser una acción en la aplicación *web de actualizaciones meteorológicas*. Para eliminar una acción que se ha añadido al tipo de recurso, seleccione **Eliminar** junto a la acción.

1. En el campo **Nombre del tipo de entidad principal**, escriba el nombre del tipo de entidad principal que utilizará las acciones especificadas para el tipo de recurso. De forma predeterminada, **el usuario** se agrega a este campo, pero se puede reemplazar.

1. Elija **Siguiente**.

1. En la ventana **Tipo de entidad principal**, elija la fuente de identidad para su tipo de entidad principal.
   + Elija **Personalizado** si la aplicación de Verified Permissions proporcionará directamente el ID y los atributos de la entidad principal. Para añadir atributos a la entidad principal, elija **Agregar un atributo**. Verified Permissions utiliza los valores de atributo especificados al verificar las políticas con el esquema. Para eliminar un atributo que se ha añadido para el tipo principal, seleccione **Eliminar** junto al atributo.
   + Elija **Grupo de usuarios de Cognito** si el ID y los atributos del principal se proporcionarán a partir de un ID o token de acceso generado por. Amazon Cognito Seleccione **Conectar grupo de usuarios**. Seleccione **Región de AWS**y escriba el **ID del grupo** de Amazon Cognito usuarios al que desea conectarse. Elija **Conectar**. Para obtener más información, consulte [Autorización con Amazon Verified Permissions](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-authorization-with-avp.html) en la *Guía para desarrolladores de Amazon Cognito*.
   + Elija un **proveedor de OIDC externo** si el ID y los atributos del principal se extraerán de un token de and/or acceso de ID generado por un proveedor de OIDC externo y añada los detalles del proveedor y el token.

1. Elija **Siguiente**.

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

1. En el campo **Ámbito de las entidades principales**, elija las entidades principales a las que se les concederán los permisos de la política.
   + Elija **Entidad principal específica** para aplicar la política a una entidad principal concreta. Elija la entidad principal en el campo **Entidad principal a la que se permitirá realizar acciones** y escriba un identificador de entidad para la entidad principal. Por ejemplo, `user-id` podría ser un identificador de entidad en la aplicación web *Weather* updates.
**nota**  
Si lo está utilizando Amazon Cognito, el identificador de la entidad debe tener el formato siguiente`<userpool-id>|<sub>`.
   + 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 los recursos sobre los que las entidades principales especificadas tendrán autorización para actuar.
   + Seleccione **Recurso específico** para aplicar la política a un recurso específico. Elija el recurso en el campo **Recurso al que se debe aplicar esta política** y escriba un identificador de entidad para el recurso. Por ejemplo, `temperature-id` podría ser un identificador de entidad en la *aplicación web Weather updates*.
   + 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 las acciones para las que las entidades principales especificadas tendrán autorización para llevar a cabo.
   + Seleccione **Conjunto específico de acciones** para aplicar la política a acciones concretas. Seleccione las casillas de verificación situadas junto al campo **Acciones a las que se debe aplicar esta política**.
   + Seleccione **Todas las acciones** para aplicar la política a todas las acciones de su almacén de políticas.

1. Revise la política en la sección **Vista previa de la política**. Seleccione **Crear almacén de políticas**.

------
#### [ Set up with API Gateway and an identity source ]

**Para crear un almacén de políticas mediante el método de configuración **Configurar con API Gateway y una fuente de identidad****

La API Gateway opción se protege APIs con políticas de permisos verificados que están diseñadas para tomar decisiones de autorización a partir de los grupos o *roles* de los usuarios. Esta opción crea un almacén de políticas para probar la autorización con grupos de fuentes de identidad y una API con un autorizador Lambda.

Los usuarios y sus grupos de un IdP se convierten en sus directores (identificadores) o en su contexto (identificadores de acceso). Los métodos y las rutas de una API Gateway API se convierten en las acciones que autorizan tus políticas. La aplicación se convierte en el recurso. Como resultado de este flujo de trabajo, Verified Permissions crea un almacén de políticas, una función Lambda y un autorizador de API Lambda. Debe asignar el [autorizador](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) Lambda a su API después de finalizar este flujo de trabajo.

1. En la [consola de permisos verificados](https://console.aws.amazon.com/verifiedpermissions), seleccione **Crear un nuevo almacén de políticas**.

1. En la sección **Opciones de inicio**, elija **Configurar con una fuente de identidad API Gateway y**, a continuación, seleccione **Siguiente**.

1. En el paso **Importar recursos y acciones**, en **API**, elige una API que sirva de modelo para los recursos y acciones de tu almacén de políticas.

   1. Elija una **etapa de despliegue** entre las etapas configuradas en su API y seleccione **Importar API**. Para obtener más información sobre las etapas de la API, consulte [Configuración de una etapa para una API de REST en la Guía para desarrolladores de Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-stages.html).

   1. Obtenga una vista previa **del mapa de recursos y acciones importados**.

   1. Para actualizar los recursos o las acciones, modifica las rutas o los métodos de la API en la API Gateway consola y selecciona **Importar API** para ver las actualizaciones.

   1. Cuando esté satisfecho con sus opciones, seleccione **Siguiente**.

1. En **Origen de identidad**, elija un **tipo de proveedor de identidad**. Puede elegir un grupo de Amazon Cognito usuarios o un tipo de IdP de OpenID Connect (OIDC).

1. Si eligió **Amazon Cognito**:

   1. Elija un grupo de usuarios en el mismo almacén de políticas Región de AWS y en el que Cuenta de AWS se encuentre.

   1. Elija el **tipo de token que desea transferir a la API** y que desea enviar para su autorización. Ambos tipos de token contienen grupos de usuarios, que son la base de este modelo de autorización vinculado a la API.

   1. En **la validación de clientes de aplicaciones**, puede limitar el alcance de un almacén de políticas a un subconjunto de los clientes de Amazon Cognito aplicaciones de un grupo de usuarios con varios inquilinos. Para solicitar que el usuario se autentique con uno o más clientes de aplicaciones específicos de su grupo de usuarios, seleccione **Aceptar solo los tokens con el cliente de aplicación esperado**. IDs Para aceptar a cualquier usuario que se autentique en el grupo de usuarios, selecciona **No validar el cliente de la aplicación**. IDs

   1. Elija **Siguiente**.

1. Si has elegido un proveedor de **OIDC externo**:

   1. En **URL del emisor, introduzca la URL** de su emisor del OIDC. Este es el punto final del servicio que proporciona, por ejemplo, el servidor de autorización, las claves de firma y otra información sobre su proveedor. `https://auth.example.com` La URL del emisor debe alojar un documento de detección del OIDC en. `/.well-known/openid-configuration`

   1. En **Tipo de token**, elija el tipo de OIDC JWT que desea que envíe su solicitud de autorización. Para obtener más información, consulte [Asignar los Amazon Cognito tokens al esquema y Asignar los tokens](cognito-map-token-to-schema.md) [OIDC](oidc-map-token-to-schema.md) al esquema.

   1. (opcional) En **Reclamaciones de token: opcional**, selecciona **Añadir una notificación de token**, introduce un nombre para el token y selecciona un tipo de valor.

   1. En **Reclamaciones de token de usuario y grupo**, haga lo siguiente:

      1. Introduzca un **nombre de reclamo de usuario en el token** de la fuente de identidad. Por lo general`sub`, se trata de una afirmación de su ID o token de acceso que contiene el identificador único de la entidad que se va a evaluar. Las identidades del IdP del OIDC conectado se asignarán al tipo de usuario del almacén de políticas.

      1. Introduzca un **nombre de reclamación de grupo en el token** de la fuente de identidad. Por lo general`groups`, se trata de una afirmación de tu ID o token de acceso que contiene una lista de los grupos de usuarios. El almacén de políticas autorizará las solicitudes en función de la pertenencia al grupo.

   1. En la **validación de audiencias**, elija `Add value` y añada un valor que desee que su almacén de políticas acepte en las solicitudes de autorización.

   1. Elija **Siguiente**.

1. Si lo desea **Amazon Cognito**, Verified Permissions consulta los grupos de usuarios. En el caso de los proveedores de OIDC, introduzca los nombres de los grupos manualmente. El paso **Asignar acciones a los grupos** crea políticas para el almacén de políticas que permiten a los miembros del grupo realizar acciones.

   1. Elija o añada los grupos que desee incluir en sus políticas.

   1. Asigna acciones a cada uno de los grupos que has seleccionado.

   1. Elija **Siguiente**.

1. En **Implementar la integración de aplicaciones**, elija si desea adjuntar manualmente el autorizador Lambda más adelante o si quiere que Verified Permissions lo haga por usted ahora y revise los pasos que Verified Permissions realizará para crear su almacén de políticas y su autorizador Lambda.

1. **Cuando esté listo para crear los nuevos recursos, elija Crear almacén de políticas.**

1. Mantén abierto el paso de **estado del almacén de políticas** en tu navegador para supervisar el progreso de la creación de recursos mediante permisos verificados.

1. Transcurrido algún tiempo, normalmente alrededor de una hora, o cuando el paso **Implementar el autorizador Lambda** muestre que se ha realizado correctamente**,** si opta por adjuntar el autorizador manualmente, configure su autorizador.

   Los permisos verificados habrán creado una función de Lambda y un autorizador de Lambda en tu API. Elige **Open API** para ir a tu API.

   *Para obtener información sobre cómo asignar un autorizador de Lambda, consulte Uso de autorizadores de [API Gateway Lambda en la Guía para desarrolladores de Amazon](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) API Gateway.*

   1. Diríjase a **Autorizadores** para su API y anote el nombre del autorizador que creó Verified Permissions.

   1. Ve a **Recursos** y selecciona un método de nivel superior en tu API.

   1. Selecciona **Editar** en la **configuración de solicitud de métodos**.

   1. Configure el **autorizador** para que sea el nombre del autorizador que anotó anteriormente.

   1. **Expanda **los encabezados de las solicitudes HTTP**, introduzca un **nombre** o y seleccione `AUTHORIZATION` Obligatorio.**

   1. Implemente la etapa de API.

   1. **Guarde** los cambios.

1. Pruebe su autorizador con un token de grupo de usuarios del **tipo de token** que seleccionó en el paso **Elegir la fuente de identidad**. Para obtener más información sobre el inicio de sesión del grupo de usuarios y la recuperación de los tokens, consulte el [flujo de autenticación del grupo de usuarios](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html) en la Guía *para desarrolladores de Amazon Cognito*.

1. Vuelva a probar la autenticación con un token de grupo de usuarios en el `AUTHORIZATION` encabezado de una solicitud a su API.

1. Examine su nuevo almacén de políticas. Añada y perfeccione las políticas.

------
#### [ Sample policy store ]

**Para crear un almacén de políticas con el método de configuración **Almacén de políticas de muestra****

1. En la sección **Opciones de inicio**, selecciona un **almacén de políticas de muestra**.

1. En la sección **Ejemplo de proyecto**, elija el tipo de aplicación de Verified Permissions de muestra que va a utilizar.
   + **PhotoFlash**es un ejemplo de aplicación web orientada al cliente que permite a los usuarios compartir fotos y álbumes individuales con amigos. Los usuarios pueden establecer permisos detallados sobre quién puede ver, comentar y volver a compartir sus fotos. Los propietarios de las cuentas también pueden crear grupos de amigos y organizar las fotos en álbumes.
   + **DigitalPetStore**es un ejemplo de aplicación en el que cualquiera puede registrarse y convertirse en cliente. Los clientes pueden añadir mascotas para vender, buscar mascotas y realizar pedidos. Los clientes que han añadido una mascota se registran como propietarios de la mascota. Los dueños de mascotas pueden actualizar los detalles de la mascota, subir una imagen de ella o eliminar la lista de mascotas. Los clientes que han realizado un pedido quedan registrados como propietarios del pedido. Los propietarios de los pedidos pueden obtener los detalles del pedido o cancelarlo. Los gerentes de las tiendas de mascotas tienen acceso de administrador.
**nota**  
El almacén de políticas de **DigitalPetStore**muestra no incluye plantillas de políticas. Los almacenes **TinyTodo**de políticas **PhotoFlash**y los de muestra incluyen plantillas de políticas.
   + **TinyTodo**es una aplicación de ejemplo que permite a los usuarios crear tareas y listas de tareas. Los propietarios de las listas pueden administrar y compartir sus listas y especificar quién puede verlas o editarlas.

1. Se generará automáticamente un espacio de nombres para el esquema del almacén de políticas de muestra en función del proyecto de ejemplo que haya elegido.

1. Seleccione **Crear almacén de políticas**.

   El almacén de políticas se crea con políticas y un esquema para el almacén de políticas de muestra que elija. Para obtener más información sobre las políticas vinculadas a plantillas que puede crear para los almacenes de políticas de muestra, consulte [Ejemplos de políticas vinculadas a plantillas de permisos verificados de Amazon](policy-templates-example-policies.md).

------
#### [ Empty policy store ]

**Para crear un almacén de políticas con el método de configuración **Almacén de políticas vacío****

1. En la sección **Opciones de inicio**, elija **Vacía el almacén de políticas**.

1. Seleccione **Crear almacén de políticas**.

Se crea un almacén de políticas vacío sin un esquema, lo que significa que las políticas no se validan. Para obtener más información acerca de cómo actualizar el esquema del almacén de políticas, consulte [Esquema del almacén de políticas de Amazon Verified Permissions.](schema.md).

Para obtener más información sobre cómo crear políticas para su almacén de políticas, consulte [Creación de políticas estáticas de Amazon Verified Permissions](policies-create.md) y [Creación de políticas vinculadas a plantillas de permisos verificados de Amazon](policy-templates-create-policy.md).

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

**Para crear un almacén de políticas vacío mediante la AWS CLI.**  
Puede crear un almacén de políticas mediante la operación `create-policy-store`.

**nota**  
Un almacén de políticas que se crea mediante el AWS CLI está vacío.  
Para añadir un esquema, consulte [Esquema del almacén de políticas de Amazon Verified Permissions.](schema.md).
 Para añadir políticas, consulte [Creación de políticas estáticas de Amazon Verified Permissions](policies-create.md).
Para añadir plantillas de políticas, consulte [Creación de plantillas de políticas de permisos verificados de Amazon](policy-templates-create.md).

```
$ aws verifiedpermissions create-policy-store \
    --validation-settings "mode=STRICT"
{
    "arn": "arn:aws:verifiedpermissions::123456789012:policy-store/PSEXAMPLEabcdefg111111",
    "createdDate": "2023-05-16T17:41:29.103459+00:00",
    "lastUpdatedDate": "2023-05-16T17:41:29.103459+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------
#### [ AWS SDKs ]

Puede crear un almacén de políticas mediante la API `CreatePolicyStore`. Para obtener más información, consulta la Guía [CreatePolicyStore](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicyStore.html)de referencia de la API de permisos verificados de Amazon.

------

# Implementación de permisos verificados de Amazon en Rust con el AWS SDK
<a name="code-samples-rust"></a>

En este tema se proporciona un ejemplo práctico de la implementación de permisos verificados de Amazon en Rust con el AWS SDK. En este ejemplo se muestra cómo desarrollar un modelo de autorización que pueda comprobar si un usuario puede ver una foto. El código de ejemplo utiliza la [aws-sdk-verifiedpermissions](https://docs.rs/aws-sdk-verifiedpermissions/latest/aws_sdk_verifiedpermissions/)caja del [AWS SDK para Rust](https://github.com/awslabs/aws-sdk-rust), que ofrece un conjunto sólido de herramientas con Servicios de AWS las que interactuar.

## Requisitos previos
<a name="rust-prereqs"></a>

 Antes de comenzar, asegúrese de tener la [AWS CLI](https://aws.amazon.com/cli/) configurada en su sistema y de estar familiarizado con Rust.
+ Para obtener instrucciones sobre la instalación del AWS CLI, consulte la [guía de instalación de AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html).
+ Para obtener instrucciones sobre cómo configurar el AWS CLI, consulte [Configuración de los ajustes AWS CLI y los](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-quickstart.html) ajustes del [archivo de credenciales y configuración en el AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-profiles.html).
+ Para obtener más información sobre Rust, consulta [rust-lang.org](https://www.rust-lang.org/) y la Guía del desarrollador del [AWS SDK para Rust.](https://docs.aws.amazon.com//sdk-for-rust/latest/dg/welcome.html)

Con el entorno preparado, exploremos cómo implementar los permisos verificados en Rust.

## Pruebe el código de muestra
<a name="rust-code"></a>

El código de ejemplo hace lo siguiente:
+ Configura el cliente del SDK con el que se comunicará AWS
+ Crea un [almacén de políticas](policy-stores.md)
+ Define la estructura del almacén de políticas mediante la adición de un [esquema](schema.md)
+ Añade una [política](policies.md) para comprobar las solicitudes de autorización
+ Envía una [solicitud de autorización](authorization.md) de prueba para comprobar que todo está configurado correctamente

**Para probar el código de muestra**

1. Crea un proyecto de Rust.

1. Sustituya cualquier código existente `main.rs` por el siguiente código:

   ```
   use std::time::Duration;
   use std::thread::sleep;
   use aws_config::BehaviorVersion;
   use aws_sdk_verifiedpermissions::Client;
   use aws_sdk_verifiedpermissions::{
       operation::{
           create_policy::CreatePolicyOutput,
           create_policy_store::CreatePolicyStoreOutput,
           is_authorized::IsAuthorizedOutput,
           put_schema::PutSchemaOutput,
       },
       types::{
           ActionIdentifier, EntityIdentifier, PolicyDefinition, SchemaDefinition, StaticPolicyDefinition, ValidationSettings
       },
   };
   
   //Function that creates a policy store in the client that's passed
   async fn create_policy_store(client: &Client, valid_settings: &ValidationSettings)-> CreatePolicyStoreOutput {
       let policy_store = client.create_policy_store().validation_settings(valid_settings.clone()).send().await;
       return policy_store.unwrap();
   }
   
   //Function that adds a schema to the policy store in the client
   async fn put_schema(client: &Client, ps_id: &str, schema: &str) -> PutSchemaOutput {
       let schema = client.put_schema().definition(SchemaDefinition::CedarJson(schema.to_string())).policy_store_id(ps_id.to_string()).send().await;
       return schema.unwrap();
   }
   
   //Function that creates a policy in the policy store in the client
   async fn create_policy(client: &Client, ps_id: &str, policy_definition:&PolicyDefinition) -> CreatePolicyOutput {
       let create_policy = client.create_policy().definition(policy_definition.clone()).policy_store_id(ps_id).send().await;
       return create_policy.unwrap();
   }
   
   //Function that tests the authorization request to the policy store in the client
   async fn authorize(client: &Client, ps_id: &str, principal: &EntityIdentifier, action: &ActionIdentifier, resource: &EntityIdentifier) -> IsAuthorizedOutput {
       let is_auth = client.is_authorized().principal(principal.to_owned()).action(action.to_owned()).resource(resource.to_owned()).policy_store_id(ps_id).send().await;
       return is_auth.unwrap();
   }
   
   #[::tokio::main]
   async fn main() -> Result<(), aws_sdk_verifiedpermissions::Error> {
   
   //Set up SDK client
       let config = aws_config::load_defaults(BehaviorVersion::latest()).await;
       let client = aws_sdk_verifiedpermissions::Client::new(&config);
   
   //Create a policy store
       let valid_settings = ValidationSettings::builder()
       .mode({aws_sdk_verifiedpermissions::types::ValidationMode::Strict
       })
       .build()
       .unwrap();
       let policy_store = create_policy_store(&client, &valid_settings).await;
       println!(
       "Created Policy store with ID: {:?}",
       policy_store.policy_store_id
       );
   
   //Add schema to policy store
       let schema= r#"{
           "PhotoFlash": {
               "actions": {
                   "ViewPhoto": {
                       "appliesTo": {
                           "context": {
                               "type": "Record",
                               "attributes": {}
                           },
                           "principalTypes": [
                               "User"
                           ],
                           "resourceTypes": [
                               "Photo"
                           ]
                       },
                       "memberOf": []
                   }
               },
               "entityTypes": {
                   "Photo": {
                       "memberOfTypes": [],
                       "shape": {
                           "type": "Record",
                           "attributes": {
                               "IsPrivate": {
                                   "type": "Boolean"
                               }
                           }
                       }
                   },
                   "User": {
                       "memberOfTypes": [],
                       "shape": {
                           "attributes": {},
                           "type": "Record"
                       }
                   }
               }
           }
       }"#;
       let put_schema = put_schema(&client, &policy_store.policy_store_id, schema).await;
       println!(
           "Created Schema with Namespace: {:?}",
           put_schema.namespaces
       ); 
   
   //Create policy
       let policy_text = r#"
           permit (
               principal in PhotoFlash::User::"alice",
               action == PhotoFlash::Action::"ViewPhoto",
               resource == PhotoFlash::Photo::"VacationPhoto94.jpg"
           );
           "#;
       let policy_definition = PolicyDefinition::Static(StaticPolicyDefinition::builder().statement(policy_text).build().unwrap()); 
       let policy = create_policy(&client, &policy_store.policy_store_id, &policy_definition).await;
       println!(
           "Created Policy with ID: {:?}",
           policy.policy_id
       ); 
   
   //Break to make sure the resources are created before testing authorization
       sleep(Duration::new(2, 0));
   
   //Test authorization
       let principal= EntityIdentifier::builder().entity_id("alice").entity_type("PhotoFlash::User").build().unwrap();
       let action = ActionIdentifier::builder().action_type("PhotoFlash::Action").action_id("ViewPhoto").build().unwrap();
       let resource = EntityIdentifier::builder().entity_id("VacationPhoto94.jpg").entity_type("PhotoFlash::Photo").build().unwrap();
       let auth = authorize(&client, &policy_store.policy_store_id, &principal, &action, &resource).await;
       println!(
           "Decision: {:?}",
           auth.decision
           );
           println!(
           "Policy ID: {:?}",
           auth.determining_policies
           );
        Ok(())   
   }
   ```

1. Ejecute el código ingresándolo `cargo run` en la terminal.

Si el código se ejecuta correctamente, aparecerá el terminal `Decision: Allow` seguido del identificador de política de la política determinante. Esto significa que has creado correctamente un almacén de políticas y lo has probado con el AWS SDK de Rust.

## Eliminar recursos
<a name="rust-clean-up"></a>

Cuando hayas terminado de explorar tu almacén de políticas, elimínalo.

**Para eliminar un almacén de políticas**  
Puede eliminar un almacén de políticas mediante la `delete-policy-store` operación y `PSEXAMPLEabcdefg111111` sustituirlo por el ID del almacén de políticas que desee eliminar.

```
$ aws verifiedpermissions delete-policy-store \
    --policy-store-id PSEXAMPLEabcdefg111111
```

Si se ejecuta correctamente, este comando no genera ninguna salida.