この例では、GraphQL Analytics API を使って、Access のログインイベントのログを取得します。ダッシュボードの Access ログにはない追加データが得られるため、ユーザーが 403 Forbidden エラーを受け取った理由を調べるときに特に役立ちます。
次の API 呼び出しは、1 件の Access ログインイベントのログをリクエストし、指定したフィールドを出力します。認証リクエストは Ray ID で識別します。Ray ID は、ユーザーに表示される 403 Forbidden ページから取得できます。
<CLOUDFLARE_ACCOUNT_TAG>、<API_TOKEN>1 に API 認証情報を入れ、次の変数は自分の値に置き換えてください。
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": "<CLOUDFLARE_ACCOUNT_TAG>",
"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 証明書を要求する場合、上記のリクエストは mtlsStatus、mtlsCommonName、mtlsCertSerialId が空のため、Access によってブロックされています。
-
設定と権限の詳細は、Analytics API トークンを設定する を参照してください。 ↩