

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.

# Uso de un JSON Web Token (JWT) con una clave pública
<a name="create-index-access-control-tokens-jwtpublic"></a>

Los siguientes ejemplos muestran cómo usar JSON Web Token (JWT) con una clave pública para el control de acceso de los usuarios al crear un índice. Para obtener más información acerca de JWT, consulte [jwt.io](http://jwt.io).

------
#### [ Console ]

1. Elija **Crear índice** para empezar a crear un índice nuevo.

1. En la página **Especificar detalles de índice**, proporcione a su índice un nombre y una descripción. 

1. Para **el rol de IAM**, seleccione un rol o seleccione **Crear un nuevo rol** y especifique un nombre para crear un nuevo rol. El IAM rol tendrá el prefijo "AmazonKendra-».

1. No cambie los demás valores predeterminados. Elija **Siguiente**.

1. En la página **Configurar el control de acceso de los usuarios**, en **Configuración de control de acceso**, seleccione **Sí** para utilizar los tokens para el control de acceso.

1. En **Configuración de token**, seleccione **JWT con clave pública** como **Tipo de token**.

1. En **Parámetros para firmar la clave pública**, elija el **Tipo de secreto**. Puede usar un secreto existente de AWS Secrets Manager o crear uno nuevo.

   Para crear un secreto nuevo, seleccione **Nuevo** y, a continuación, siga estos pasos:

   1. En **Nuevo AWS Secrets Manager secreto**, especifique un **nombre secreto**. El prefijo `AmazonKendra-` se agregará al guardar la clave pública.

   1. Especifique un **ID de clave**. El ID de clave es una sugerencia que indica la clave que se ha utilizado para proteger la firma web JSON del token.

   1. Elija el **Algoritmo** de firma del token. Este es el algoritmo criptográfico que se utiliza para proteger el token de ID. Para obtener más información sobre RSA, consulte [Criptografía de RSA](https://tools.ietf.org/html/rfc3447).

   1. En **Atributos del certificado**, especifique una **Cadena de certificados** *opcional*. La cadena de certificados se compone de una lista de certificados. Comienza con el certificado de un servidor y termina con el certificado raíz.

   1. *Opcional*: especifique la **Huella digital**. Debe ser un hash de un certificado, calculado sobre todos los datos del certificado y su firma.

   1. Especifique el **Exponente.** Este es el valor del exponente de la clave pública RSA. Se representa como un valor codificado en Base64URLUInt.

   1. Especifique el **Módulo**. Este es el valor del exponente de la clave pública RSA. Se representa como un valor codificado en Base64URLUInt.

   1. Seleccione **Guardar clave** para guardar la nueva clave.

1. *Opcional* En **Configuración avanzada**:

   1. Especifique un **Nombre de usuario** para usarlo en la verificación de la ACL.

   1. Especifique uno o más **Grupos** para usarlos en la verificación de la ACL.

   1. Especifique el **Emisor** que validará el emisor del token.

   1. Especifique el o los **ID de cliente.** Debe especificar una expresión regular que coincida con el público del JWT.

1. En la página **Detalles de aprovisionamiento**, elija la **Edición para desarrolladores**.

1. Elija **Crear** para crear el índice.

1. Espere a que se cree el índice. Amazon Kendra aprovisiona el hardware para su índice. Esta operación puede llevar algún tiempo.

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

Puede usar JWT con una clave pública dentro de un AWS Secrets Manager. Necesita el Secrets Manager ARN y su Amazon Kendra rol debe tener acceso al `GetSecretValue` Secrets Manager recurso. Si va a cifrar el Secrets Manager recurso con AWS KMS, el rol también debe tener acceso a la acción de descifrado.

Para crear un índice con un archivo de AWS CLI entrada JSON, cree primero un archivo JSON con los parámetros que desee:

```
{
    "Name": "user-context",
    "Edition": "ENTERPRISE_EDITION",
    "RoleArn": "arn:aws:iam::account id:role:/my-role",
    "UserTokenConfigurationList": [
        {
            "JwtTokenTypeConfiguration": {
                "KeyLocation": "SECRET_MANAGER",
                "Issuer": "optional: specify the issuer url",
                "ClaimRegex": "optional: regex to validate claims in the token",
                "UserNameAttributeField": "optional: user",
                "GroupAttributeField": "optional: group",
                "SecretManagerArn": "arn:aws:secretsmanager:us-west-2:account id:secret:/my-user-context-secret
            }
        }
    ],    "UserContextPolicy": "USER_TOKEN"
}
```

Puede anular los nombres de campo de usuario y grupo predeterminados. El valor predeterminado de `UserNameAttributeField` es “user”. El valor predeterminado de `GroupAttributeField` es “groups”.

A continuación, llame a `create-index` usando el archivo de entrada. Por ejemplo, si el nombre de su archivo JSON es `create-index-openid.json`, puede usar lo siguiente:

```
aws kendra create-index --cli-input-json file://create-index-openid.json
```

El secreto debe tener el siguiente formato Secrets Manager:

```
{
  "keys": [
    {
      "alg": "RS256|RS384|RS512",
      "kty": "RSA", //this can be RSA only for now
      "use": "sig", //this value can be sig only for now
      "n": "modulus of standard pem",
      "e": "exponent of standard pem",
      "kid": "key_id",
      "x5t": "certificate thumprint for x.509 cert",
      "x5c": [
        "certificate chain"
      ]
    }
  ]
}
```

Para obtener más información acerca de JWT, consulte [jwt.io](http://jwt.io).

------
#### [ Python ]

```
response = kendra.create_index(
    Name='user-context',
    Edition='ENTERPRISE_EDITION',
    RoleArn='arn:aws:iam::account id:role:/my-role',
    UserTokenConfigurationList=[
        {
            "JwtTokenTypeConfiguration": {
                "KeyLocation": "URL",
                "Issuer": "optional: specify the issuer url",
                "ClaimRegex": "optional: regex to validate claims in the token",
                "UserNameAttributeField": "optional: user",
                "GroupAttributeField": "optional: group",
                "SecretManagerArn": "arn:aws:secretsmanager:us-west-2:account id:secret:/my-user-context-secret"
            }
        }
    ],
    UserContextPolicy='USER_TOKEN'
)
```

------