

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

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

要将 Amazon Kendra 索引配置为使用 OpenID 令牌进行访问控制，您需要来自 OpenID 提供程序的 JWKS（JSON Web 密钥集）URL。在大多数情况下，JWKS URL 采用以下格式：`https://domain-name/.well_known/jwks.json`（如果他们关注的是 OpenID 发现）。

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

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

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

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

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

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

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

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

1. 指定**签名密钥 URL**。该 URL 应指向一组 JSON Web 密钥。

1. （*可选*）在**高级配置**下：

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

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

   1. 指定将验证颁发机构的**颁发机构**。

   1. 指定**客户端 ID**。您必须指定与 JWT 中的受众相匹配的正则表达式。

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": [
        {
            "JwtTokenTypeConfiguration": {
                "KeyLocation": "URL",
                "Issuer": "optional: specify the issuer url",
                "ClaimRegex": "optional: regex to validate claims in the token",
                "UserNameAttributeField": "optional: user",
                "GroupAttributeField": "optional: group",
                "URL": "https://example.com/.well-known/jwks.json"
            }
        }
    ],
    "UserContextPolicy": "USER_TOKEN"
}
```

您可以覆盖默认的用户和组字段名称。`UserNameAttributeField` 的默认值为“user”。`GroupAttributeField` 的默认值为“groups”。

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

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

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

```
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",
                "URL": "https://example.com/.well-known/jwks.json"
            }
        }
    ],
    UserContextPolicy='USER_TOKEN'
)
```

------