2016-09-17 7 views
3
  1. X-Amz-Expires은 필수 헤더/매개 변수입니까? 공식 문서는 일치하지 않으며 some examples에 사용되지만 others에는 사용되지 않습니다.X-Amz-AWS 요청에 필요한 헤더/매개 변수가 만료 되었습니까?

  2. 필요하지 않은 경우 서명 된 요청의 기본 만료 값은 무엇입니까? X-Amz-Expires 매개 변수의 가능한 최대 값은 604800 (seven days)입니까?

  3. 위의 문서 (위 링크 참조)는 X-Amz-Expires 매개 변수에 대해 쿼리 문자열에 서명 매개 변수를 전달하는 컨텍스트에서만 설명합니다. X-Amz-Expires 매개 변수가 필요한 경우 쿼리 문자열에 서명 매개 변수를 전달할 때만 필요합니까 (인증 헤더를 전달하는 것과 반대).


업데이트 :

Introduction to AWS Security Processes 종이, 17 페이지는

요청이 요청의 타임 스탬프 15 분 이내에 AWS에 도달해야했다. 그렇지 않으면 AWS가 요청을 거부합니다.

여기에서 우리는 어떤 타임 스탬프를 말하고 있습니까? 내 추측으로는 X-Amz-Date입니다. 제가 맞다면 다른 질문이 생깁니다 :

  1. X-Amz-Expires 매개 변수는 서로 어떻게 관련되어 있습니까? 내게는 X-Amz-Expire이없는 경우 요청 만료 알고리즘이 X-Amz-Date 타임 스탬프에서 15 분으로 떨어지는 것처럼 들립니다.

답변

4

X-Amz-Expires 필요한 헤더/매개 변수인가?

X-Amz-ExpiresAuthorization: 헤더가 아닌 쿼리 문자열 인증에만 사용됩니다.

쿼리 문자열 인증에는 기본값이 없습니다. 이 매개 변수는 필수 매개 변수이며 X-Amz-Algorithm=AWS4-HMAC-SHA256이 쿼리 문자열에 있지만 X-Amz-Expires=...이 아닌 경우 요청을 거부합니다.

<Error> 
    <Code>AuthorizationQueryParametersError</Code> 
... 

이제 어떻게 타임 스탬프 우리는 여기에 대해 말을하는거야?

Authorization: 헤더와 함께 사용할 경우 X-Amz-Date:을 나타냅니다. X-Amz-Date:은 서명 알고리즘에 대한 입력의 일부이기 때문에 날짜 또는 시간을 변경하면 서명도 변경됩니다. 1 초 이전에 서명 된 동일하지 않은 요청은 완전히 다른 서명을가집니다. AWS는 본질적으로 요청을 인증 할 수있는 능력을 손상시키지 않으면 서 서버 시계를 최대 15 분까지 잘못 허용합니다. 대체 또는 기본값이 아닙니다. 고정 된 창입니다.

X-Amz-Date:Authorization:의 헤더 기반 요청

은 UTC로 동기화되어 물론 그들의 시스템 시간에 AWS으로 비교하고, 상기 요청은 손이 값은 UTC로 왜곡 15 분 이상이면하는지 거부되면 요청이 도착합니다. 시간 확인 전에 인증과 관련된 다른 유효성 검증은 발생하지 않습니다.

문자열 인증 만료가 서로 다른 논리를 포함 검증 쿼리의

:

  • X-Amz-Expires 0보다 큰 값 604,800보다 크거나 작을 수 없습니다해야합니다 그렇지 않으면 위와 유사한 메시지를 포함하여 추가 처리없이 즉시 요청이 거부됩니다.
  • X-Amz-Date은 AWS 시스템 시계에 따라 나중에 15 분을 넘지 않아야합니다. 오류는 Request is not yet valid입니다.
  • X-Amz-Date은 AWS 시스템 클록을 기준으로 과거 초 수 X-Amz-Expires 이상이어야하며 15 분 허용 오차가 적용되지 않습니다. 오류는 Request has expired입니다.

이러한 조건이 발생하면 더 이상의 유효성 검사가 수행되지 않으므로 이러한 메시지는 서명의 유효성에 따라 변경되지 않습니다. 먼저 확인합니다.

또한 X-Amz-Date:의 왼쪽 8 자는 Authorization: 헤더의 Credential 구성 요소의 날짜 부분과 일치해야합니다. 날짜 자체는 신임장과의 불일치에 대해 전혀 용인되지 않습니다 (따라서 서명 할 때 시스템 시간을 두 번 읽지 마십시오. 그렇지 않으면 UTC 자정 무렵에 가끔 유효하지 않은 서명이 발생할 위험이 있습니다).

마지막으로 요청은 처리 중에 만료되지 않습니다. 도착한 시점에서 유효하지만 서명이 끝난 후 곧 만료되는 서명 방법 중 하나를 사용하여 요청을 보내면 항상 완료까지 실행할 수 있습니다. 예를 들어 큰 S3 다운로드 또는 EBS 스냅 샷 생성 요청이 시작되지 않습니다. 요청이 이미 AWS 측에서 시작된 동안 만료 타이머가 울 렸기 때문에 계속 실패합니다. 조치가 요청 될 때 권한이 부여 된 경우, 조치는 정상적으로 계속되고 성공합니다.

+0

독자적으로 주제를 연구 한 후 (사양에 따라 알고리즘을 구현 했음) 대부분 대답에 동의합니다. 그러나 : a) X-Amz-Expires 매개 변수는 S3 객체 업로드/다운로드에만 필요하며 IAM, EC2 또는 DynamoDB에 대한 API 호출에는 무시됩니다 (다른 서비스는 테스트하지 않았습니다). b) UTC 동기화 설명이 약간 잘못되었습니다. UTC는 시간대이며 시간대와 동기화되지 않습니다. 요청 생성 시간이 Amazon 서버의 시간과 15 분 이상 차이가 나는 경우 요청이 거부됩니다. – golem

+0

만료와 관련하여 내 대답의 기술적 정확성이 중요하므로이 대답을 검토하고 테스트하고 업데이트 할 것입니다. UTC에 대해서는 UTC 시간대를 언급하지 않았습니다. [* "UTC로 약칭 된 협정 세계시는 세계가 시계와 시간을 규제하는 기본 시간 표준입니다."] (https://en.m.wikipedia.org/wiki/Coordinated_Universal_Time) * Amazon 서버 시간이 동기화 됨 * UTC 시간 표준 *이므로 서버 시계가 아닌 경우 15 분 미만의 오차가 있습니다. 서버가 더 비뚤어지면 요청이 실패합니다. –