Lambda 권한 부여자 함수의 출력은 사전과 같은 객체이며, 이 객체에는 보안 주체 ID(principalId
)와 정책 설명 목록이 들어 있는 정책 문서(policyDocument
)가 포함되어 있어야 합니다. 또한 키-값 페어를 포함하는 context
맵을 포함할 수 있습니다. API가 사용량 계획을 사용하는 경우(apiKeySource
가 AUTHORIZER
로 설정됨), Lambda 권한 부여자 함수는 usageIdentifierKey
속성 값으로 사용량 계획의 API 키 중 하나를 반환해야 합니다.
다음은 이 출력의 예입니다.
{ "principalId": "
yyyyyyyy
", // The principal user identification associated with the token sent by the client. "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow|Deny", "Resource": "arn:aws:execute-api:{regionId}
:{accountId}
:{apiId}
/{stage}
/{httpVerb}
/[{resource}
/[{child-resources}
]]" } ] }, "context": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" }, "usageIdentifierKey": "{api-key}
" }
여기서 정책 설명은 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
값에 액세스할 수 있습니다. 이 기능은 값을 백엔드에 전달하려는 경우에 유용합니다. 자세한 내용은 데이터 모델, 권한 부여자, 매핑 템플릿, CloudWatch 액세스 로깅을 위한 $context 변수 단원을 참조하십시오.
각각 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 함수로 직접 전달합니다. $event.requestContext.authorizer.
를 호출하여 Lambda 함수에서 key
context
키-값 페어를 검색할 수 있습니다.
{api-key}
는 API 단계의 사용량 계획에서 API 키를 뜻합니다. 자세한 내용은 API Gateway의 REST API 사용량 계획 및 API 키 단원을 참조하십시오.
다음 예제는 Lambda 권한 부여자의 출력을 보여줍니다. 예제 출력에는 AWS 계정(123456789012
)의 API(ymy8tbxw7b
) dev
스테이지에 대해 GET
메서드에 대한 호출을 차단(Deny
)하는 정책 설명이 포함되어 있습니다.
{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/" } ] } }