

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

# Amazon SWF에 대한 HMAC-SHA 서명 계산
<a name="HMACAuth-swf"></a>

Amazon SWF에 대한 모든 요청은 인증해야 합니다. AWS SDKs는 요청에 자동으로 서명하고 토큰 기반 인증을 관리합니다. 그러나 자체 HTTP `POST` 요청을 작성하려는 경우 요청 인증의 일부로 HTTP `POST Header` 콘텐츠에 대한 `x-amzn-authorization` 값을 생성해야 합니다.

헤더 형식 지정에 대한 자세한 내용은 [HTTP 헤더 콘텐츠](UsingJSON-swf.md#HTTPHeader) 단원을 참조하십시오. AWS 버전 3 서명 AWS SDK for Java 구현은 [ AWSSigner.java](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java) 클래스를 참조하세요.

## 요청 서명 생성
<a name="AuthProcess"></a>

HMAC-SHA 요청 서명을 생성하려면 AWS 자격 증명(액세스 키 ID 및 보안 키)을 얻어야 합니다.

**중요**  
SHA1 또는 SHA256을 사용하여 요청에 서명할 수 있습니다. 그러나 서명 프로세스 전체에서 동일한 방법을 사용해야 합니다. 선택한 메서드는 HTTP 헤더의 `Algorithm` 이름 값과 일치해야 합니다.

### 요청 서명을 생성하려면
<a name="swf-create-request-signature-steps"></a>

1. HTTP 요청 헤더의 표준 양식을 생성합니다. HTTP 헤더의 표준 양식에는 다음이 포함됩니다.
   + `host`
   + `x-amz-`로 시작되는 모든 헤더 요소

   포함된 헤더에 대한 자세한 내용은 [HTTP 헤더 콘텐츠](UsingJSON-swf.md#HTTPHeader) 단원을 참조하십시오.

   1. 각 헤더 이름-값 페어의 경우 헤더 이름(헤더 값 아님)을 소문자로 변환합니다.

   1. 헤더 이름 맵을 쉼표로 구분된 헤더 값으로 작성합니다.

      ```
      x-amz-example: value1
      x-amz-example: value2  =>  x-amz-example:value1,value2
      ```

      자세한 내용은 [RFC 2616의 섹션 4.2](http://tools.ietf.org/html/rfc2616)를 참조하십시오.

   1. 각 헤더 이름-값 페어의 경우 이름-값 페어를 `headerName:headerValue` 형식의 문자열로 변환합니다. 콜론 양쪽에 공백이 없도록 하고, `headerName` 및 `headerValue` 모두 시작 및 끝부분에서 공백을 잘라냅니다.

      ```
      x-amz-example1:value1,value2
      x-amz-example2:value3
      ```

   1. 마지막 문자열을 포함하여 변환된 각 문자열 뒤에 새 줄(`U+000A`)을 삽입합니다.

   1. 변환된 문자열 컬렉션을 헤더 이름에 따라 영문자순으로 정렬합니다.

1. 다음 항목이 포함된 서명할 문자열 값을 생성합니다.
   + 줄 `1`: HTTP 메서드(`POST`), 뒤에서 줄바꿈합니다.
   + 줄 `2`: 요청 URI(`/`), 뒤에서 줄바꿈합니다.
   + 줄 `3`: 빈 문자열, 뒤에서 줄바꿈합니다.
**참고**  
일반적으로 여기에 쿼리 문자열이 나타나지만 Amazon SWF는 쿼리 문자열을 사용하지 않습니다.
   + 줄 `4–n`: 1단계에서 계산한 정규화된 요청 헤더를 나타내는 문자열로, 뒤에서 줄바꿈합니다. 이 새 줄 때문에 HTTP 요청의 헤더와 본문 사이에 빈 줄이 생깁니다. 자세한 내용은 [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html)를 참조하십시오.
   + 요청 본문 뒤에는 줄바꿈하지 *않습니다*.

1. 서명할 문자열 값의 SHA256 또는 SHA1 다이제스트를 계산합니다. 프로세스 전체에서 동일한 SHA 메서드를 사용합니다.

1. 이전 단계에서 생성된 값의 SHA256 또는 SHA1 다이제스트(사용한 방법에 따라 다름)를 사용하고 `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)` API 작업을 사용하여 AWS Security Token Service의 임시 보안 액세스 키를 사용하여 HMAC-SHA를 계산하고 Base64-encode합니다.
**참고**  
Amazon SWF는 Base64로 인코딩된 HMAC-SHA 값 끝에 등호(`=`)가 있어야 합니다. Base64 인코딩 루틴에 등호가 추가되어 있지 않으면 값의 끝에 등호를 추가합니다.

   Amazon SWF 및 기타 AWS 서비스에서 임시 보안 자격 증명을 사용하는 방법에 대한 자세한 내용은 [AWS IAM 사용 설명서의 IAM으로 작업하는 서비스를](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html) 참조하세요. ** 

1. Amazon SWF에 대한 HTTP 요청의 `x-amzn-authorization` 헤더에 `Signature` 이름에 대한 값으로 결과 값을 배치합니다.

1. Amazon SWF는 요청을 확인하고 지정된 작업을 수행합니다.