GraphQLを使用したAccessログインイベントのクエリ
この例では、GraphQL Analytics APIを使用してAccessログインイベントのログを取得します。これらのログは、ユーザーが403 Forbiddenエラーを受け取った理由を特定するのに特に役立ちます。なぜなら、ダッシュボードのAccessログに表示される情報を超えた追加データを提供するからです。
以下のAPI呼び出しは、単一のAccessログインイベントのログを要求し、要求されたフィールドを出力します。認証リクエストはそのRay IDによって識別され、これはユーザーに表示される403 Forbiddenページから取得できます。
<EMAIL>と<API_KEY>にAPI認証情報を挿入し、以下の変数に自分の値を代入する必要があります:
accountTag: あなたのCloudflareアカウントID。rayID: 認証リクエストに割り当てられた一意の識別子。datetimeStart: クエリする最も早いイベント時間(2022年9月16日以降)。datetimeEnd: クエリする最も遅いイベント時間。クエリしているログインイベントを含む時間範囲を指定してください。
echo '{ "query": "query accessLoginRequestsAdaptiveGroups($accountTag: string, $rayId: string, $datetimeStart: string, $datetimeEnd: string) { viewer { accounts(filter: {accountTag: $accountTag}) { accessLoginRequestsAdaptiveGroups(limit: 100, filter: {datetime_geq: $datetimeStart, datetime_leq: $datetimeEnd, cfRayId: $rayId}, orderBy: [datetime_ASC]) { dimensions { datetime isSuccessfulLogin hasWarpEnabled hasGatewayEnabled hasExistingJWT approvingPolicyId cfRayId ipAddress userUuid identityProvider country deviceId mtlsStatus mtlsCertSerialId mtlsCommonName serviceTokenId } } } } }", "variables": { "accountTag": "699d98642c564d2e855e9661899b7252", "rayId": "74e4ac510dfdc44f", "datetimeStart": "2022-09-20T14:36:38Z", "datetimeEnd": "2022-09-22T14:36:38Z"}}' | tr -d '\n' | curl --silent \https://api.cloudflare.com/client/v4/graphql \--header "Authorization: Bearer <API_TOKEN>" \--header "Accept: application/json" \--header "Content-Type: application/json" \--data @- | jq .{ "data": { "viewer": { "accounts": [ { "accessLoginRequestsAdaptiveGroups": [ { "dimensions": { "approvingPolicyId": "", "cfRayId": "744927037ce06d68", "country": "US", "datetime": "2022-09-02T20:56:27Z", "deviceId": "", "hasExistingJWT": 0, "hasGatewayEnabled": 0, "hasWarpEnabled": 0, "identityProvider": "nonidentity", "ipAddress": "2a09:bac0:15::814:7b37", "isSuccessfulLogin": 0, "mtlsCertSerialId": "", "mtlsCommonName": "", "mtlsStatus": "NONE", "serviceTokenId": "", "userUuid": "" } } ] } ] } }, "errors": null}クエリ結果をあなたのAccessポリシーと比較することで、ユーザーがブロックされた理由を理解できます。たとえば、アプリケーションが有効なmTLS証明書を必要とする場合、Accessは上記のリクエストをブロックしました。なぜなら、mtlsStatus、mtlsCommonName、およびmtlsCertSerialIdが空だからです。