コードレス コネクタ フレームワーク (CCF) を使用してRestApiPoller データ コネクタを作成するには、この記事をデータ コネクタ用の Microsoft Sentinel REST API の補足資料として使用します。
各データ コネクタは、Microsoft Sentinel データ コネクタの特定の接続を表します。 1 つのデータ コネクタに複数の接続があり、異なるエンドポイントからデータをフェッチします。 この記事でビルドした JSON 構成を使用して、CCF データ コネクタのデプロイ テンプレートを完了できます。
詳細については、「Microsoft Sentinel用のコードレス コネクタを作成する」を参照してください。
データ コネクタの作成または更新
REST API ドキュメントでcreateまたはupdate操作を参照して、最新の安定した API バージョンまたはプレビュー API バージョンを見つけます。create操作とupdate操作の違いは、etag値update必要です。
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"
}
次の認証フローに従います。
passwordに資格情報を送信して JWT トークンを取得します。userNameとpasswordを使用する場合は、IsCredentialsInHeadersを使用して要求に資格情報を配置する場所を決定します。-
IsCredentialsInHeaders: true場合:username:passwordを含む基本認証ヘッダーを送信します。 -
IsCredentialsInHeaders: false場合:POST本文で資格情報を送信します。
-
JwtTokenJsonPathを使用するか、応答ヘッダーからトークンを抽出します。JWT トークンの Authorization ヘッダーは定数であり、常に "Authorization" になります。
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
type |
True | 文字列 | 型。 にする必要があります。 |
userName |
True ( userToken が使用されていない場合) |
オブジェクト |
userName資格情報のキーと値のペア。 ヘッダー要求で userName と password が送信される場合は、 value プロパティをユーザー名で指定します。 本文要求で userName と password が送信される場合は、 Key と Valueを指定します。 |
password |
True ( userToken が使用されていない場合) |
オブジェクト | パスワード資格情報のキーと値のペア。 ヘッダー要求でuserNameとpasswordが送信される場合は、userNameで value プロパティを指定します。 本文要求で userName と password が送信される場合は、 Key と Valueを指定します。 |
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 では、この変数が使用されている場所であれば常に現在の日付と時刻が使用されます。 使用可能な値は定数です。 UnixTimestamp、 UnixTimestampInMills、またはその他の有効な日付と時刻の表現です。 たとえば、 yyyy-MM-dd、 MM/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=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
リモート サーバーに送信されるクエリは、 https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}です。
QueryTimeIntervalAttributeName の例
次の例を考えてみましょう。
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=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.0000000にGET要求を送信します。 タイム スタンプは、 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.0000000にGET要求を送信します。
複雑なクエリの場合は、 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 | 文字列 | 形式が json、 csv、または 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 応答に次のいずれかが含まれていることを意味します。
-
LinkHTTP 応答ヘッダー。 - 応答本文からリンクを取得するための 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": ["$"]
}
}
}