API Gateway Lambda 권한 부여자의 출력
Lambda 권한 부여자 함수의 출력은 사전과 같은 객체이며, 이 객체에는 보안 주체 ID(principalId)와 정책 설명 목록이 들어 있는 정책 문서(policyDocument)가 포함되어 있어야 합니다. 또한 키-값 페어를 포함하는 context 맵을 포함할 수 있습니다. API가 사용량 계획을 사용하는 경우(apiKeySource가 AUTHORIZER로 설정됨), Lambda 권한 부여자 함수는 usageIdentifierKey 속성 값으로 사용량 계획의 API 키 중 하나를 반환해야 합니다.
다음은 이 출력의 예입니다.
여기서 정책 설명은 API Gateway 실행 서비스에서 지정된 API 메서드(Effect)를 호출(Action)하도록 허용할지 거부할지(Resource) 여부를 지정합니다. 권한 부여자에 따라 여러 리소스에 대한 액세스를 제어해야 할 수 있습니다. 와일드카드(*)를 사용하여 리소스 유형(메서드)를 지정할 수 있습니다. API 호출에 대한 유효한 정책을 설정하는 방법은 API Gateway에서 API 실행을 위한 IAM 정책의 설명 참조 단원을 참조하세요.
권한 부여가 활성화된 메서드 ARN의 경우(예: arn:aws:execute-api:) 최대 길이는 1,600바이트입니다. 경로 파라미터 값은 실행 시간에 값 크기가 결정되기 때문에 ARN 길이가 한도를 초과하게 될 가능성이 있습니다. 이런 일이 발생하면 API 클라이언트는 {regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]414 Request URI
too long 응답을 받습니다.
뿐만 아니라 권한 부여자의 정책 설명 출력 내용과 마찬가지로 리소스 ARN은 현재 512자로 제한되어 있습니다. 이런 이유 때문에 요청 URI에서는 길이가 상당히 긴 JWT 토큰이 있는 URI를 사용해서는 안 됩니다. 그 대신에 요청 헤더에서 JWT 토큰을 안전하게 전달할 수도 있습니다.
principalId 변수를 사용하여 매핑 템플릿에서 $context.authorizer.principalId 값에 액세스할 수 있습니다. 이 기능은 값을 백엔드에 전달하려는 경우에 유용합니다. 자세한 내용은 데이터 변환용 컨텍스트 변수 단원을 참조하세요.
각각 stringKey, numberKey 또는 booleanKey를 호출하여 매핑 템플릿에서 "value" 맵의 "1", "true" 또는 context 값(예: $context.authorizer.stringKey, $context.authorizer.numberKey 또는 $context.authorizer.booleanKey)에 액세스할 수 있습니다. 반환되는 값은 모두 문자열화됩니다. JSON 객체 또는 어레이를 context 맵의 유효한 키 값으로 설정할 수 없습니다.
context 맵을 사용하면 통합 요청 매핑 템플릿을 사용해 캐시된 자격 증명을 권한 부여자에서 백엔드로 반환할 수 있습니다. 그러면 캐시된 자격 증명을 사용해 모든 요청에 대해 보안 키에 액세스하고 권한 부여 토큰을 열 필요를 줄일 수 있으므로 백엔드가 개선된 사용자 경험을 제공할 수 있습니다.
Lambda 프록시 통합의 경우 API Gateway가 context 객체를 입력 event의 일부로 Lambda 권한 부여자에서 백엔드 Lambda 함수로 직접 전달합니다. context를 호출하여 Lambda 함수에서 $event.requestContext.authorizer. 키-값 페어를 검색할 수 있습니다.key
{api-key}는 API 단계의 사용량 계획에서 API 키를 뜻합니다. 자세한 내용은 API Gateway의 REST API 사용량 계획 및 API 키 단원을 참조하세요.
다음 예제는 Lambda 권한 부여자의 출력을 보여줍니다. 예제 출력에는 AWS 계정(123456789012)의 API(ymy8tbxw7b) dev 스테이지에 대해 GET 메서드에 대한 호출을 차단(Deny)하는 정책 설명이 포함되어 있습니다.