

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 un secreto compartido
<a name="create-index-access-control-tokens-jwtshared"></a>

Los siguientes ejemplos muestran cómo usar JSON Web Token (JWT) con un token de secreto compartido para el control de acceso de los usuarios al crear un índice. 

------
#### [ 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 secreto compartido** como **Tipo de token**.

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

   Para crear un secreto compartido 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. Especifique un **Secreto compartido** introduciendo un secreto con codificación de URL en base64. También puede seleccionar **Generar secreto** para que se genere un secreto automáticamente. Debe asegurarse de que el secreto tenga codificación de URL en base64.

   1. (*Opcional*) Especifique cuándo es válido el secreto compartido. Puede especificar la fecha y la hora desde o hasta las que un secreto es válido o ambas. El secreto será válido en el intervalo especificado.

   1. Seleccione **Guardar secreto** para guardar el nuevo secreto.

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 reclamación**. 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 ]

Puedes usar el token JWT con un secreto compartido en su interior. AWS Secrets Manager El secreto debe tener codificación de URL en base64. 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}}",
    "UserTokenConfigurations": [
        {
            "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 AWS Secrets Manager:

```
{
  "keys": [
    {
      "kid": "{{key_id}}",
      "alg": "HS256|HS384|HS512",
      "kty": "OCT", 
      "use": "sig", //this value can be sig only for now
      "k": "{{secret}}",
      "nbf":"{{ISO1806 date format}}"
      "exp":"{{ISO1806 date format}}"
    }
  ]
}
```

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

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

Puedes usar el token JWT con un secreto compartido en su interior. AWS Secrets Manager El secreto debe tener codificación de URL en base64. 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.

```
response = kendra.create_index(
    Name='{{user-context}}',
    Edition='{{ENTERPRISE_EDITION}}',
    RoleArn='arn:aws:iam::{{account-id}}:role:/{{my-role}}',
    UserTokenConfigurations=[
        {
            "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'
)
```

------