

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 rahasia bersama
<a name="create-index-access-control-tokens-jwtshared"></a>

Contoh berikut menunjukkan cara menggunakan JSON Web Token (JWT) dengan token rahasia bersama untuk kontrol akses pengguna saat Anda membuat indeks. 

------
#### [ 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. Di bawah **Konfigurasi token**, pilih **JWT dengan rahasia bersama** sebagai **Jenis token**.

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

   Untuk membuat rahasia bersama 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. Tentukan **rahasia Bersama dengan memasukkan rahasia** yang dikodekan URL base64. Anda juga dapat memilih **Hasilkan rahasia** untuk membuat rahasia untuk Anda. Anda harus memastikan rahasianya adalah rahasia yang dikodekan URL base64.

   1. (*Opsional*) Tentukan kapan rahasia bersama valid. Anda dapat menentukan tanggal dan waktu berlaku atau berakhirnya rahasia, atau keduanya. Rahasia akan berlaku dalam interval yang ditentukan.

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

1. (*Opsional*) Di bawah **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 Klaim**. Anda harus menentukan ekspresi reguler yang cocok 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 token JWT dengan rahasia bersama di dalamnya. AWS Secrets Manager Rahasianya harus berupa rahasia yang dikodekan URL base64. 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",
    "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"
}
```

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

Untuk informasi selengkapnya tentang JWT, lihat [jwt.io](http://jwt.io).

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

Anda dapat menggunakan token JWT dengan rahasia bersama di dalamnya. AWS Secrets Manager Rahasianya harus berupa rahasia yang dikodekan URL base64. 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.

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

------