

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

# Query API 사용
<a name="programmingguide.queryapi"></a>

## 쿼리 파라미터
<a name="query-parameters"></a>

HTTP 쿼리 기반 요청은 GET 또는 POST와 같은 HTTP 동사와 `Action` 쿼리 매개 변수를 사용하는 HTTP 요청입니다.

각 쿼리 요청은 인증 및 작업을 처리할 수 있도록 일부 공통 파라미터를 포함해야 합니다.

일부 작업은 파라미터의 목록을 허용합니다. 이러한 목록은 `param.n` 표기법을 사용하여 지정됩니다. *n*의 값은 1부터 시작하는 정수입니다.

## 쿼리 요청 인증
<a name="query-authentication"></a>

HTTPS를 통해서만 쿼리 요청을 보낼 수 있으며 모든 쿼리 요청에는 서명이 포함되어야 합니다. 이 섹션에서는 서명을 작성하는 방법을 설명합니다. 아래 절차에 설명된 방법은 *서명 버전 4*라고 합니다.

다음은 AWS에 대한 요청을 인증하는 데 사용되는 기본 단계입니다. 이 경우, 사용자가 AWS에 등록되어 있으며 액세스 키 ID 및 비밀 액세스 키를 가지고 있다고 가정합니다.

**쿼리 인증 절차**

1. 발신자가 AWS에 대한 요청을 구성합니다.

1. 발신자가 이 항목의 다음 섹션에 정의된 방법으로 SHA-1 해시 기능을 사용하는 HMAC(Hash-based Message Authentication Code)에 대한 키 해싱인 요청 서명을 계산합니다.

1. 요청의 발신자가 요청 데이터, 서명 및 액세스 키 ID(사용된 비밀 액세스 키의 키 식별자)를 AWS으(로) 보냅니다.

1. AWS는 액세스 키 ID를 사용하여 보안 액세스 키를 찾습니다.

1. AWS는 요청의 서명 계산에 사용된 동일한 알고리즘을 사용하여 요청 데이터 및 비밀 액세스 키에서 서명을 생성합니다.

1. 서명이 일치하는 경우, 요청이 인증되는 것으로 간주됩니다. 서명이 일치하지 않을 경우, 요청이 삭제되고 AWS에서 오류 응답을 반환합니다.

**참고**  
`Timestamp` 매개 변수가 요청에 포함된 경우, 요청에 대해 계산된 서명은 그 매개 변수 값보다 15분 후에 만료됩니다.  
`Expires` 매개 변수가 요청에 포함된 경우, 그 서명은 `Expires` 매개 변수에 의해 지정된 시간에 만료됩니다.

**요청 서명을 계산하려면**

1. 정규화된 쿼리 문자열을 만듭니다. 이 절차의 뒷부분에서 필요합니다.

   1. UTF-8 쿼리 문자열 구성 요소를 매개 변수 이름의 일반 바이트 순서로 정렬합니다. 이 매개 변수는 GET URI 또는 POST 요청 본문(Content-Type이 application/x-www-form-urlencoded일 경우)의 내용이 사용될 수 있습니다.

   1. 다음 규칙에 따라 매개 변수 이름과 값을 URL 인코딩합니다.

      1. RFC 3986에 정의된 예약되지 않은 모든 문자는 URL 인코딩하지 않습니다. 이러한 예약되지 않은 문자는 A\$1Z, a\$1z, 0\$19, 하이픈( - ), 밑줄( \$1 ), 마침표( . ) 및 물결표(\$1)입니다.

      1. %XY와 같이 모든 기타 문자를 퍼센트 인코딩합니다(여기서 X 및 Y는 16진 문자 0\$19 및 대문자 A\$1F).

      1. 확장된 UTF-8 문자는 %XY%ZA... 형식으로 퍼센트 인코딩합니다.

      1. 공백 문자는 %20(일반 인코딩 구조인 \$1가 아님)으로 퍼센트 인코딩합니다.

   1. 매개 변수 값이 비어있는 경우에도 인코딩된 매개 변수 이름을 인코딩된 매개 변수 값과 등호(=)(ASCII 문자 61)로 구별합니다.

   1. 앰퍼샌드(&)(ASCII 코드 38)로 이름-값 쌍을 구별합니다.

1. 다음의 의사(pseudo) 문법("\$1n"은 ASCII 줄 바꿈을 나타냄)에 따라 서명할 문자열을 만듭니다.

   ```
   StringToSign = HTTPVerb + "\n" +
   ValueOfHostHeaderInLowercase + "\n" +
   HTTPRequestURI + "\n" +
   CanonicalizedQueryString <from the preceding step>
   ```

   HTTPRequestURI 구성 요소는 URI의 HTTP 절대 경로 구성 요소이고 쿼리 문자열은 포함하지는 않습니다. HTTPRequestURI가 비어있는 경우, 슬래시(/)를 사용합니다.

1. 사용자의 보안 액세스 키를 키로, SHA256 또는 SHA1을 해시 알고리즘으로 하여 방금 만든 문자열로 RFC 2104 호환 HMAC를 계산합니다.

   자세한 내용은 [https://www.ietf.org/rfc/rfc2104.txt](https://www.ietf.org/rfc/rfc2104.txt)를 참조하세요.

1. 결과 값을 base64로 변환합니다.

1. 요청에서 `Signature` 매개 변수 값을 값으로 포함합니다.

예를 들어, 다음은 샘플 요청입니다(줄 바꿈이 명확성을 위해 추가됨).

```
https://memory-db.us-east-1.amazonaws.com/
    ?Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
```

이전 쿼리 문자열의 경우, 다음 문자열을 통해 HMAC 서명을 계산합니다.

```
GET\n
    memory-db.amazonaws.com\n
    Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
    &X-Amz-Algorithm=Amazon4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE%2F20140523%2Fus-east-1%2Fmemorydb%2Faws4_request
    &X-Amz-Date=20210801T223649Z
    &X-Amz-SignedHeaders=content-type%3Bhost%3Buser-agent%3Bx-amz-content-sha256%3Bx-amz-date
        content-type:
        host:memory-db.us-east-1.amazonaws.com
        user-agent:ServicesAPICommand_Client
    x-amz-content-sha256:
    x-amz-date:
```

이 결과는 다음의 서명된 요청입니다.

```
https://memory-db.us-east-1.amazonaws.com/
    ?Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
    &X-Amz-Algorithm=Amazon4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE/20141201/us-east-1/memorydb/aws4_request
    &X-Amz-Date=20210801T223649Z
    &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
    &X-Amz-Signature=2877960fced9040b41b4feaca835fd5cfeb9264f768e6a0236c9143f915ffa56
```

서명 프로세스 및 요청 서명 계산에 대한 자세한 내용은 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 항목과 그 하위 항목을 참조하세요.