

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# JSON 웹 토큰(JWT)을 퍼블릭 키와 함께 사용
<a name="create-index-access-control-tokens-jwtpublic"></a>

다음 예제는 인덱스를 생성할 때 사용자 액세스 제어를 위해 퍼블릭 키가 있는 JSON 웹 토큰(JWT)을 사용하는 방법을 보여줍니다. JWT에 대한 자세한 내용은 [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 웹 서명을 보호하는 데 어떤 키가 사용되었는지 나타내는 힌트입니다.

   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**를 지정합니다. JWT의 대상과 일치하는 정규 표현식을 지정해야 합니다.

1. **프로비저닝 세부 정보** 페이지에서 **개발자 에디션**을 선택합니다.

1. **생성**을 선택하여 인덱스를 생성합니다.

1. 인덱스가 생성될 때까지 기다립니다. Amazon Kendra 는 인덱스의 하드웨어를 프로비저닝합니다. 이 작업에는 다소 시간이 걸릴 수 있습니다.

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

 AWS Secrets Manager내부에 퍼블릭 키가 있는 JWT를 사용할 수 있습니다. Secrets Manager ARN이 필요하며 Amazon Kendra 역할에 Secrets Manager 리소스의 `GetSecretValue`에 대한 액세스 권한이 있어야 합니다. 를 사용하여 Secrets Manager 리소스를 암호화하는 경우 AWS KMS역할에 복호화 작업에 대한 액세스 권한도 있어야 합니다.

JSON 입력 파일을 AWS CLI 사용하여 로 인덱스를 생성하려면 먼저 원하는 파라미터로 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`의 기본값은 “user”입니다. `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에 대한 자세한 내용은 [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'
)
```

------