リアルタイムイベント監視での非同期 SOQL の使用
リアルタイムイベントでの非同期 SOQL の使用例をいくつか紹介します。
機密の特許情報を含む Patent__c というカスタムオブジェクトを作成したとします。そして、ユーザが API を使用してこのオブジェクトを照会する状況を把握したいと考えます。ApiEvent オブジェクトに次の非同期 SOQL クエリを使用して、最後にいつ、誰が、Patent__c のどの部分にアクセスしたのかを判断します。この WHERE 句は QueriedEntities 項目を使用して、結果を Patent__c オブジェクトの API クエリのみに絞り込みます。
- URI の例
-
1https://yourInstance.salesforce.com/services/data/v48.0/async-queries/ - POST リクエストボディの例
-
1{ 2 "query": "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent 3 WHERE QueriedEntities LIKE '%Patent__c%'", 4 "targetObject": "ApiTarget__c", 5 "targetFieldMap": { 6 "EventDate": "EventDate__c", 7 "EventIdentifier": "EventIdentifier__c", 8 "QueriedEntities": "QueriedEntities__c", 9 "SourceIp": "IPAddress__c", 10 "Username": "User__c", 11 "UserAgent": "UserAgent__c" 12 } 13} - POST レスポンスボディの例
-
1{ 2 "jobId" : "08PB00000066JRfMAM", 3 "message" : "", 4 "operation" : "INSERT", 5 "query" : "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent 6 WHERE QueriedEntities LIKE '%Patent__c%'", 7 "status" : "Complete", 8 "targetExternalIdField" : "", 9 "targetFieldMap" : { 10 "EventDate" : "EventDate__c", 11 "SourceIp" : "IPAddress__c", 12 "EventIdentifier" : "EventIdentifier__c", 13 "QueriedEntities" : "QueriedEntities__c", 14 "Username" : "User__c", 15 "UserAgent" : "UserAgent__c" 16 }, 17 "targetObject" : "ApiTarget__c", 18 "targetValueMap" : { } 19}
監査の目的で繰り返しこの質問をする場合は、cURL スクリプトを使用してクエリを自動化できます。
1curl -H "Content-Type: application/json" -X POST -d
2'{"query": "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent WHERE QueriedEntities LIKE '%Patent__c%'",
3 "targetObject": "ApiTarget__c",
4 "targetFieldMap": {"EventDate": "EventDate__c","EventIdentifier": "EventIdentifier__c","QueriedEntities": "QueriedEntities__c","SourceIp": "IPAddress__c","Username": "User__c","UserAgent": "UserAgent__c"}}'
5 "https://yourInstance.salesforce.com/services/data/v48.0/async-queries/" -H
6 "Authorization: Bearer 00D30000000V88A!ARYAQCZOCeABy29c3dNxRVtv433znH15gLWhLOUv7DVu.
7 uAGFhW9WMtGXCul6q.4xVQymfh4Cjxw4APbazT8bnIfxlRvUjDg"イベント監視のもう 1 つの使用事例は、社会保障番号やメールなどの機密項目にアクセスしたすべてのユーザを特定することです。たとえば、次の非同期 SOQL クエリを使用して、社会保障番号を参照したユーザを特定することができます。
- URI の例
-
1https://yourInstance.salesforce.com/services/data/v48.0/async-queries/ - POST リクエストボディの例
-
1{ 2 "query": "SELECT Query, Username, EventDate, SourceIp FROM ApiEvent 3 WHERE Query LIKE '%SSN__c%'", 4 "targetObject": "QueryEvents__c", 5 "targetFieldMap": { 6 "Query":"QueryString__c", 7 "Username":"User__c", 8 "EventDate":"EventDate__c", 9 "SourceIp" : "IPAddress__c" 10 } 11} - POST レスポンスボディの例
-
1{ 2 "jobId": "08PB000000001RS", 3 "message": "", 4 "query": "SELECT Query, Username, EventDate, SourceIp FROM ApiEvent 5 WHERE Query LIKE '%SSN__c%'", 6 "status": "Complete", 7 "targetFieldMap": {"Query":"QueryString__c", "Username":"User__c", 8 "EventDate":"EventDate__c", "SourceIp" : "IPAddress__c" 9 }, 10 "targetObject": "QueryEvents__c" 11}