

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan JSON Web Token (JWT) dengan kunci publik
<a name="create-index-access-control-tokens-jwtpublic"></a>

Contoh berikut menunjukkan cara menggunakan JSON Web Token (JWT) dengan kunci publik untuk kontrol akses pengguna saat Anda membuat indeks. Untuk informasi selengkapnya tentang JWT, lihat [jwt.io](http://jwt.io).

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

1. Pilih **Buat indeks** untuk mulai membuat indeks baru.

1. Pada **Tentukan detail indeks**, beri indeks Anda nama dan deskripsi. 

1. Untuk **IAM role**, pilih peran atau pilih **Buat peran baru** dan tentukan nama peran untuk membuat peran baru. IAM Peran akan memiliki awalan "AmazonKendra-”.

1. Biarkan bidang lain dengan defaultnya. Pilih **Berikutnya**.

1. Di halaman **Konfigurasikan kontrol akses pengguna**, di bawah **Pengaturan kontrol akses**, pilih **Ya** untuk menggunakan token untuk kontrol akses.

1. Pada **Konfigurasi token**, pilih **JWT dengan kunci publik** sebagai **Jenis token**.

1. Di bawah **Parameter untuk menandatangani kunci publik**, pilih **Jenis rahasia**. Anda dapat menggunakan rahasia AWS Secrets Manager yang ada atau membuat rahasia bersama baru.

   Untuk membuat rahasia baru, pilih **Baru**, lalu ikuti langkah-langkah ini:

   1. Di bawah ** AWS Secrets Manager Rahasia baru**, tentukan **nama Rahasia**. Awalan `AmazonKendra-` akan ditambahkan saat Anda menyimpan kunci publik.

   1. Tentukan **ID kunci**. Kunci tersebut adalah petunjuk yang menunjukkan kunci yang digunakan untuk mengamankan tanda tangan web JSON (JWS) token.

   1. Pilih **Algoritme** penandatanganan untuk token. Ini adalah algoritme kriptografi yang digunakan untuk mengamankan token ID. Untuk informasi selengkapnya tentang RSA, lihat [Kriptografi RSA](https://tools.ietf.org/html/rfc3447).

   1. Pada **Atribut sertifikat**, tentukan **Rangkaian sertifikat** *opsional*. Rangkaian sertifikat terdiri dari daftar beberapa sertifikat. Rangkaian ini dimulai dengan sertifikat server dan berakhir dengan sertifikat akar.

   1. *Opsional* Tentukan **Sidik jari jempol atau sidik jari**. Ini harus berupa hash sertifikat, dikomputasi atas semua data sertifikat dan tanda tangannya.

   1. Tentukan **Eksponen**. Ini adalah nilai eksponen untuk kunci publik RSA. Hal ini direpresentasikan sebagai nilai base64Url UInt -encoded.

   1. Tentukan **Modulus**. Ini adalah nilai eksponen untuk kunci publik RSA. Hal ini direpresentasikan sebagai nilai base64Url UInt -encoded.

   1. Pilih **Simpan kunci** untuk menyimpan kunci baru.

1. *Opsional* Pada **Konfigurasi lanjutan**:

   1. Tentukan **Nama pengguna** untuk digunakan dalam pemeriksaan ACL.

   1. Tentukan satu atau lebih **Grup** untuk digunakan dalam pemeriksaan ACL.

   1. Tentukan **Penerbit** yang akan memvalidasi penerbit token.

   1. Tentukan **Id Klien**. Anda harus menentukan ekspresi reguler yang sesuai dengan audiens di JWT.

1. Di halaman **Detail penyediaan**, pilih **Edisi Developer**.

1. Pilih **Buat** untuk membuat indeks Anda.

1. Tunggu indeks Anda dibuat. Amazon Kendra menyediakan perangkat keras untuk indeks Anda. Operasi ini dapat memakan waktu lama.

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

Anda dapat menggunakan JWT dengan kunci publik di dalam AWS Secrets Manager. Anda memerlukan Secrets Manager ARN, dan Amazon Kendra peran Anda harus memiliki akses ke sumber `GetSecretValue` daya. Secrets Manager Jika Anda mengenkripsi Secrets Manager sumber daya dengan AWS KMS, peran juga harus memiliki akses ke tindakan dekripsi.

Untuk membuat indeks dengan AWS CLI menggunakan file input JSON, pertama buat file JSON dengan parameter yang Anda inginkan:

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

Anda dapat mengganti nama bidang pengguna dan grup default. Nilai default untuk `UserNameAttributeField` adalah "user". Nilai default untuk `GroupAttributeField` adalah "groups".

Selanjutnya, panggil `create-index` menggunakan file input. Misalnya, jika nama file JSON Anda adalah `create-index-openid.json`, Anda dapat menggunakan yang berikut ini:

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

Rahasianya harus memiliki format berikut di 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}}"
      ]
    }
  ]
}
```

Untuk informasi selengkapnya tentang JWT, lihat [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'
)
```

------