Lambda 권한 부여자를 생성한 후에 API Gateway 401 Unauthorized 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2022년 9월 20일

AWS Lambda 권한 부여자를 생성한 후 Amazon API Gateway API가 401 Unauthorized 오류를 반환합니다. 이런 현상이 발생하는 이유는 무엇이고 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

참고: API Gateway는 여러 이유로 401 권한 없음(401 Unauthorized) 오류를 반환할 수 있습니다. 이 문서에서는 권한 부여자 Lambda 함수를 호출하지 않고 API Gateway에서 반환한 401 권한 없음 오류만 다룹니다.

Lambda 권한 부여자를 사용하는 API Gateway API가 권한 없는 요청을 수신하면 API Gateway는 401 권한 없음 응답을 반환합니다.

토큰 기반 Lambda 권한 부여자의 경우

401 Unauthorized 오류는 일반적으로 필요한 토큰이 누락되었거나 권한 부여자의 토큰 유효성 검사 표현식에 의해 검증되지 않은 경우에 발생합니다.

요청 파라미터 기반 Lambda 권한 부여자의 경우

401 Unauthorized 오류는 일반적으로 구성된 ID 소스가 없거나, null이거나, 비어 있거나, 유효하지 않은 경우에 발생합니다.

이러한 유형의 오류를 해결하려면 Lambda 권한 부여자 구성을 검토하여 API에 대한 요청에 포함해야 하는 정보를 확인하세요. 그런 다음 필요한 헤더와 토큰 값 또는 자격 증명 소스로 API를 호출하여 권한 부여자를 테스트합니다.

참고: Lambda 권한 부여자 설정의 예는 토큰 기반 Lambda 권한 부여자 함수 생성요청 기반 Lambda 권한 부여자 함수 생성을 참조하세요.

해결 방법

Lambda 권한 부여자의 구성 검토

1.    API Gateway 콘솔을 엽니다.

2.    API 패널에서 API 이름을 선택합니다.

3.    탐색 창의 API 이름 아래에서 [권한 부여자(Authorizers)]를 선택합니다. [권한 부여자(Authorizers)] 페이지가 열립니다.

4.    사용 사례에 따라 다음 중 하나에 대해 권한 부여자의 구성을 검토합니다.

토큰 기반 Lambda 권한 부여자의 경우

[Lambda 이벤트 페이로드(Lambda Event Payload)]가 [토큰(Token)]으로 설정된 경우 [토큰 소스(Token Source)]의 값을 확인합니다. API 호출에서 [토큰 소스(Token Source)] 값을 요청 헤더로 사용해야 합니다.

중요: [토큰 유효성 검사(Token Validation)]에 정규 표현식을 입력한 경우 API Gateway는 이 표현식에 대해 토큰의 유효성을 검사합니다. 예를 들어 정규식 \ w{5}를 입력한 경우 5자의 영숫자 문자열을 포함하는 토큰 값만 검증됩니다.

-또는-

요청 파라미터 기반 Lambda 권한 부여자의 경우

[Lambda 이벤트 페이로드(Lambda Event Payload)]가 [요청(Request)]으로 설정된 경우 구성된 [자격 증명 소스(Identity Sources)]를 확인합니다. 자격 증명 소스는 헤더, 쿼리 문자열, 다중값 쿼리 문자열, 스테이지 변수 또는 $context 변수일 수 있습니다.

중요: [권한 부여 캐싱(Authorization Caching)]이 활성화되면 구성된 모든 자격 증명 소스에 대해 API에 대한 요청이 검증됩니다.

5.    [권한 부여 캐싱(Authorization Caching)]이 활성화되어 있는 경우(예를 들어, "권한 부여가 1분 동안 캐싱됨"인 경우) 다음 단계에서 테스트를 위해 캐싱을 비활성화합니다.

자세한 내용은 API Gateway 콘솔을 사용하여 Lambda 권한 부여자 구성을 참조하세요.

API 배포

Lambda 권한 부여자의 구성 또는 기타 API 설정을 변경한 경우 API를 재배포하여 변경 사항을 커밋합니다.

Lambda 권한 부여자 테스트

Lambda 권한 부여자를 테스트하려면 다음 중 하나를 수행하여 API에 대한 테스트 호출을 수행합니다.

중요: Lambda 권한 부여자 구성에 따라 요청의 형식을 지정해야 합니다.

API Gateway 콘솔을 사용하여 Lambda 권한 부여자를 테스트하려면

1.    API Gateway 콘솔을 엽니다.

2.    API 패널에서 API 이름을 선택합니다.

3.    탐색 창의 API 이름 아래에서 [권한 부여자(Authorizers)]를 선택합니다.

4.    [권한 부여자(Authorizers)] 페이지에서 권한 부여자에 대한 [테스트(Test)]를 선택합니다.

5.    [권한 부여자 테스트(Test Authorizer)] 대화 상자에서 사용 사례에 따라 다음 중 하나를 수행합니다.

토큰 기반 Lambda 권한 부여자의 경우

1.    권한 부여 토큰(Authorization Token)에 값을 지정하지 않고 [테스트(Test)]를 선택합니다. API Gateway는 권한 부여 토큰이 비어 있기 때문에 응답 코드 401을 반환합니다.

2.    정규식 \ w{5}를 사용하는 Token Validation(토큰 유효성 검사)이 구성된 경우 Authorization Token(권한 부여 토큰)으로 유효하지 않은 값(예: ‘abc123’)을 입력합니다. 그런 다음 Test(테스트)를 선택합니다. Authorization Token(권한 부여 토큰)이 Token Validation(토큰 유효성 검사) 표현식을 충족하지 않으므로 API Gateway는 Response Code: 401(응답 코드 401)을 반환합니다.

3.    권한 부여 토큰 값으로 허용(allow)을 입력한 다음 [테스트(Test)]를 선택합니다. API 게이트웨이는 응답 코드: 200 메시지를 반환합니다.

-또는-

요청 파라미터 기반 Lambda 권한 부여자의 경우

1.    요청 파라미터를 삭제하고 [테스트(Test)]를 선택합니다. API Gateway는 요청 파라미터가 누락되었으므로 응답 코드 401을 반환합니다.

2.    [요청 파라미터(Request Parameters)]에 [headerValue1], [queryValue1] 및 [stageValue1]을 입력하고 [테스트(Test)]를 선택합니다. API 게이트웨이는 응답 코드: 200 메시지를 반환합니다.

Postman 또는 curl을 사용하여 Lambda 권한 부여자를 테스트하려면

Postman 앱을 사용하여 Lambda 권한 부여자를 테스트하는 방법에 대한 지침은 API Gateway Lambda 권한 부여자를 사용하여 API 호출을 참조하세요.

curl에 대한 자세한 내용은 cURL 프로젝트 웹 사이트를 참조하세요.

참고:

  • 테스트하기 전에 Lambda 권한 부여자에 대한 Authorization Caching(권한 부여 캐싱)을 해제한 경우 테스트 후 다시 활성화할 수 있습니다. Authorization Caching(권한 부여 캐싱)을 다시 활성화한 경우 API를 다시 배포하여 변경 사항을 커밋해야 합니다.
  • Lambda 권한 부여자로부터 교차 오리진 리소스 공유(CORS) 오류를 수신하는 경우 DEFAULT 4XX API Gateway 응답에 CORS 헤더를 추가할 수 있습니다. 자세한 내용은 내 API Gateway API에서 CORS 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.