

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á.

# Como usar um JSON Web Token (JWT) com uma senha compartilhada
<a name="create-index-access-control-tokens-jwtshared"></a>

Os exemplos a seguir mostram como usar um JSON Web Token (JWT) com um token de senha compartilhada para controle de acesso do usuário ao criar um índice. 

------
#### [ 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 senha compartilhada** como o **Tipo de token**.

1. Em **Parâmetros para entrar com senha compartilhada**, escolha o **Tipo de senha**. Você pode usar uma senha compartilhada do AWS Secrets Manager existente ou criar uma nova senha compartilhada.

   Para criar uma nova senha compartilhada, 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. Especifique uma **senha compartilhada** inserindo uma senha codificada em URL base64. Você também pode selecionar **Gerar senha** para que uma senha seja gerada para você. Você deve garantir que ela seja uma senha codificada em URL base64.

   1. (*Opcional*) Especifique quando a senha compartilhada for válida. Você pode especificar a data e a hora a partir da qual uma senha é válida, válido até ou os dois. A senha será válida no intervalo especificado.

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

1. (*Opcional*) Em **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) da reclamação**. Especifique 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 a criação do seu índice. Amazon Kendra provisiona o hardware para seu índice. Essa operação pode levar algum tempo.

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

Você pode usar o token JWT com um segredo compartilhado dentro do AWS Secrets Manager. A senha deve ser um senha codificada com uma URL base64. 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",
    "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"
}
```

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 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 obter mais informações sobre o JWT, consulte [jwt.io](http://jwt.io). 

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

Você pode usar o token JWT com um segredo compartilhado dentro do AWS Secrets Manager. A senha deve ser um senha codificada com uma URL base64. 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.

```
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'
)
```

------