

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配公有金鑰使用 JSON Web Token (JWT)
<a name="create-index-access-control-tokens-jwtpublic"></a>

下列範例示範如何在建立索引時將 JSON Web Token (JWT) 與公有金鑰搭配使用，以進行使用者存取控制。如需 JWT 的詳細資訊，請參閱 https：//[jwt.io](http://jwt.io)。

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

1. 選擇**建立索引**以開始建立新的索引。

1. 在**指定索引詳細資訊**頁面上，為您的索引指定名稱和描述。

1. 針對 **IAM 角色**，選取角色或選取**建立新角色**，並指定角色名稱以建立新的角色。 IAM 角色的字首為「AmazonKendra-」。

1. 將所有其他欄位保留為預設值。選擇**下一步**。

1. 在**設定使用者存取控制**頁面的**存取控制設定**下，選擇**是**以使用字符進行存取控制。

1. 在**字符組態**下，選取 **JWT 搭配公有金鑰**做為**字符類型**。

1. 在**簽署公有金鑰的參數**下，選擇**秘密類型**。您可以使用現有的 AWS Secrets Manager 秘密或建立新的秘密。

   若要建立新的秘密，請選擇**新增**，然後遵循下列步驟：

   1. 在**新 AWS Secrets Manager 秘密**下，指定**秘密名稱**。當您儲存公有金鑰時，`AmazonKendra-`將會新增 字首。

   1. 指定**金鑰 ID**。金鑰 ID 是提示，指出使用哪個金鑰來保護字符的 JSON Web 簽章。

   1. 選擇權杖的簽署**演算法**。這是用來保護 ID 字符的密碼編譯演算法。如需 RSA 的詳細資訊，請參閱 [RSA 加密法](https://tools.ietf.org/html/rfc3447)。

   1. 在**憑證屬性**下，指定*選用*的**憑證鏈**。憑證鏈是由憑證清單組成。它以伺服器的憑證開頭，並以根憑證終止。

   1. *選用* 指定**指紋或指紋**。它應該是憑證的雜湊，計算所有憑證資料及其簽章。

   1. 指定**指數**。這是 RSA 公有金鑰的指數值。它以 Base64urlUInt 編碼值表示。

   1. 指定**模數**。這是 RSA 公有金鑰的指數值。它以 Base64urlUInt 編碼值表示。

   1. 選取**儲存金鑰**以儲存新金鑰。

1. 在**進階組態**下*選用*：

   1. 指定要在 ACL 檢查中使用的**使用者名稱**。

   1. 指定要在 ACL 檢查中使用的一或多個**群組**。

   1. 指定將驗證字符發行**者的發行**者。

   1. 指定**用戶端 ID (s)**。您必須指定符合 JWT 中對象的規則表達式。

1. 在**佈建詳細資訊**頁面中，選擇**開發人員版本**。

1. 選擇**建立**以建立您的索引。

1. 等待您的索引建立。為您的索引 Amazon Kendra 佈建硬體。此操作可能需要一些時間。

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

您可以使用 JWT 搭配 內的公有金鑰 AWS Secrets Manager。您需要 Secrets Manager ARN，而且您的 Amazon Kendra 角色必須能夠存取 Secrets Manager 資源`GetSecretValue`上的 。如果您使用 加密 Secrets Manager 資源 AWS KMS，該角色也必須具有解密動作的存取權。

若要 AWS CLI 使用 JSON 輸入檔案使用 建立索引，請先使用所需的參數建立 JSON 檔案：

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

您可以覆寫預設的使用者和群組欄位名稱。的預設值`UserNameAttributeField`為「使用者」。的預設值`GroupAttributeField`為「groups」。

接著，`create-index`使用輸入檔案呼叫 。例如，如果您的 JSON 檔案名稱為 `create-index-openid.json`，您可以使用下列項目：

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

秘密的格式必須如下 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"
      ]
    }
  ]
}
```

如需 JWT 的詳細資訊，請參閱 https：//[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'
)
```

------