Amazon API Gateway
개발자 안내서

Amazon API Gateway Lambda 권한 부여자의 출력

Lambda 권한 부여자 함수의 출력은 딕셔너리 같은 객체이며 이 객체에는 보안 주체 ID(principalId)와 정책 설명 목록이 들어 있는 정책 문서(policyDocument)가 포함되어 있어야 합니다. 또한 키-값 페어를 포함하는 context 맵을 포함할 수 있습니다. API가 사용량 계획을 사용하는 경우(apiKeySourceAUTHORIZER로 설정됨), 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 메서드(Resource)를 호출(Action)하도록 허용할지 거부할지(Effect) 여부를 지정합니다. 와일드카드(*)를 사용하여 리소스 유형(메서드)를 지정할 수 있습니다. API 호출에 대한 유효한 정책을 설정하는 방법은 API Gateway에서 API 실행을 위한 IAM 정책의 설명 참조 단원을 참조하십시오.

권한 부여가 활성화된 메서드 ARN의 경우(예: arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]) 최대 길이는 1,600바이트입니다. 경로 파라미터 값은 실행 시간에 값 크기가 결정되기 때문에 ARN 길이가 한도를 초과하게 될 가능성이 있습니다. 이런 일이 발생하면 API 클라이언트는 414 Request URI too long 응답을 받습니다.

뿐만 아니라 권한 부여자의 정책 설명 출력 내용과 마찬가지로 리소스 ARN은 현재 512자로 제한되어 있습니다. 이런 이유 때문에 요청 URI에서는 길이가 상당히 긴 JWT 토큰이 있는 URI를 사용해서는 안 됩니다. 그 대신에 요청 헤더에서 JWT 토큰을 안전하게 전달할 수도 있습니다.

principalId 변수를 사용하여 매핑 템플릿에서 $context.authorizer.principalId 값에 액세스할 수 있습니다. 이 기능은 값을 백엔드에 전달하려는 경우에 유용합니다. 자세한 내용은 $context 데이터 모델, 권한 부여자, 매핑 템플릿, CloudWatch 액세스 로깅을 위한 변수 단원을 참조하십시오.

각각 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.key를 호출하여 Lambda 함수에서 context 키-값 페어를 검색할 수 있습니다.

{api-key}는 API 단계의 사용량 계획에서 API 키를 뜻합니다. 자세한 내용은 API 키를 이용한 사용량 계획의 생성 및 사용 단원을 참조하십시오.

다음 예제는 Lambda 권한 부여자의 출력을 보여줍니다. 예제 출력에는 모든 단계(*)의 AWS 계정(123456789012)의 API(ymy8tbxw7b)에서 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/*/GET/" } ] } }