Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Important
Lakewatch is in Private Preview. To request access, reach out to your Azure Databricks account team.
Lakewatch provides an API connector to ingest WAF logs from Akamai. This article covers prerequisites, configuration instructions, connector schemas, and Lakewatch parser observables.
Prerequisites
The connector requires:
- Serverless Lakeflow Spark Declarative Pipelines turned on in your workspace.
- Unity Catalog, with privileges to create or use a Unity Catalog connection. See Connection permissions.
- An Akamai Control Center administrator must enable SIEM Integration and provision the SIEM user.
- The user associated with the API credentials must have the Manage SIEM role for every group containing a security configuration you want to ingest. See Akamai SIEM Integration.
- SIEM Integration and data collection must be turned on for each security configuration, and the configuration must be active on the production network. See Get started with the SIEM Integration API.
Known limitations
- SCD type 2 is not supported, since Akamai WAF logs are append-only.
- The connector authenticates using long-lived EdgeGrid credentials that default to 2 years. After they expire, create new credentials and update the connection.
- Historical lookback can't exceed the 12 hours Akamai retains WAF logs. See Choose how far back to ingest.
Configure Akamai for ingestion
Configure Akamai to enable authentication from Databricks.
Fetch Web Security Configuration IDs
- Sign in to Akamai Control Center as an Admin.
- Click the menu icon in the top left of the page to open the navigation pane.
- In the navigation pane, click Your Services > Web & Data Center Security > Security Configurations > Web Security.
- Review the list of security configurations. Each configuration has a dropdown. Note the Contract and Group ID under the dropdown. You need these values when you create a user with the MANAGE_SIEM role.
- For each security configuration that you want to ingest logs for:
- Click the version under Last Created, Staging, or Production.
- Go to Advanced Settings > Logging > Data Collection For SIEM integration > Web Security Configuration ID.
- Note the Web Security Configuration ID. You need these values when you create a user with the MANAGE_SIEM role.
Create a user with the MANAGE_SIEM role
- Sign in to Akamai Control Center as an Admin.
- Click the menu icon in the top left of the page to open the navigation pane.
- In the navigation pane, click Your Services > Account Admin > Identity & Access.
- Click Create User.
- Enter the Email and Verify email values.
- Under Assign roles, select MANAGE_SIEM for each of the groups used to define the Web Security Configuration IDs from the previous step.
Create an API client
- Sign in to Akamai Control Center as the user you created in the previous step.
- Click the menu icon in the top left of the page to open the navigation pane.
- In the navigation pane, click Your Services > Account Admin > Identity & Access.
- Click Create API Client > Advanced.
- Under APIs, select Select APIs.
- Click Reset API selection.
- Search for the SIEM API.
- Under Access level, select READ-ONLY, then click Submit.
- Enter a unique Name for the API client, then click Create API Client.
- Copy the client_secret, host, access_token, and client_token values. Akamai shows these credentials only one time. Use them to create a Unity Catalog connection in Databricks.
Tip
When creating a connection through the Lakewatch UI, you need the Host, Client Token, Client Secret, and Access Token gathered above.
Next steps
After completing the configuration above, create a datasource with the Akamai WAF connector in the Lakewatch UI. See API connectors for instructions.
Connector and Lakewatch schemas
The connector ingests the following source table from the default source schema:
| Source table | Akamai data | Built-in Lakewatch parser |
|---|---|---|
akamai_waf_events |
WAF security events from the Akamai SIEM Integration API | akamai_waf |
The connector writes the source table to the datasource's raw destination. The built-in parser writes a separate parsed table named after the parser, unless you set a parsed destination when you configure the datasource.
Lakewatch-managed columns
The connector adds lw_id, a non-null string that Lakewatch uses for stable deduplication and time ordering. It derives lw_id from the event timestamp and _databricks_primary_key. The connector derives:
_databricks_primary_keyfrom a stable hash of the source event.timefromhttpMessage.start, interpreted as Unix epoch seconds. The connector usestimeas the cursor field for incremental ingestion.
The parsed table carries lw_id forward. The parser also assigns the parsed time column and adds:
lw_meta: Standard Lakewatch processing metadata.lw_observables: Values extracted from fields marked as security observables in the parser.
For more information, see Parser reference.
Raw connector table schema
The following schema combines the standard Lakeflow Connect fields with the Lakewatch-only lw_id column. For field definitions, see the Akamai SIEM Integration API.
Schema
| Column | Data type |
|---|---|
lw_id |
STRING |
_databricks_primary_key |
LONG |
time |
TIMESTAMP |
format |
STRING |
type |
STRING |
version |
STRING |
attackData |
STRUCT<appliedAction: STRING, clientIP: STRING, configId: STRING, policyId: STRING, ruleActions: STRING, ruleData: STRING, ruleMessages: STRING, ruleSelectors: STRING, ruleTags: STRING, ruleVersions: STRING, rules: STRING, apiId: STRING, apiKey: STRING, clientReputation: STRING, slowPostAction: STRING, slowPostRate: STRING, decodedRules: ARRAY<STRUCT<rule: STRING, ruleAction: STRING, ruleData: STRING, ruleMessage: STRING, ruleSelector: STRING, ruleTag: STRING, ruleVersion: STRING>>> |
botData |
STRUCT<botScore: STRING, responseSegment: STRING> |
clientData |
STRUCT<telemetryType: STRING, appBundleId: STRING, appVersion: STRING, sdkVersion: STRING> |
custom |
STRING |
geo |
STRUCT<asn: STRING, city: STRING, continent: STRING, country: STRING, regionCode: STRING> |
httpMessage |
STRUCT<bytes: STRING, host: STRING, method: STRING, path: STRING, port: STRING, protocol: STRING, query: STRING, requestHeaders: STRING, requestId: STRING, responseHeaders: STRING, start: STRING, status: STRING, tls: STRING> |
identity |
STRUCT<ja4: STRING, tlsFingerprintV2: STRING, tlsFingerprintV3: STRING> |
userRiskData |
STRUCT<allow: STRING, emailDomain: STRING, general: STRING, originUserId: STRING, risk: STRING, score: STRING, status: STRING, trust: STRING, username: STRING, uuid: STRING> |
Parser observables
The akamai_waf parser writes nested objects as VARIANT and extracts the following fields into lw_observables.
Observables
| Field | Observable |
|---|---|
attackData.clientIP |
ip |
httpMessage.host |
hostname |
httpMessage.requestId |
trace_id |
userRiskData.emailDomain |
domain |
userRiskData.originUserId |
actor_id |
userRiskData.username |
username |
userRiskData.uuid |
actor_id |