

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 JSON
<a name="create-index-access-control-tokens-json"></a>

以下示例说明在创建索引时如何使用 JSON 进行用户访问控制。

**警告**  
JSON 令牌是未经验证的有效负载。只有当对 Amazon Kendra 的请求来自可信服务器而不是浏览器时，才应使用此选项。

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

1. 选择**创建索引**以开始创建新索引。

1. 在**指定索引详细信息**页面上，为您的索引指定名称和描述。

1. 对于 **IAM 角色**，选择一个角色或选择**创建新角色**，并指定角色名称来创建新角色。IAM 角色的前缀为“AmazonKendra-”。

1. 将所有其他字段保留为默认值。选择**下一步**。

1. 在**配置用户访问控制**页面上，在**访问控制设置**下，选择**是**以使用令牌进行访问控制。

1. 在**令牌配置**下，选择 **JSON** 作为**令牌类型**。

1. 指定要在 ACL 检查中使用的**用户名**。

1. 指定要在 ACL 检查中使用的一个或多个**组**。

1. 选择**下一步**。

1. 在**配置详细信息**页面中，选择**开发者版本**。

1. 选择**创建**以创建索引。

1. 等待索引创建完成。Amazon Kendra 会为索引预配硬件。此操作可能需要一些时间。

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

要使用 JSON 输入文件通过 AWS CLI 创建索引，请先使用所需参数创建一个 JSON 文件：

```
{
    "Name": "{{user-context}}",
    "Edition": "{{ENTERPRISE_EDITION}}",
    "RoleArn": "arn:aws:iam::{{account-id}}:role:/{{my-role}}",
    "UserTokenConfigurations": [
        {
            "JsonTokenTypeConfiguration": {
                "UserNameAttributeField": "user",
                "GroupAttributeField": "group"
            }
        }
    ],
    "UserContextPolicy": "USER_TOKEN"
}
```

接下来，使用输入文件调用 `create-index`。例如，如果您的 JSON 文件名为 `create-index-openid.json`，则可以使用以下名称：

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

如果您未使用适用于 AWS IAM Identity Center 的 Open ID，则可以将 JSON 格式的令牌发送给我们。如果这样做，则必须指定 JSON 令牌中的哪个字段包含用户名，哪个字段包含组。组字段值必须是 JSON 字符串数组。例如，如果您使用 SAML，您的令牌可能类似于以下内容：

```
{
     "username" : "user1", 
     "groups": [
        "group1", 
        "group2"
     ]
}
```

`TokenConfiguration` 指定用户名和组字段名称：

```
{
    "UserNameAttributeField":"username",
    "GroupAttributeField":"groups"
}
```

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

```
response = kendra.create_index(
    Name='{{user-context}}',
    Edition='{{ENTERPRISE_EDITION}}',
    RoleArn='arn:aws:iam::{{account-id}}:role:/{{my-role}}',
    UserTokenConfigurations=[
        {
            "JwtTokenTypeConfiguration": {
                "UserNameAttributeField": "{{user}}",
                "GroupAttributeField": "{{group}}",
            }
        }
    ],
    UserContextPolicy='USER_TOKEN'
)
```

------