라우팅 규칙 문제 해결 - Amazon API Gateway

라우팅 규칙 문제 해결

다음 문제 해결 지침은 라우팅 규칙에 대한 리소스 문제를 해결하는 데 도움이 될 수 있습니다.

API Gateway가 내 API로 트래픽을 어떻게 전송했는지 알 수 없음

REST API 스테이지에 대한 액세스 로그를 사용하여 라우팅 규칙을 로깅하고 문제를 해결할 수 있습니다. $context.customDomain.routingRuleIdMatched 변수를 사용하여 API Gateway가 API로 트래픽을 전송하는 데 사용한 라우팅 규칙 ID를 볼 수 있습니다. API Gateway가 API로 트래픽을 전송하는 데 사용한 API 매핑을 보려면 $context.customDomain.basePathMatched 변수를 사용합니다.

라우팅 규칙을 로깅하려면 계정에 적합한 CloudWatch Logs 역할 ARN을 구성하고 로그 그룹을 만들어야 합니다.

다음 예제 액세스 로그 그룹은 라우팅 규칙 및 API 매핑 문제 해결과 관련된 정보를 검색할 수 있습니다. API Gateway는 사용한 라우팅 메커니즘의 컨텍스트 변수만 채웁니다. 그렇지 않으면 컨텍스트 변수는 -입니다.

CLF
$context.path $context.customDomain.routingRuleIdMatched $context.customDomain.basePathMatched $context.requestId $context.extendedRequestId
JSON
{"requestPath": "$context.path", "routingRuleId" : "$context.customDomain.routingRuleIdMatched", "API mapping" : "$context.customDomain.basePathMatched", "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId"}
XML
<request id="$context.requestId"> <requestPath>$context.path</requestPath> <ruleId>$context.customDomain.routingRuleIdMatched</ruleId> <ApiMapping>$context.customDomain.basePathMatched</ApiMapping> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
CSV
$context.path,$context.customDomain.routingRuleIdMatched,$context.customDomain.basePathMatched,$context.requestId,$context.extendedRequestId

또한 사용자 지정 도메인 이름의 라우팅 모드를 확인하는 것이 좋습니다. 자세한 내용은 사용자 지정 도메인 이름의 라우팅 모드 설정 섹션을 참조하세요.

사용자 지정 도메인 이름에서 라우팅 규칙을 활성화할 수 없음

API Gateway에서 다음 오류가 발생할 수 있습니다.

Your account doesn’t have permission to use RoutingRules. This might be caused by an IAM policy in your account with a deny statement on BasePathMapping or ApiMapping. To grant permission for this account to use RoutingRules, use the UpdateAccount API. This will impact any existing IAM policies that deny access to BasePathMapping or ApiMapping. See API Gateway documentation for further details.

BasePathMapping 또는 ApiMapping에 대한 액세스를 거부하는 IAM 정책이 현재 또는 과거에 있었던 경우 오류가 발생합니다. 사용자 지정 도메인 이름에 대해 라우팅 규칙을 활성화하면 정책이 BasePathMapping 또는 ApiMapping에 대한 액세스를 계속 거부하지만 동일한 정책을 사용하여 RoutingRule에 액세스할 수 있습니다. 이렇게 하면 사용자가 사용자 지정 도메인 이름의 라우팅 동작을 변경할 수 있습니다.

예를 들어 다음과 같은 정책이 있는 경우:

{ "Sid": "DenyCreatingApiMappings", "Effect": "Deny", "Action": "apigateway:POST", "Resource": [ "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings" ] }

example.com에 대한 라우팅 규칙을 활성화하면 이 정책은 ApiMapping 만들기에 대한 액세스를 계속 거부하지만 RoutingRule 만들기에 대한 액세스는 거부하지 않습니다.

계정의 IAM 정책을 감사하는 것이 좋습니다. 다음 예제 정책은 ApiMapping, BasePathMappingRoutingRule 만들기에 대한 액세스를 거부합니다.

{ "Sid": "DenyCreatingBasePathMappingsApiMappings", "Effect": "Deny", "Action": "apigateway:POST", "Resource": [ "arn:aws:apigateway:us-west-2::/domainnames/example.com/basepathmappings", "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings" ] }, { "Sid": "DenyCreatingRoutingRules", "Effect": "Deny", "Action": "apigateway:CreateRoutingRule", "Resource": [ "arn:aws:apigateway:us-west-2:111122223333:/domainnames/example.com/routingrules/*" ] }

모든 정책이 업데이트되었는지 확인한 후 API의 계정 수준 설정을 업데이트하여 리전에 대한 라우팅 규칙을 활성화할 수 있습니다.

다음 update-account 명령을 사용하여 특정 리전의 API의 계정 수준 설정을 업데이트합니다.

aws apigateway update-account --patch-operations 'op=remove,path=/features,value=BlockedForRoutingRules' --region us-west-2

API의 계정 수준 설정을 업데이트한 후 사용자 지정 도메인 이름의 라우팅 모드를 변경할 수 있습니다. IAM 정책을 계속 사용하여 RoutingRules, ApiMapping 또는 BasePathMapping에 대한 액세스를 거부할 수도 있습니다.