

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usando um JSON Web Token (JWT) com uma chave pública
<a name="create-index-access-control-tokens-jwtpublic"></a>

Os exemplos a seguir mostram como usar um JSON Web Token (JWT) com uma chave pública para controle de acesso do usuário ao criar um índice. Para obter mais informações sobre o JWT, consulte [jwt.io](http://jwt.io). 

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

1. Escolha **Criar índice** para começar a criar um novo índice.

1. Na página **Especificar detalhes do índice**, dê um nome e uma descrição ao índice. 

1. Para o **perfil do IAM**, selecione uma função ou selecione **Criar uma nova função** para e especifique um nome de função para criar uma nova função. A IAM função terá o prefixo "AmazonKendra-”.

1. Deixe os outros campos nos padrões determinados. Escolha **Próximo**.

1. Na página **Configurar controle de acesso do usuário**, em **Configurações de controle de acesso**, escolha **Sim** para usar tokens para controle de acesso.

1. Em **Configuração de token**, selecione **JWT com chave pública** como o **Tipo de token**.

1. Em **Parâmetros para assinar a chave pública**, escolha o **Tipo de senha**. Você pode usar uma senha existente do AWS Secrets Manager ou criar outra.

   Para criar uma nova senha, escolha **Novo** e siga estas etapas:

   1. Em **Novo AWS Secrets Manager segredo**, especifique um **nome secreto**. O prefixo `AmazonKendra-` será adicionado ao salvar a chave pública.

   1. Especifique um **ID de chave**. O ID de chave é uma dica que indica qual foi a chave usada para proteger a JSON Web Signature (JWS) do token.

   1. Escolha o **Algoritmo** de assinatura para o token. Esse é o algoritmo criptográfico usado para proteger o token de ID. Para obter mais informações sobre o RSA, consulte a [Criptografia RSA](https://tools.ietf.org/html/rfc3447).

   1. Em **Atributos do certificado**, especifique uma **Cadeia de certificados** *opcional*. A cadeia de certificados é composta por uma lista de certificados. Ele começa com o certificado do servidor e termina com o certificado raiz.

   1. *Opcional* Especifique a **impressão digital ou do polegar**. Ele deve ser uma confirmação de certificado, uma verificação além de todos os dados do certificado e sua assinatura.

   1. Especifique o **Expoente**. Esse é o valor expoente da chave pública RSA. Ele é representado como um valor codificado em Base64URLUInt.

   1. Especifique os **Módulos**. Esse é o valor expoente da chave pública RSA. Ele é representado como um valor codificado em Base64URLUInt.

   1. Selecione **Salvar chave** para salvar a nova chave.

1. *Opcional* Na **Configuração avançada**:

   1. Especifique um **Nome de usuário** para usar na verificação da ACL.

   1. Especifique um ou mais **Grupos** para serem usados na verificação da ACL.

   1. Especifique o **Emissor** que validará o emissor do token.

   1. Especifique o(s) **ID(s) do cliente**. Você deve especificar uma expressão regular que corresponda ao público no JWT.

1. Na página de **Detalhes do provisionamento**, escolha **Developer Edition**.

1. Escolha **Criar** para criar seu índice.

1. Aguarde até que seu índice seja criado. Amazon Kendra provisiona o hardware para seu índice. Essa operação pode levar algum tempo.

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

Use o JWT com uma chave pública dentro de um AWS Secrets Manager. Você precisa do Secrets Manager ARN e sua Amazon Kendra função deve ter acesso ao `GetSecretValue` Secrets Manager recurso. Se você estiver criptografando o Secrets Manager recurso com AWS KMS, a função também deverá ter acesso à ação de descriptografia.

Para criar um índice AWS CLI usando um arquivo de entrada JSON, primeiro crie um arquivo JSON com os parâmetros desejados:

```
{
    "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"
}
```

Você pode substituir os nomes de campo padrão do usuário e do grupo. O valor padrão para `UserNameAttributeField` é "usuário". O valor padrão para `GroupAttributeField` é "grupos".

Em seguida, chame o `create-index` usando o arquivo de entrada. Por exemplo, se o nome do arquivo JSON for `create-index-openid.json`, use o seguinte:

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

O segredo deve ter o seguinte formato em 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 obter mais informações sobre o 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'
)
```

------