コードレス コネクタ フレームワークの RestApiPoller データ コネクタ リファレンス

コードレス コネクタ フレームワーク (CCF) を使用してRestApiPoller データ コネクタを作成するには、この記事をデータ コネクタ用の Microsoft Sentinel REST API の補足資料として使用します。

各データ コネクタは、Microsoft Sentinel データ コネクタの特定の接続を表します。 1 つのデータ コネクタに複数の接続があり、異なるエンドポイントからデータをフェッチします。 この記事でビルドした JSON 構成を使用して、CCF データ コネクタのデプロイ テンプレートを完了できます。

詳細については、「Microsoft Sentinel用のコードレス コネクタを作成する」を参照してください。

データ コネクタの作成または更新

REST API ドキュメントでcreateまたはupdate操作を参照して、最新の安定した API バージョンまたはプレビュー API バージョンを見つけます。create操作とupdate操作の違いは、etagupdate必要です。

PUT メソッド:

https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}

URI パラメーター

最新の API バージョンの詳細については、「 データ コネクタ: URI パラメーターの作成または更新」を参照してください。

名前 説明
dataConnectorId データ コネクタ ID。 要求本文name パラメーターと同じ一意の名前にする必要があります。
resourceGroupName 大文字と小文字を区別しないリソース グループの名前。
subscriptionId ターゲット サブスクリプションの ID。
workspaceName ID ではなくワークスペースの 名前
正規表現パターンは ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$
api-version この操作に使用する API バージョン。

要求本文

RestApiPoller CCF データ コネクタの要求本文には、次の構造があります。

{
   "name": "{{dataConnectorId}}",
   "kind": "RestApiPoller",
   "etag": "",
   "properties": {
        "connectorDefinitionName": "",
        "auth": {},
        "request": {},
        "response": {},
        "paging": "",
        "dcrConfig": ""
   }
}

RestApiPoller

RestApiPoller は、データ ソースのページング、承認、要求/応答ペイロードをカスタマイズするために使用できる API ポーリングツール CCF データ コネクタです。

名前 必須 説明
name True 文字列 URI パラメーターと一致する接続の一意の名前。
kind True 文字列 kind値。 このフィールドは、 RestApiPollerに設定する必要があります。
etag GUID etag値。 新しいコネクタを作成するには、このフィールドを空のままにする必要があります。 更新操作の場合、 etag は既存のコネクタ etag (GUID) と一致する必要があります。
properties.connectorDefinitionName 文字列 データ コネクタの UI 構成を定義する DataConnectorDefinition リソースの名前。 詳細については、「 データ コネクタの定義」を参照してください。
properties.auth True 入れ子になった JSON データをポーリングするための認証プロパティ。 詳細については、 認証構成に関するページを参照してください。
properties.request True 入れ子になった JSON API エンドポイントなど、データをポーリングするための要求ペイロード。 詳細については、「 構成の要求」を参照してください。
properties. response True 入れ子になった JSON API がデータをポーリングするときに返す応答オブジェクトと入れ子になったメッセージ。 詳細については、「 応答の構成」を参照してください。
properties.paging 入れ子になった JSON データをポーリングするときの改ページペイロード。 詳細については、「 ページング構成」を参照してください。
properties.dcrConfig 入れ子になった JSON データがデータ収集規則 (DCR) に送信されるときに必要なパラメーター。 詳細については、 DCR 構成に関するページを参照してください。

認証の構成

CCF では、次の認証の種類がサポートされています。

注:

CCF OAuth2 の実装では、クライアント証明書の資格情報はサポートされていません。

ベスト プラクティスとして、資格情報をハードコーディングするのではなく、認証セクションでパラメーターを使用します。 詳細については、「 機密入力をセキュリティで保護する」を参照してください。

パラメーターも使用するデプロイ テンプレートを作成するには、追加の開始 [を使用して、このセクションのパラメーターをエスケープする必要があります。 この手順により、パラメーターは、コネクタとのユーザー操作に基づいて値を割り当てることができます。 詳細については、「 テンプレート式のエスケープ文字」を参照してください。

UI から資格情報を入力できるようにするには、[ connectorUIConfig ] セクションで目的のパラメーターを instructionsに入力する必要があります。 詳細については、「 Codeless Connector Framework のデータ コネクタ定義リファレンス」を参照してください。

基本認証

フィールド 必須
UserName True 文字列
Password True 文字列

connectorUIconfigで定義されているパラメーターを使用する基本認証の例を次に示します。

"auth": {
    "type": "Basic",
    "UserName": "[[parameters('username')]",
    "Password": "[[parameters('password')]"
}

API キー

フィールド 必須 説明 既定値
ApiKey True 文字列 ユーザー シークレット キー。
ApiKeyName 文字列 ApiKey値を含む URI ヘッダーの名前。 Authorization
ApiKeyIdentifier 文字列 トークンの前に追加する文字列値。 token
IsApiKeyInPostPayload ブール型 ヘッダーの代わりに POST 本文でシークレットを送信するかどうかを決定する値。 false

APIKey 認証の例:

"auth": {
    "type": "APIKey",
    "ApiKey": "[[parameters('apikey')]",
    "ApiKeyName": "X-MyApp-Auth-Header",
    "ApiKeyIdentifier": "Bearer"
}

この例の結果は、 X-MyApp-Auth-Header: Bearer apikey というヘッダーで送信されたユーザー入力から定義されたシークレットです。

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
}

この例では、既定値を使用し、結果として Authorization: token 123123123 というヘッダーが生成されます。

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
    "ApiKeyName": ""
}

ApiKeyNameは明示的に "" に設定されているため、結果は次のヘッダーになります:Authorization: 123123123

OAuth2

Codeless Connector Framework では、OAuth 2.0 承認コードの付与とクライアント資格情報がサポートされています。 承認コード許可の種類は、機密クライアントとパブリック クライアントがアクセス トークンの承認コードを交換するために使用されます。

ユーザーがリダイレクト URL を使用してクライアントに戻ると、アプリケーションは URL から承認コードを取得し、それを使用してアクセス トークンを要求します。

フィールド 必須 説明
ClientId 正解。 文字列 クライアント ID。
ClientSecret 正解。 文字列 クライアント シークレット。
AuthorizationCode True の場合、 grantType 値が authorization_codeされます。 文字列 許可の種類が authorization_code場合、このフィールド値は認証サーバーから返された承認コードです。
Scope True の場合は、 authorization_code 許可の種類です。
client_credentials許可の種類には省略可能です。
文字列 ユーザーの同意のためのスコープのスペース区切りの一覧。 詳細については、「 OAuth2 のスコープとアクセス許可」を参照してください。
RedirectUri True の場合、 grantType 値が authorization_codeされます。 文字列 リダイレクトの URL は https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insightsする必要があります。
GrantType 正解。 文字列 許可の種類。 または authorization_code になります。client_credentials
TokenEndpoint 正解。 文字列 authorization_code 許可で有効なトークンを使用してコードを交換する URL、または client_credentials 許可で有効なトークンを持つクライアント ID とシークレット。
TokenEndpointHeaders オブジェクト トークン サーバーにカスタム ヘッダーを送信するオプションのキー/値オブジェクト。
TokenEndpointQueryParameters オブジェクト トークン サーバーにカスタム クエリ パラメーターを送信するオプションのキー/値オブジェクト。
AuthorizationEndpoint 正解。 文字列 authorization_code フローのユーザーの同意の URL。
AuthorizationEndpointHeaders オブジェクト カスタム ヘッダーを認証サーバーに送信するオプションのキー/値オブジェクト。
AuthorizationEndpointQueryParameters オブジェクト OAuth2 承認コード フロー要求で使用される省略可能なキーと値のペア。

認証コード フローを使用して、ユーザーのアクセス許可に代わってデータをフェッチできます。 クライアント資格情報を使用して、アプリケーションのアクセス許可を持つデータをフェッチできます。 データ サーバーは、アプリケーションへのアクセスを許可します。 クライアント資格情報フローにはユーザーがないため、承認エンドポイントは必要なく、トークン エンドポイントのみが必要です。

OAuth2 authorization_code 許可の種類の例を次に示します。

"auth": {
    "type": "OAuth2",
    "ClientId": "[[parameters('appId')]",
    "ClientSecret": "[[parameters('appSecret')]",
    "tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
    "authorizationEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/authorize",
    "authorizationEndpointHeaders": {},
    "authorizationEndpointQueryParameters": {
        "prompt": "consent"
    },
    "redirectUri": "https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights",
    "tokenEndpointHeaders": {
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {},
    "scope": "openid offline_access some_scope",
    "grantType": "authorization_code"
}

OAuth2 client_credentials 許可の種類の例を次に示します。

"auth": {
    "type": "OAuth2",
    "ClientId": "[[parameters('appId')]",
    "ClientSecret": "[[parameters('appSecret')]",
    "tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
    "tokenEndpointHeaders": {
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {},
    "scope": "openid offline_access some_scope",
    "grantType": "client_credentials"
}

Jwt

JSON Web トークン (JWT) 認証では、ユーザー名とパスワードの資格情報を使用してトークンを取得し、API 要求に使用できます。

基本的な例
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "username",
        "value": "[[parameters('UserName')]"
    },
    "password": {
        "key": "password", 
        "value": "[[parameters('Password')]"
    },
    "TokenEndpoint": "https://token_endpoint.contoso.com",
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token"
}
POST 本文の資格情報 (既定値)
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "username",
        "value": "[[parameters('UserName')]"
    },
    "password": {
        "key": "password",
        "value": "[[parameters('Password')]"
    },
    "TokenEndpoint": "https://api.example.com/token",
    "Headers": {
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
    "IsCredentialsInHeaders": false,
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token"
}
ヘッダー内の資格情報 (基本認証)
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "client_id",
        "value": "[[parameters('ClientId')]"
    },
    "password": {
        "key": "client_secret",
        "value": "[[parameters('ClientSecret')]"
    },
    "TokenEndpoint": "https://api.example.com/oauth/token",
    "Headers": {
        "Accept": "application/json"
    },
    "IsCredentialsInHeaders": true,
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token",
    "RequestTimeoutInSeconds": 30
}
ヘッダー内の資格情報 (ユーザー トークン)
"auth": {
    "type": "JwtToken",
    "UserToken": "[[parameters('userToken')]",
    "UserTokenPrepend": "Bearer",
    "TokenEndpoint": "https://api.example.com/oauth/token",
    "Headers": {
        "Accept": "application/json"
    },
    "TokenEndpointHttpMethod": "GET",
    "NoAccessTokenPrepend": true,
    "JwtTokenJsonPath": "$.systemToken"
}

次の認証フローに従います。

  1. passwordに資格情報を送信して JWT トークンを取得します。userNamepasswordを使用する場合は、IsCredentialsInHeadersを使用して要求に資格情報を配置する場所を決定します。

    • IsCredentialsInHeaders: true場合: username:passwordを含む基本認証ヘッダーを送信します。
    • IsCredentialsInHeaders: false場合: POST本文で資格情報を送信します。
  2. JwtTokenJsonPathを使用するか、応答ヘッダーからトークンを抽出します。

  3. JWT トークンの Authorization ヘッダーは定数であり、常に "Authorization" になります。

フィールド 必須 説明
type True 文字列 型。 にする必要があります。
userName True ( userToken が使用されていない場合) オブジェクト userName資格情報のキーと値のペア。 ヘッダー要求で userNamepassword が送信される場合は、 value プロパティをユーザー名で指定します。 本文要求で userNamepassword が送信される場合は、 KeyValueを指定します。
password True ( userToken が使用されていない場合) オブジェクト パスワード資格情報のキーと値のペア。 ヘッダー要求でuserNamepasswordが送信される場合は、userNamevalue プロパティを指定します。 本文要求で userNamepassword が送信される場合は、 KeyValueを指定します。
userToken True ( userName が使用されていない場合) 文字列 認証用のシステム トークンを取得するためにクライアントによって生成されたユーザー トークン。
UserTokenPrepend False 文字列 トークンの前にテキストを付加するかどうかを示す値。 既定値: Bearer
NoAccessTokenPrepend False ブール型 トークンが何も先頭に付けてはいけないことを示すアクセス フラグ。
TokenEndpointHttpMethod False 文字列 トークン エンドポイントの HTTP メソッド。 GetまたはPostできます。 既定値は Post です。
TokenEndpoint True 文字列 JWT トークンの取得に使用される URL エンドポイント。
IsCredentialsInHeaders ブール型 基本認証ヘッダー (true) と POST 本文 (false) として資格情報を送信するかどうかを示す値は、 userTokenを使用するときに無視されます。 既定値は false です。
IsJsonRequest ブール型 JSON (ヘッダー Content-Type = application/json) とフォームエンコード (ヘッダー Content-Type = application/x-www-form-urlencoded) で要求を送信するかどうかを示す値。 既定値は false です。
JwtTokenJsonPath 文字列 応答からトークンを抽出するために使用する JSONPath 値を示す値。 例: $.access_token
JwtTokenInResponseHeader ブール型 応答ヘッダーと本文からトークンを抽出するかどうかを示す値。 既定値は false です。
JwtTokenHeaderName. 文字列 トークンが応答ヘッダーにある場合のヘッダー名を示す値。 既定値は Authorization です。
JwtTokenIdentifier 文字列 プレフィックス付きトークン文字列から JWT を抽出するために使用される識別子。
QueryParameters オブジェクト トークン エンドポイントに要求を送信するときに含めるカスタム クエリ パラメーター。
Headers オブジェクト トークン エンドポイントに要求を送信するときに含めるカスタム ヘッダー。
RequestTimeoutInSeconds 整数 要求タイムアウト (秒単位)。 既定値は 100 で、最大値は 180 です。

注:

制限事項

  • トークンの取得にユーザー名とパスワードの認証が必要
  • API キーベースのトークン要求をサポートしていません
  • カスタム ヘッダー認証 (ユーザー名とパスワードなし) はサポートされていません

要求の構成

要求セクションでは、CCF データ コネクタがデータ ソースに要求を送信する方法 (たとえば、API エンドポイントとそのエンドポイントをポーリングする頻度) を定義します。

フィールド 必須 説明
ApiEndpoint 正解。 文字列 このフィールドは、リモート サーバーの URL を決定し、データをプルするエンドポイントを定義します。
RateLimitQPS 整数 このフィールドは、最初の要求に対して 1 秒で許可される呼び出しまたはクエリの数を定義します。 ページ分割された要求には適用されません。 改ページを調整するには、 PaginatedCallsPerSecondも設定します。
PaginatedCallsPerSecond Double (0...1000) このフィールドは、RESTful API へのページ分割された要求に対して許可される 1 秒あたりの呼び出し数を定義します。 ページ分割された各 API 呼び出しの間に、 (1000 / paginatedCallsPerSecond) ミリ秒の遅延が発生します。 この調整はページネーション要求にのみ適用され、初期要求レートを制御する RateLimitQPSとは別です。 通常、これはすべての要求でデータ ソースのレート制限を尊重するために、 RateLimitQPS と同じ値を設定します。 0 値は、改ページ調整が適用されていないことを意味します。
RateLimitConfig オブジェクト このフィールドは、RESTful API のレート制限構成を定義します。 詳細については、RateLimitConfig参照してください
QueryWindowInMin 整数 このフィールドは、使用可能なクエリ ウィンドウを分単位で定義します。 最小値は 1 分です。 既定値は 5 分です。
HttpMethod 文字列 このフィールドは、api メソッドを定義します: GET(既定値) または POST
QueryTimeFormat 文字列 このフィールドは、エンドポイント (リモート サーバー) で想定される日付と時刻の形式を定義します。 CCF では、この変数が使用されている場所であれば常に現在の日付と時刻が使用されます。 使用可能な値は定数です。 UnixTimestampUnixTimestampInMills、またはその他の有効な日付と時刻の表現です。 たとえば、 yyyy-MM-ddMM/dd/yyyy HH:mm:ss
既定値は ISO 8601 UTC です。
RetryCount Integer (1...6) このフィールドは、再試行を6する1の値がエラーからの回復を許可することを定義します。 既定値は 3 です。
TimeoutInSeconds 整数 (1...180) このフィールドは、要求タイムアウトを秒単位で定義します。 既定値は 20 です。
IsPostPayloadJson ブール型 このフィールドは、 POST ペイロードが JSON 形式であるかどうかを決定します。 既定値は false です。
Headers オブジェクト このフィールドには、要求ヘッダーを定義するキーと値のペアが含まれます。
QueryParameters オブジェクト このフィールドには、要求クエリ パラメーターを定義するキーと値のペアが含まれます。
StartTimeAttributeName true EndTimeAttributeName 値が設定されている場合。 文字列 このフィールドは、クエリ開始時刻のクエリ パラメーター名を定義します。 詳細については、StartTimeAttributeName参照してください
EndTimeAttributeName true StartTimeAttributeName が設定されている場合。 文字列 このフィールドは、クエリの終了時刻のクエリ パラメーター名を定義します。
QueryTimeIntervalAttributeName 文字列 このフィールドは、エンドポイントが時間枠でデータのクエリを実行するための特殊な形式を必要とする場合に使用されます。 このプロパティは、 QueryTimeIntervalPrepend パラメーターと QueryTimeIntervalDelimiter パラメーターと共に使用します。 詳細については、QueryTimeIntervalAttributeName参照してください
QueryTimeIntervalPrepend true QueryTimeIntervalAttributeName が設定されている場合。 文字列 参照 QueryTimeIntervalAttributeName
QueryTimeIntervalDelimiter true QueryTimeIntervalAttributeName が設定されている場合。 文字列 参照 QueryTimeIntervalAttributeName
QueryParametersTemplate 文字列 このフィールドは、高度なシナリオでパラメーターを渡すときに使用するクエリ テンプレートを参照します。

例: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}"
InitialCheckpointTimeUtc DateTime (UTC) 格納されているチェックポイントが存在しない場合の最初のポーリングのクエリ開始時刻を指定します。 最初のポーリングが成功した後にチェックポイントが永続化されると、この値は無視されます。 この設定は、コネクタの要求構成で、対応する終了時刻パラメーターを指定せずに開始時刻クエリ パラメーター ( startTimeAttributeName{_QueryWindowStartTime} 置換トークンなど) が定義されている場合にのみ有効になります。 改ページカーソルまたはトークンのみに依存するコネクタには影響しません。 形式: ISO 8601 UTC datetime (たとえば、 2024-01-15T00:00:00Z)。

API に複雑なパラメーターが必要な場合は、 queryParameters または queryParametersTemplateを使用します。 これらのコマンドには、いくつかの組み込み変数が含まれています。

組み込み変数 で使用する場合 queryParameters で使用する場合 queryParametersTemplate
_QueryWindowStartTime はい はい
_QueryWindowEndTime はい はい
_APIKeyName 不要 はい
_APIKey 不要 はい

StartTimeAttributeName の例

次の例を考えてみましょう。

  • StartTimeAttributeName = from
  • EndTimeAttributeName = until
  • ApiEndpoint = https://www.example.com

リモート サーバーに送信されるクエリは、 https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}です。

QueryTimeIntervalAttributeName の例

次の例を考えてみましょう。

  • QueryTimeIntervalAttributeName = interval
  • QueryTimeIntervalPrepend = time:
  • QueryTimeIntervalDelimiter = ..
  • ApiEndpoint = https://www.example.com

リモート サーバーに送信されるクエリは、 https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}です。

RateLimitConfig の例

次の例を考えてみましょう。

ApiEndpoint = https://www.example.com.

"rateLimitConfig": {
  "evaluation": {
    "checkMode": "OnlyWhen429"
  },
  "extraction": {
    "source": "CustomHeaders",
    "headers": {
      "limit": {
        "name": "X-RateLimit-Limit",
        "format": "Integer"
      },
      "remaining": {
        "name": "X-RateLimit-Remaining",
        "format": "Integer"
      },
      "reset": {
        "name": "X-RateLimit-RetryAfter",
        "format": "UnixTimeSeconds"
      }
    }
  },
  "retryStrategy": {
    "useResetOrRetryAfterHeaders": true
  }
}

応答にレート制限ヘッダーが含まれている場合、コネクタはこの情報を使用して要求レートを調整できます。

データ ソース API として Microsoft Graph を使用する要求の例

次の使用例は、フィルター クエリ パラメーターを使用してメッセージを照会します。 詳細については、「Microsoft Graph API クエリ パラメーター」を参照してください。

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
    "User-Agent": "Example-app-agent"
  },
  "QueryTimeIntervalAttributeName": "filter",
  "QueryTimeIntervalPrepend": "receivedDateTime gt ",
  "QueryTimeIntervalDelimiter": " and receivedDateTime lt "
}

前の例では、https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000GET要求を送信します。 タイム スタンプは、 queryWindowInMin 時間ごとに更新されます。

この例では、同じ結果が得られます。

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "queryParameters": {
    "filter": "receivedDateTime gt {_QueryWindowStartTime} and receivedDateTime lt {_QueryWindowEndTime}"
  }
}

データ ソースで 2 つのクエリ パラメーター (開始時刻用と終了時刻用) が必要な場合には、別のオプションがあります。

例:

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/calendarView",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "StartTimeAttributeName": "startDateTime",
  "EndTimeAttributeName": "endDateTime",
}

このオプションは、https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000GET要求を送信します。

複雑なクエリの場合は、 QueryParametersTemplateを使用します。 次の例では、本文にパラメーターを含む POST 要求を送信します。

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "POST",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "isPostPayloadJson": true,
  "queryParametersTemplate": "{\"query":"TableName | where createdTimestamp between (datetime({_QueryWindowStartTime}) .. datetime({_QueryWindowEndTime}))\"}"
}

応答構成

次のパラメーターを使用して、データ コネクタが応答を処理する方法を定義します。

フィールド 必須 説明
EventsJsonPaths True 文字列の一覧 応答 JSON 内のメッセージへのパスを定義します。 JSON パス式は、JSON 構造体内の要素または要素のセットへのパスを指定します。
SuccessStatusJsonPath 文字列 応答 JSON の成功メッセージへのパスを定義します。 このパラメーターを定義するときは、 SuccessStatusValue パラメーターも定義する必要があります。
SuccessStatusValue 文字列 応答 JSON の成功メッセージ値へのパスを定義します。
IsGzipCompressed ブール型 応答が GZIP ファイルに圧縮されているかどうかを判断します。
format True 文字列 形式が jsoncsv、または xmlかどうかを決定します。
CompressionAlgo 文字列 multi-gzipまたはdeflateの圧縮アルゴリズムを定義します。 GZIP 圧縮アルゴリズムの場合は、このパラメーターの値を設定するのではなく、TrueするようにIsGzipCompressedを構成します。
CsvDelimiter 文字列 応答形式が CSV で、 ","の既定の CSV 区切り記号を変更する場合の参照。
HasCsvBoundary ブール型 CSV データに境界があるかどうかを示します。
HasCsvHeader ブール型 CSV データにヘッダーがあるかどうかを示します。 既定値は True です。
CsvEscape 文字列 フィールド境界のエスケープ文字を定義します。 既定値は "

たとえば、ヘッダーが id,name,avg された CSV と、 1,"my name",5.5 のようなスペースを含むデータ行には、 " フィールド境界が必要です。
ConvertChildPropertiesToArray ブール型 各プロパティにデータが含まれるイベントのリストではなく、リモート サーバーがオブジェクトを返す特殊なケースを参照します。

注:

CSV 形式の種類は、 RFC4180 仕様によって解析されます。

応答構成の例

JSON 形式のサーバー応答が必要です。 応答には、プロパティ に要求されたデータがあります。 応答プロパティの 状態 は、値が success場合にのみデータを取り込むよう示します。

"response": {
  "EventsJsonPaths ": ["$.value"],
  "format": "json",
  "SuccessStatusJsonPath": "$.status",
  "SuccessStatusValue": "success",
  "IsGzipCompressed": true
 }

この例で想定される応答は、ヘッダーのない CSV の準備を行います。

"response": {
  "EventsJsonPaths ": ["$"],
  "format": "csv",
  "HasCsvHeader": false
 }

ページング構成

データ ソースが応答ペイロード全体を一度に送信できない場合、CCF データ コネクタは、応答 ページでデータの一部を受信する方法を認識する必要があります。 選択するページングの種類は次のとおりです。

ページングの種類 意思決定要因
API 応答には、次のページと前のページへのリンクがありますか?
API 応答には、次のページと前のページのトークンまたはカーソルがありますか?
API 応答は、ページング時にスキップするオブジェクトの数のパラメーターをサポートしていますか?
API 応答は、返されるオブジェクトの数のパラメーターをサポートしていますか?

LinkHeader または PersistentLinkHeader を構成する

最も一般的なページングの種類は、サーバー データ ソース API が次のページと前のページのデータに URL を提供する場合です。 リンク ヘッダーの仕様の詳細については、「RFC 5988」を参照してください。

LinkHeader ページングは、API 応答に次のいずれかが含まれていることを意味します。

  • Link HTTP 応答ヘッダー。
  • 応答本文からリンクを取得するための JSON パス。

PersistentLinkHeader-type ページングには、リンク ヘッダーがバックエンド ストレージに保持される以外は、 LinkHeaderと同じプロパティがあります。 このオプションを使用すると、クエリ ウィンドウ間のページング リンクが有効になります。

たとえば、一部の API ではクエリの開始時刻や終了時刻がサポートされていません。 代わりに、サーバー側カーソルをサポート します。 永続的なページの種類を使用して、サーバー側 カーソルを記憶できます。 詳細については、「 カーソルとは」を参照してください。

注:

サーバー側カーソルでの競合状態を回避するために、PersistentLinkHeaderで実行できるコネクタのクエリは 1 つだけです。 この問題は、待機時間に影響する可能性があります。

フィールド 必須 説明
LinkHeaderTokenJsonPath False 文字列 応答本文で値を取得する場所を示すには、このプロパティを使用します。

たとえば、データ ソースが次の JSON を返す場合: { nextPage: "foo", value: [{data}]}LinkHeaderTokenJsonPath 値は $.nextPage
PageSize False 整数 このプロパティを使用して、ページあたりのイベント数を決定します。
PageSizeParameterName False 文字列 このクエリ パラメーター名を使用して、ページ サイズを示します。
PagingInfoPlacement False 文字列 このプロパティを使用して、ページング情報の設定方法を決定します。 QueryStringまたはRequestBodyを受け入れます。
PagingQueryParamOnly False ブール型 クエリ パラメーターを指定するには、このプロパティを使用します。 true に設定すると、ページング クエリ パラメーターを除く他のすべてのクエリ パラメーターが省略されます。

次に、いくつかの例を示します:

"paging": {
  "pagingType": "LinkHeader",
  "linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
 "pagingType" : "PersistentLinkHeader", 
 "pageSizeParameterName" : "limit", 
 "pageSize" : 500 
}

NextPageUrl の構成

NextPageUrl型ページングは、API 応答が応答本文に LinkHeaderのような複雑なリンクを含むが、URL はヘッダーではなく応答本文に含まれていることを意味します。

フィールド 必須 説明
PageSize False 整数 ページあたりのイベント数。
PageSizeParameterName False 文字列 ページ サイズのクエリ パラメーター名。
NextPageUrl False 文字列 コネクタが Coralogix API 用の場合にのみ使用されるフィールド。
NextPageUrlQueryParameters False オブジェクト 次のページの各要求にカスタム クエリ パラメーターを追加するキーと値のペア。
NextPageParaName False 文字列 要求内の次のページ名。
HasNextFlagJsonPath False 文字列 HasNextPage フラグ属性へのパス。
NextPageRequestHeader False 文字列 要求の次のページ ヘッダー名。
NextPageUrlQueryParametersTemplate False 文字列 コネクタが Coralogix API 用の場合にのみ使用されるフィールド。
PagingInfoPlacement False 文字列 ページング情報の設定方法を決定するフィールド。 QueryStringまたはRequestBodyを受け入れます。
PagingQueryParamOnly False ブール型 クエリ パラメーターを決定するフィールド。 true に設定すると、ページング クエリ パラメーターを除く他のすべてのクエリ パラメーターが省略されます。

例:

"paging": {
 "pagingType" : "NextPageUrl", 
  "nextPageTokenJsonPath" : "$.data.repository.pageInfo.endCursor", 
  "hasNextFlagJsonPath" : "$.data.repository.pageInfo.hasNextPage", 
  "nextPageUrl" : "https://api.github.com/graphql", 
  "nextPageUrlQueryParametersTemplate" : "{'query':'query{repository(owner:\"xyz\")}" 
}

NextPageToken または PersistentToken を構成する

NextPageToken-type 改ページでは、現在のページの状態を表すトークン (ハッシュまたはカーソル) が使用されます。 トークンは API 応答に含まれ、クライアントは次のページをフェッチするためにそれを次の要求に追加します。 この方法は、サーバーが要求間で正確な状態を維持する必要がある場合によく使用されます。

PersistentToken pagination では、サーバー側を永続化するトークンが使用されます。 サーバーは、クライアントが取得した最後のトークンを記憶し、後続の要求で次のトークンを提供します。 クライアントは、後で新しい要求を行った場合でも、中断した場所を続行します。

フィールド 必須 説明
PageSize False 整数 ページあたりのイベント数。
PageSizeParameterName False 文字列 ページ サイズのクエリ パラメーター名。
NextPageTokenJsonPath False 文字列 応答本文の次のページ トークンの JSON パス。
NextPageTokenResponseHeader False 文字列 NextPageTokenJsonPathが空の場合は、次のページにこのヘッダー名のトークンを使用することを指定するフィールド。
NextPageParaName False 文字列 要求の次のページ名を決定するフィールド。
HasNextFlagJsonPath False 文字列 応答にさらにページが残っているかどうかを判断するときに、 HasNextPage フラグ属性へのパスを定義するフィールド。
NextPageRequestHeader False 文字列 要求の次のページ ヘッダー名を決定するフィールド。
PagingInfoPlacement False 文字列 ページング情報の設定方法を決定するフィールド。 QueryStringまたはRequestBodyを受け入れます。
PagingQueryParamOnly False ブール型 クエリ パラメーターを決定するフィールド。 true に設定すると、ページング クエリ パラメーターを除く他のすべてのクエリ パラメーターが省略されます。

例:

"paging": {
 "pagingType" : "NextPageToken", 
 "nextPageRequestHeader" : "ETag", 
 "nextPageTokenResponseHeader" : "ETag" 
}
"paging": {
 "pagingType" : "PersistentToken", 
    "nextPageParaName" : "gta", 
    "nextPageTokenJsonPath" : "$.alerts[-1:]._id" 
}

オフセットの構成

Offset-type pagination は、スキップするページ数と、要求内のページごとに取得するイベントの数の制限を指定します。 クライアントは、データ セットから特定の範囲の項目をフェッチします。

フィールド 必須 説明
PageSize False 整数 ページあたりのイベント数。
PageSizeParameterName False 文字列 ページ サイズのクエリ パラメーター名。
OffsetParaName False 文字列 次の要求クエリ パラメーター名。 CCF は、各要求 (取り込まれたすべてのイベント + 1) のオフセット値を計算します。
PagingInfoPlacement False 文字列 ページング情報の設定方法を決定するフィールド。 QueryStringまたはRequestBodyを受け入れます。
PagingQueryParamOnly False ブール型 クエリ パラメーターを決定するフィールド。 true に設定すると、ページング クエリ パラメーターを除く他のすべてのクエリ パラメーターが省略されます。

例:

"paging": {
  "pagingType": "Offset", 
  "offsetParaName": "offset",
  "pageSize": 50,
  "pagingQueryParamOnly": true,
  "pagingInfoPlacement": "QueryString"
}

CountBasedPaging の構成

CountBasedPaging-type 改ページ分割を使用すると、クライアントは応答で返す項目の数を指定できます。 この機能は、応答ペイロードの一部として count パラメーターに基づく改ページをサポートする API に役立ちます。

フィールド 必須 説明
pageNumberParaName True 文字列 HTTP 要求のページ番号のパラメーター名。
PageSize False 整数 ページあたりのイベント数。
ZeroBasedIndexing False ブール型 カウントが 0 から始まることを示すフラグ。
HasNextFlagJsonPath False 文字列 その他のページがあることを示す HTTP 応答ペイロード内のフラグの JSON パス。
TotalResultsJsonPath False 文字列 HTTP 応答ペイロードの結果の合計数の JSON パス。
PageNumberJsonPath False 文字列 HTTP 応答ペイロード内のページ番号の JSON パス。 totalResultsJsonPathが指定されている場合は必須です。
PageCountJsonPath False 文字列 HTTP 応答ペイロード内のページ数の JSON パス。 totalResultsJsonPathが指定されている場合は必須です。
PagingInfoPlacement False 文字列 ページング情報の設定方法を決定するフィールド。 QueryStringまたはRequestBodyを受け入れます。
PagingQueryParamOnly False ブール型 クエリ パラメーターを決定するフィールド。 true に設定すると、ページング クエリ パラメーターを除く他のすべてのクエリ パラメーターが省略されます。

例:

"paging": {
 "pagingType" : "CountBasedPaging", 
 "pageNumberParaName" : "page", 
 "pageSize" : 10, 
 "zeroBasedIndexing" : true, 
 "hasNextFlagJsonPath" : "$.hasNext", 
 "totalResultsJsonPath" : "$.totalResults", 
 "pageNumberJsonPath" : "$.pageNumber", 
 "pageCountJsonPath" : "$.pageCount"
}

DCR 構成

フィールド 必須 説明
DataCollectionEndpoint True 文字列 データ収集エンドポイント (DCE)。 例: https://example.ingest.monitor.azure.com
DataCollectionRuleImmutableId True 文字列 DCR 不変 ID。 これを見つけるには、DCR 作成応答を表示するか 、DCR API を使用します。
StreamName True 文字列 この値は、DCR で定義されている streamDeclaration です。 プレフィックスは、 Custom-で始まる必要があります。

CCF データ コネクタの例

CCF データ コネクタ JSON のすべてのコンポーネントの例を次に示します。

{
   "kind": "RestApiPoller",
   "properties": {
      "connectorDefinitionName": "ConnectorDefinitionExample",
      "dcrConfig": {
           "streamName": "Custom-ExampleConnectorInput",
           "dataCollectionEndpoint": "https://example-dce-sbsr.location.ingest.monitor.azure.com",
           "dataCollectionRuleImmutableId": "dcr-32_character_hexadecimal_id"
            },
      "dataType": "ExampleLogs",
      "auth": {
         "type": "Basic",
         "password": "[[parameters('username')]",
         "userName": "[[parameters('password')]"
      },
      "request": {
         "apiEndpoint": "https://rest.contoso.com/example",
         "rateLimitQPS": 10,
         "rateLimitConfig": {
            "evaluation": {
              "checkMode": "OnlyWhen429"
            },
            "extraction": {
              "source": "CustomHeaders",
              "headers": {
                "limit": {
                  "name": "X-RateLimit-Limit",
                  "format": "Integer"
                },
                "remaining": {
                  "name": "X-RateLimit-Remaining",
                  "format": "Integer"
                },
                "reset": {
                  "name": "X-RateLimit-RetryAfter",
                  "format": "UnixTimeSeconds"
                }
              }
            },
            "retryStrategy": {
              "useResetOrRetryAfterHeaders": true
            }
         },
         "queryWindowInMin": 5,
         "httpMethod": "POST",
         "queryTimeFormat": "UnixTimestamp",
         "startTimeAttributeName": "t0",
         "endTimeAttributeName": "t1",
         "retryCount": 3,
         "timeoutInSeconds": 60,
         "headers": {
            "Accept": "application/json",
            "User-Agent": "Example-app-agent"
         } 
      },
      "paging": {
         "pagingType": "LinkHeader",
         "pagingInfoPlacement": "RequestBody",
         "pagingQueryParamOnly": true
      },
      "response": {
         "eventsJsonPaths": ["$"]
      }
   }
}