

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

# Application Load Balancer를 사용하여 JWTs 확인
<a name="listener-verify-jwt"></a>

클라이언트가 제공하는 JSON 웹 토큰(JWT)을 확인하여 S2S(Secure service-to-service) 또는 M2M(machine-to-machine) 통신을 수행하도록 Application Load Balancer(ALB)를 구성할 수 있습니다. 로드 밸런서는 JWT가 발급된 방식과 상관없이 사람의 상호 작용 없이 JWT를 확인할 수 있습니다.

 ALB는 토큰 서명을 검증하며 'iss'(발급자) 및 'exp'(만료)라는 두 가지 필수 클레임이 필요합니다. 또한 토큰에 있는 경우 ALB는 'nbf'(이전이 아님) 및 'iat'(시점에 발행됨) 클레임도 검증합니다. 검증을 위해 최대 10개의 추가 클레임을 구성할 수 있습니다. 이러한 클레임은 세 가지 형식을 지원합니다.
+ 단일 문자열: 단일 텍스트 값
+ 공백으로 구분된 값: 공백으로 구분된 여러 값(최대 10개 값)
+ 문자열 배열: 텍스트 값 배열(최대 10개 값)

토큰이 유효한 경우 로드 밸런서는 토큰이 있는 요청을 대상에 있는 그대로 전달합니다. 그렇지 않으면 서비스에서 요청을 거부합니다.

## JWT 확인 사용 준비
<a name="validate-access-token-requirements"></a>

다음 단계를 완료합니다.

1. 클라이언트 ID와 클라이언트 보안 암호를 발급하는 IdP에 서비스를 등록합니다.

1. IdP를 별도로 호출하여 서비스에 대한 액세스를 요청합니다. IdP는 액세스 토큰으로 응답합니다. 이 토큰은 일반적으로 IdP가 서명한 JWT입니다.

1. JSON 웹 키 세트(JWKS) 엔드포인트를 설정합니다. 로드 밸런서는 구성한 잘 알려진 위치에 IdP가 게시한 퍼블릭 키를 획득합니다.

1. 요청 헤더에 JWT를 포함하고 모든 요청에서 Application Load Balancer로 전달합니다. 참고: RS256 알고리즘만 지원됩니다.

## JWT 검증 제한
<a name="jwt-validation-limits"></a>

Application Load Balancer에서 JWT 검증을 사용하는 경우 JWKS(JSON 웹 키 세트) 엔드포인트는 다음 요구 사항을 충족해야 합니다.
+ **최대 응답 크기**: 150KB
+ **최대 키 수**: 키 10개

자격 증명 공급자의 JWKS 응답이 이러한 제한 중 하나를 초과하는 경우 Application Load Balancer는 백엔드 대상으로 요청을 전달하지 않습니다.

ID 제공업체의 JWKS 엔드포인트가 이러한 제한을 초과하는 경우 애플리케이션 코드에 JWT 검증을 구현하거나 키 세트가 더 작은 ID 제공업체를 사용하는 것이 좋습니다.<a name="configure-jwt-validation-listener-rule"></a>

# 콘솔을 사용하여 JWT 확인을 구성하려면
<a name="configure-jwt-validation-listener-rule"></a>

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창의 **Load Balancing** 아래에서 **로드 밸런서**를 선택합니다.

1. Application Load Balancer를 선택하고 **리스너** 탭을 선택합니다.

1. HTTPS 리스너를 선택하고 **규칙 관리를** 선택합니다.

1. **규칙 추가**를 선택합니다.

1. (선택 사항) 규칙의 이름을 지정하려면 **이름 및 태그를** 확장하고 이름을 입력합니다. 태그를 추가하려면 **추가 태그 추가**를 선택하고 태그 키와 태그 값을 입력합니다.

1. **조건에서** 1\~5개의 조건 값을 정의합니다.

1. (선택 사항) 변환을 추가하려면 ** 변환 추가**를 선택하고 변환 유형을 선택한 다음 일치시킬 정규식과 대체 문자열을 입력합니다.

1.  **작업, 사전 라우팅** 작업에서 **토큰 검증을 선택합니다.**

   1.  **JWKS 엔드포인트**에 JSON 웹 키 세트 엔드포인트의 URL을 입력합니다. 이 엔드포인트는 공개적으로 액세스할 수 있어야 하며 JWT 서명을 확인하는 데 사용되는 퍼블릭 키를 반환해야 합니다.

   1.  **발급자의** 경우 JWT 토큰에 iss 클레임의 예상 값을 입력합니다.

   1. (선택 사항) 추가 클레임을 검증하려면 **추가 클레임을 선택합니다.**

      1.  **클레임 이름**에 검증할 클레임의 이름을 입력합니다.

      1. **형식**에서 클레임 값을 해석하는 방법을 선택합니다.

         1. **단일 문자열**: 클레임이 정확히 하나의 지정된 값과 일치해야 합니다.

         1. **문자열 배열**: 클레임이 배열의 값 중 하나와 일치해야 합니다.

         1. **공백으로 구분된 값**: 클레임에는 지정된 값을 포함해야 하는 공백으로 구분된 값이 포함됩니다.

      1. **값에** 클레임의 예상 값을 입력합니다.

      1. 추가 클레임에 대해 반복합니다(최대 10개의 클레임).

1.  **작업, 라우팅 작업**에서 토큰 검증 성공 후 수행해야 하는 기본 작업**(다음으로 전달, 리디렉션 또는 고정 응답 반환)을** 선택합니다.

1.  필요에 따라 기본 작업 구성 

1.  **저장**을 선택합니다.

## CLI를 사용하여 JWT 확인을 구성하려면
<a name="configure-access-token-validation"></a>

다음 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 명령을 사용하여 JWT 확인를 구성합니다.

JWTs를 확인하는 작업을 사용하여 리스너 규칙을 생성합니다. 리스너는 HTTPS 리스너여야 합니다.

**참고**  
JWT 검증을 구성할 때 JWKS 엔드포인트 응답의 크기가 150KB를 초과하거나 키가 10개를 초과하는지 확인합니다. 이러한 제한을 초과하는 응답은 대상에 대한 요청 전달을 방지합니다.

```
aws elbv2 create-rule \
    --listener-arn {{listener-arn}} \
    --priority {{10}} \
    --conditions Field=path-pattern,Values="{{/login}}" \
    --actions file://actions.json
```

다음은 `jwt-validation` 작업과 `forward` 작업을 지정하는 `actions.json` 파일의 예입니다. 지원되는 필드인지 확인하려면 자격 증명 공급자가 제공하는 설명서를 참조하세요.

```
--actions '[
    {
        "Type":"jwt-validation",
        "JwtValidationConfig":{
            "JwksEndpoint":"{{https://issuer.example.com/.well-known/jwks.json}}",
            "Issuer":"{{https://issuer.com}}"
        },
        "Order":1
    },
    {
        "Type":"forward",
        "TargetGroupArn":"{{target-group-arn}}",
        "Order":2
    }
]'
```

다음 예제에서는 검증할 추가 클레임을 지정합니다.

```
--actions '[
    {
        "Type":"jwt-validation",
        "JwtValidationConfig":{
            "JwksEndpoint":"{{https://issuer.example.com/.well-known/jwks.json}}",
            "Issuer":"{{https://issuer.com}}",
            "AdditionalClaims":[
              {
                  "Format":"{{string-array}}",
                  "Name":"{{claim_name}}",
                  "Values":["{{value1}}","{{value2}}"]
              }
            ],
        },
        "Order":1
    },
    {
        "Type":"forward",
        "TargetGroupArn":"{{target-group-arn}}",
        "Order":2
    }
]'
```

자세한 내용은 [Application Load Balancer를 위한 리스너 규칙](listener-rules.md) 단원을 참조하십시오.