Skip to content

RFPD-77178: log ingestion api 2#21

Draft
aommm wants to merge 4 commits into
RFPD-77178-log-ingestion-apifrom
rfpd-77178-log-ingestion-api-2
Draft

RFPD-77178: log ingestion api 2#21
aommm wants to merge 4 commits into
RFPD-77178-log-ingestion-apifrom
rfpd-77178-log-ingestion-api-2

Conversation

@aommm

@aommm aommm commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator
  • Continue with Azure Identity, migrate the v3.0 solution

}
},
"Send_Data_-_Save_Lookup_results_to_LogAnalytics_Custom_Log": {
"Compose_lookup_row": {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did the previous version not need this?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The old version used the azureloganalyticsdatacollector connector which auto-flattened whatever JSON it received into _s/_t/_d columns — no schema, no named fields required.

The new Log Ingestion API is schema-driven: the DCR declares specific columns (risky_user_email, data) and the transformKql extracts them by name. The raw Credential_Lookup_V2 response body has identities, count, next_offset at the top level — neither risky_user_email nor data. So we need Compose to explicitly shape the object with the named fields before POSTing, otherwise both columns would be null.

"name": "transformed_rf_api_credential_dump_creds",
"value": {
"email": "@items('For_Each_-_Make_new_and_known_Credential_dumps_be_comparable')"
"email": "@string(items('For_Each_-_Make_new_and_known_Credential_dumps_be_comparable'))"

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need string?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The credential_dumps items from the RF API are plain email strings (e.g. "user@domain.com"), not objects. When Logic Apps iterates a JSON array of strings, items() has type any.

We wrap each item in {"email": ...} to match the shape returned by the LA dedup query (| project email=email), so the contains() check works correctly.

@string(items(...)) coerces the raw any-typed value to a string scalar — without it Logic Apps may treat the item as a dynamic/object reference rather than a string, which would cause contains() to never match (silent dedup breakage).

@@ -0,0 +1,326 @@
{

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we also add connector tile? similar to alert importer

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I'll add it — modelled on the alert importer tile in azuredeploy-alert-importer.json.

@aommm aommm force-pushed the rfpd-77178-log-ingestion-api-2 branch from 856ac8a to aad7680 Compare June 16, 2026 13:53
aommm added 4 commits June 16, 2026 16:02
- Add readme links to descriptionMarkdown on both tiles
- Add Step 2 (RFI-CustomConnector) to both tiles
- Alert importer: add Step 4 (Analytics Rule), fix permissions text
- v3.0: Step 3 links to readme instead of listing playbooks inline
@aommm aommm force-pushed the rfpd-77178-log-ingestion-api-2 branch from aad7680 to daeed67 Compare June 16, 2026 14:02

### This is a readme for the old version of Recorded Future Identity, for the new version based on Playbook Alerts, see [readme](../readme.md)

> [!IMPORTANT]

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I haven't reviewed this readme and made it Niklas-beautiful yet, it's just AI as of now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant