

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

# Amazon OpenSearch Service에 대한 JWT 인증 및 권한 부여
<a name="JSON-Web-tokens"></a>

이제 Amazon OpenSearch Service에서 인증 및 권한 부여에 JSON 웹 토큰(JWT)을 사용할 수 있습니다. JWT는 Single Sign-On(SSO) 액세스 권한을 부여하는 데 사용되는 JSON 기반 액세스 토큰입니다. OpenSearch Service에서 JWT를 사용하여 Single Sign-On 토큰을 생성해 OpenSearch Service 도메인에 대한 요청을 검증할 수 있습니다. JWT를 사용하려면 세분화된 액세스 제어가 활성화되어 있어야 하며 유효한 RSA 또는 ECDSA PEM 형식의 퍼블릭 키를 제공해야 합니다. 세분화된 액세스 제어에 대한 자세한 내용은 [Amazon OpenSearch Service에서 세분화된 액세스 제어](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html)를 참조하세요.

OpenSearch Service 콘솔, AWS Command Line Interface (AWS CLI) 또는 AWS SDKs.

## 고려 사항
<a name="consider"></a>

Amazon OpenSearch Service에서 JWT를 사용하기 전에 다음을 고려해야 합니다.
+ PEM 형식의 RSA 퍼블릭 키 크기로 인해 AWS 콘솔을 사용하여 JWT 인증 및 권한 부여를 구성하는 것이 좋습니다.
+ JWT에 대한 제목 및 역할 필드를 지정할 때 유효한 사용자 및 역할을 제공해야 합니다. 그렇지 않으면 요청이 거부됩니다.
+ OpenSearch 2.11은 JWT 인증에 사용할 수 있는 가장 빠른 호환 버전입니다.

## 도메인 액세스 정책 수정
<a name="modifying"></a>

JWT 인증 및 권한 부여를 사용하도록 도메인을 구성하기 전에 JWT 사용자가 도메인에 액세스할 수 있도록 도메인 액세스 정책을 업데이트해야 합니다. 그렇지 않으면 수신되는 모든 JWT 권한 부여된 요청이 거부됩니다. 하위 리소스(/\*)에 대한 전체 액세스를 제공하기 위해 권장되는 도메인 액세스 정책은 다음과 같습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:{{us-east-1}}:{{111122223333}}:domain/{{domain-name}}/*"
    }
  ]
}
```

------

## JWT 인증 및 권한 부여 구성
<a name="configuration"></a>

도메인 생성 프로세스 중에 또는 기존 도메인을 업데이트하여 JWT 인증 및 권한 부여를 활성화할 수 있습니다. 설정 단계는 선택 사항에 따라 약간 다릅니다.

다음 단계에서는 OpenSearch Service 콘솔에서 JWT 인증 및 권한 부여를 위해 기존 도메인을 구성하는 방법을 설명합니다.

1. **도메인 구성**에서 **OpenSearch에 대한 JWT 인증 및 권한 부여**로 이동하고 **JWT 인증 및 권한 부여 활성화**를 선택합니다.

1. 도메인에 대해 사용할 퍼블릭 키를 구성합니다. 이렇게 하려면 퍼블릭 키가 포함된 PEM 파일을 업로드하거나 수동으로 입력할 수 있습니다.
**참고**  
업로드되거나 입력된 키가 유효하지 않으면 문제를 지정하는 경고가 텍스트 상자 위에 표시됩니다.

1. (선택 사항) 추가 설정에서 다음 선택적 필드를 구성할 수 있습니다.
   + **제목 키** - 이 필드를 비워 두고 JWT에 대한 기본 `sub` 키를 사용할 수 있습니다.
   +  **역할 키** - 이 필드를 비워 두고 JWT에 대한 기본 `roles` 키를 사용할 수 있습니다.

   변경한 후에 도메인을 저장합니다.

## JWKS 엔드포인트를 사용하여 JWT 검증
<a name="jwks-endpoint"></a>

정적 퍼블릭 키를 구성하는 대신 JSON 웹 키 세트(JWKS) 엔드포인트 URL을 구성하여 자격 증명 공급자로부터 퍼블릭 키를 동적으로 검색할 수 있습니다. JWKS 엔드포인트가 구성되면 OpenSearch Service는 JWT 서명을 검증하는 데 사용되는 퍼블릭 키를 자동으로 가져오고 캐싱하므로 ID 제공업체가 서명 키를 교체할 때 키를 수동으로 업데이트할 필요가 없습니다.

JWKS 엔드포인트 구성에는 OpenSearch 버전 3.3 이상이 필요합니다.

**참고**  
JWKS URL과 정적 퍼블릭 키가 모두 구성된 경우 JWKS URL이 우선하며 정적 퍼블릭 키는 무시됩니다.

### 이전 버전과의 호환성
<a name="jwks-backward-compatibility"></a>

이 기능은 완전한 이전 버전과의 호환성을 유지합니다.
+ `JwksUrl`를 지정하지 않거나 null로 설정하면 시스템에서 기존 정적 퍼블릭 키 메커니즘을 사용합니다.
+ 기존 JWT 구성은 수정 없이 계속 작동합니다.
+ 도메인 구성을 업데이트하여 정적 키와 JWKS 간에 전환할 수 있습니다.

### JWKS 엔드포인트 구성
<a name="jwks-configuring"></a>

OpenSearch Service 콘솔, AWS CLI또는 구성 API를 사용하여 JWKS 엔드포인트를 구성할 수 있습니다.

#### 콘솔
<a name="jwks-console"></a>

**JWKS 엔드포인트를 구성하려면**

1. **도메인 구성**에서 ** OpenSearch에 대한 JWT 인증 및 권한** 부여로 이동합니다.

1. **JWT 인증 및 권한 부여 활성화**를 선택합니다.

1. **키 소스**에서 **JWKS URL**을 선택합니다.

1. 자격 증명 공급자가 제공한 JWKS 엔드포인트 URL을 입력합니다(예: `https://example.com/.well-known/jwks.json`).

1. (선택 사항) **추가 설정**에서 **주체 키** 및 **역할 키** 필드를 구성합니다.

1. **변경 사항 저장**을 선택합니다.

#### AWS CLI
<a name="jwks-cli"></a>

다음 AWS CLI 명령은 기존 도메인에서 JWT 인증을 위한 JWKS 엔드포인트를 구성합니다.

```
aws opensearch update-domain-config \
  --domain-name {{my-domain}} \
  --advanced-security-options '{"JWTOptions":{"Enabled":true, "JwksUrl":"{{https://example.com/.well-known/jwks.json}}", "SubjectKey":"{{sub}}", "RolesKey":"{{roles}}"}}'
```

#### 구성 API
<a name="jwks-api"></a>

구성 API에 대한 다음 요청은 기존 도메인에서 JWT 인증을 위한 JWKS 엔드포인트를 구성합니다.

```
POST https://es.{{us-east-1}}.amazonaws.com/2021-01-01/opensearch/domain/{{my-domain}}/config
{
  "AdvancedSecurityOptions": {
    "JWTOptions": {
      "Enabled": true,
      "JwksUrl": "{{https://example.com/.well-known/jwks.json}}",
      "RolesKey": "{{optional-roles-key}}",
      "SubjectKey": "{{optional-subject-key}}"
    }
  }
}
```

### JWT 헤더 요구 사항
<a name="jwks-header-requirements"></a>

JWKS 엔드포인트를 사용하는 경우 JWT 헤더에는 확인에 사용할 특정 키를 식별하는 키 ID(`kid`)가 포함되어야 합니다.

```
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "V-diposfUJIk5jDBFi_QRouiVinG5PowskcSWy5EuCo"
}
```

`kid` 값은 JWKS 엔드포인트 응답의 키 식별자와 일치해야 합니다.

JWKS 구성 옵션 및 보안 설정에 대한 자세한 내용은 OpenSearch 설명서의 [JWKS 엔드포인트를 사용하여 JWT 검증](https://docs.opensearch.org/latest/security/authentication-backends/jwt/#using-a-jwks-endpoint-to-validate-a-jwt)을 참조하세요.

## JWT를 사용하여 테스트 요청 전송
<a name="test"></a>

지정된 주제 및 역할 페어로 새 JWT를 생성한 후 테스트 요청을 전송할 수 있습니다. 이를 수행하려면 프라이빗 키를 사용하여 JWT를 생성한 도구를 통해 요청에 서명합니다. OpenSearch Service는 이 서명을 확인하여 수신 요청을 검증할 수 있습니다.

**참고**  
JWT에 사용자 지정 제목 키 또는 역할 키를 지정한 경우 JWT에 올바른 클레임 이름을 사용해야 합니다.

다음은 JWT 토큰을 사용하여 도메인의 검색 엔드포인트를 통해 OpenSearch Service에 액세스하는 방법의 예제입니다.

```
curl -XGET "$search_endpoint" -H "Authorization: Bearer <JWT>"
```

### JWT 인증 및 권한 부여 구성(AWS CLI)
<a name="cli"></a>

다음 AWS CLI 명령은 도메인이 있는 경우 OpenSearch에 대한 JWT 인증 및 권한 부여를 활성화합니다.

```
aws opensearch update-domain-config --domain-name <your_domain_name> --advanced-security-options '{"JWTOptions":{"Enabled":true, "PublicKey": "<your_public_key>", "SubjectKey": "<your_subject_key>", "RolesKey": "<your_roles_key>"}}'
```

#### JWT 인증 및 권한 부여 구성(API를 통한 구성)
<a name="API"></a>

구성 API에 대한 다음 요청은 기존 도메인에서 OpenSearch 대시보드에 대한 JWT 인증 및 권한 부여를 활성화합니다.

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
  "AdvancedSecurityOptions": {
    "JWTOptions": {
      "Enabled": true,
      "PublicKey": "public-key",
      "RolesKey": "optional-roles-key",
      "SubjectKey": "optional-subject-key"
   }  
  }
}
```

##### 키 페어 생성
<a name="gen-key-pair"></a>

OpenSearch 도메인에 대한 JWT를 구성하려면 개인정보 보호 강화 메일(PEM) 형식으로 퍼블릭 키를 제공해야 합니다. Amazon OpenSearch Service는 현재 JWT를 사용하는 두 가지 비대칭 암호화 알고리즘(RSA 및 ECDSA)을 지원합니다.

공통 openssl 라이브러리를 사용하여 RSA 키 페어를 생성하려면 다음 단계를 수행합니다.

1. `openssl genrsa -out privatekey.pem 2048`

1. `openssl rsa -in privatekey.pem -pubout -out publickey.pem`

이 예제에서는 `publickey.pem` 파일에 Amazon OpenSearch Service에서 사용할 퍼블릭 키가 포함된 반면, `privatekey.pem`에는 서비스로 전송된 JWT에 서명하는 프라이빗 키가 포함되어 있습니다. 또한 JWT를 생성하는 데 필요한 경우 프라이빗 키를 일반적으로 사용되는 `pkcs8` 형식으로 변환하는 옵션이 있습니다.

업로드 버튼을 사용하여 콘솔에 PEM 파일을 직접 추가하는 경우 파일 확장자는 `.pem`이어야 합니다. `.crt`, `.cert`, `.key`와 같은 다른 파일 확장자는 지원되지 않습니다.