GraphQL 요청 유효성 검사
적용 대상: 모든 API Management 계층
validate-graphql-request
정책은 GraphQL 요청의 유효성을 검사하고 GraphQL API의 특정 쿼리 경로에 대한 액세스 권한을 부여합니다. 잘못된 쿼리는 "요청 오류"입니다. 권한 부여는 유효한 요청에 대해서만 수행됩니다.
참고 항목
정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.
정책 문
<validate-graphql-request error-variable-name="variable name" max-size="size in bytes" max-depth="query depth">
<authorize>
<rule path="query path, for example: '/listUsers' or '/__*'" action="string or policy expression that evaluates to 'allow | remove | reject | ignore'" />
</authorize>
</validate-graphql-request>
특성
특성 | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
error-variable-name | 유효성 검사 오류를 로그할 context.Variables 의 변수 이름입니다. 정책 식이 허용됩니다. |
아니요 | 해당 없음 |
max-size | 요청 페이로드의 최대 크기(바이트)입니다. 허용되는 최댓값: 102,400바이트(100KB). (이 제한을 늘려야 하는 경우 고객 지원팀에 문의하세요.) 정책 식이 허용됩니다. | 예 | 해당 없음 |
max-depth | 정수입니다. 최대 쿼리 깊이입니다. 정책 식이 허용됩니다. | 아니요 | 6 |
Elements
이름 | 설명 | 필수 |
---|---|---|
권한 부여 | 이 요소를 추가하여 하나 이상의 경로에 대해 적절한 권한 부여 규칙을 설정합니다. | 아니요 |
rule | 특정 쿼리 경로에 권한을 부여하려면 이러한 요소 중 하나 이상을 추가합니다. 각 규칙은 필요에 따라 다른 작업을 지정할 수 있습니다. 정책 식을 사용하여 조건부로 지정할 수 있습니다. | 아니요 |
규칙 특성
attribute | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
경로 | 권한 부여 유효성 검사를 실행할 경로입니다. /type/field 패턴을 따라야 합니다. |
예 | 해당 없음 |
작업 | 규칙이 적용되는 경우 수행할 작업입니다. 정책 식을 사용하여 조건부로 지정할 수 있습니다. | 아니요 | 허용 |
검사 시스템
path=/__*
에 대한 정책은 검사 시스템입니다. 이를 사용하여 검사 요청(__schema
, __type
등)을 거부할 수 있습니다.
작업 요청
사용 가능한 작업은 다음 표에 설명되어 있습니다.
작업 | 설명 |
---|---|
거부 | 요청 오류가 발생하고 요청이 백 엔드로 보내지지 않습니다. 구성된 경우 추가 규칙이 적용되지 않습니다. |
remove | 필드 오류가 발생하고 필드가 요청에서 제거됩니다. |
허용 | 필드가 백 엔드에 전달됩니다. |
ignore | 이 경우 규칙이 유효하지 않으며 다음 규칙이 적용됩니다. |
사용
사용법 참고 사항
이 정책은 정책 섹션에서 한 번만 사용할 수 있습니다.
GraphQL 쿼리는 평면화된 스키마를 사용하므로 출력 형식의 리프 노드에서 사용 권한을 적용할 수 있습니다.
- 변형, 쿼리 또는 구독
- 형식 선언의 개별 필드
적용되지 않을 수 있는 권한은 다음과 같습니다.
- 입력 유형
- 조각
- Unions
- 인터페이스
- 스키마 요소
정책은 모든 수준에서 최대 250개의 쿼리 필드가 있는 GraphQL 요청의 유효성을 검사할 수 있습니다.
오류 처리
GraphQL 스키마에 대한 유효성 검사 실패 또는 요청의 크기 또는 깊이에 대한 실패는 요청 오류이며, 오류 블록(그러나 데이터 블록 없음)과 함께 요청이 실패합니다.
Context.LastError
속성과 마찬가지로 모든 GraphQL 유효성 검사 오류는 GraphQLErrors
변수에 자동으로 전파됩니다. 오류를 별도로 전파해야 하는 경우 오류 변수 이름을 지정할 수 있습니다. 오류는 error
변수 및 GraphQLErrors
변수에 푸시됩니다.
예제
쿼리 유효성 검사
다음 예제에서는 다음 유효성 검사 및 권한 부여 규칙을 GraphQL 쿼리에 적용합니다.
- 100kb보다 크거나 쿼리 깊이가 4보다 큰 요청이 거부됩니다.
- 검사 시스템에 대한 요청이 거부됩니다.
/Missions/name
필드는 두 개가 넘는 헤더가 포함된 요청에서 제거됩니다.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4">
<authorize>
<rule path="/__*" action="reject" />
<rule path="/Missions/name" action="@(context.Request.Headers.Count > 2 ? "remove" : "allow")" />
</authorize>
</validate-graphql-request>
변형 유효성 검사
다음 예제에서는 다음 유효성 검사 및 권한 부여 규칙을 GraphQL 변형에 적용합니다.
- 100kb보다 크거나 쿼리 깊이가 4보다 큰 요청이 거부됩니다.
deleteUser
필드 변형에 대한 요청이198.51.100.1
IP 주소에서 오는 경우를 제외하고는 해당 요청이 거부됩니다.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4">
<authorize>
<rule path="/Mutation/deleteUser" action="@(context.Request.IpAddress <> "198.51.100.1" ? "deny" : "allow")" />
</authorize>
</validate-graphql-request>
관련 정책
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 문 및 해당 설정에 대한 전체 목록에 대한 정책 참조
- 정책 식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- Azure API Management 정책 도구 키트
- Azure의 Microsoft Copilot을 사용하는 작성자 정책