Documentation
¶
Index ¶
- Constants
- type Attributes
- type AzureActivityLogBatch
- type AzureActivityLogEvent
- type AzureAuthorization
- type CdrAlert
- type CdrAlertBatch
- type CloudMetadata
- type CloudProvider
- type CloudService
- type CloudTrailEvent
- type CustomerDetails
- type EventData
- type OnBehalfOf
- type Resource
- type SessionContext
- type SessionIssuer
- type TLSDetails
- type UserIdentity
Constants ¶
const ( CdrEventAccountIDJsonPath = "cdrevent.eventData.awsCloudTrail.userIdentity.accountId" CdrEventOrgIDJsonPath = "cdrevent.eventData.awsCloudTrail.userIdentity.orgId" )
const ( // CdrEventAzureSubscriptionIDJsonPath is the JSON path to the subscription ID // (the Azure equivalent of the AWS account ID) on an Azure Activity Log event. CdrEventAzureSubscriptionIDJsonPath = "cdrevent.eventData.azureActivityLog.subscriptionId" // CdrEventAzureTenantIDJsonPath is the JSON path to the tenant ID // (the Azure equivalent of the AWS org ID) on an Azure Activity Log event. CdrEventAzureTenantIDJsonPath = "cdrevent.eventData.azureActivityLog.tenantId" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Attributes ¶
type AzureActivityLogBatch ¶ added in v0.0.737
type AzureActivityLogBatch struct {
Records []AzureActivityLogEvent `json:"records"`
}
AzureActivityLogBatch is the envelope Azure Monitor delivers to Event Hub: one Event Hub message carries many Activity Log records. The in-account collector unwraps this and embeds each AzureActivityLogEvent into a CdrAlert's EventData.
type AzureActivityLogEvent ¶ added in v0.0.737
type AzureActivityLogEvent struct {
Time time.Time `json:"time"`
ResourceID string `json:"resourceId,omitempty"`
OperationName string `json:"operationName,omitempty"`
Category string `json:"category,omitempty"`
ResultType string `json:"resultType,omitempty"`
ResultSignature string `json:"resultSignature,omitempty"`
CorrelationID string `json:"correlationId,omitempty"`
CallerIPAddress string `json:"callerIpAddress,omitempty"`
// Caller is the identity that performed the operation (UPN or object ID).
Caller string `json:"caller,omitempty"`
Level string `json:"level,omitempty"`
// Channels is the Activity Log channel (e.g. "Operation").
Channels string `json:"channels,omitempty"`
// SubscriptionID / TenantID / ResourceGroupName are the account identifiers
// (Azure's equivalents of the AWS accountId/orgId). Present on the
// management/REST shape; on the Event Hub shape SubscriptionID may need to be
// derived from ResourceID.
SubscriptionID string `json:"subscriptionId,omitempty"`
TenantID string `json:"tenantId,omitempty"`
ResourceGroupName string `json:"resourceGroupName,omitempty"`
// Authorization is the RBAC context of the operation.
Authorization *AzureAuthorization `json:"authorization,omitempty"`
// Claims is the caller's token claims (objectId, appid, ipaddr, tenantid, ...).
Claims map[string]string `json:"claims,omitempty"`
// Properties is the operation-specific bag (eventCategory, entity, message,
// hierarchy, statusCode, responseBody, ...); shape varies by operation.
Properties map[string]interface{} `json:"properties,omitempty"`
}
AzureActivityLogEvent is a single Azure Activity Log record — the control-plane audit event that is the Azure equivalent of an AWS CloudTrail management event (see CloudTrailEvent in aws.go).
The field set below covers the common Activity Log fields observed in the POC. NOTE: the exact shape differs slightly between the two delivery paths — the Event Hub stream vs. the Azure Monitor REST API (e.g. some callers nest authorization/claims under an "identity" object, and the Event Hub body adds wrapper fields). Reconcile/extend against real samples of both; the marshal/unmarshal round-trip test is the guard (see the POC FINDINGS.md for a captured sample).
type AzureAuthorization ¶ added in v0.0.737
type AzureAuthorization struct {
Scope string `json:"scope,omitempty"`
Action string `json:"action,omitempty"`
Evidence map[string]interface{} `json:"evidence,omitempty"`
}
AzureAuthorization is the RBAC authorization context of an Activity Log operation.
type CdrAlert ¶
type CdrAlert struct {
// CloudMetadata is the metadata of the cloud
CloudMetadata `json:"cloudMetadata,omitempty"`
// EventData is the event data
EventData `json:"eventData,omitempty"`
// RuleName is the name of the rule
RuleName string `json:"ruleName,omitempty"`
// RuleID is the unique identifier of the rule
RuleID string `json:"ruleID,omitempty"`
// Description is the description of the rule
Description string `json:"description,omitempty"`
// Priority is the severity of the rule
Priority string `json:"priority,omitempty"`
// Tags is the tags of the rule
Tags []string `json:"tags,omitempty"`
// Message is the failure message
Message string `json:"message,omitempty"`
// MitreTactic is the MITRE ATT&CK tactic
MitreTactic string `json:"mitreTactic,omitempty"`
// MitreTechnique is the MITRE ATT&CK technique
MitreTechnique string `json:"mitreTechnique,omitempty"`
// UniqueID is the unique identifier of the alert
UniqueID string `json:"uniqueID,omitempty"`
}
type CdrAlertBatch ¶
type CdrAlertBatch struct {
// CustomerGUID is the unique identifier of the customer
CustomerGUID string `json:"customerGUID,omitempty"`
// CloudAccountID is the unique identifier of the cloud account
CloudAccountID string `json:"cloudAccountID,omitempty"`
// OrgID is the unique identifier of the organization
OrgID string `json:"orgID,omitempty"`
// Provider is the cloud provider
Provider CloudProvider `json:"provider,omitempty"`
// RuleFailures is the list of rule failures
RuleFailures []CdrAlert `json:"ruleFailures,omitempty"`
}
type CloudMetadata ¶
type CloudMetadata struct {
// Provider is the cloud provider
Provider CloudProvider `json:"provider,omitempty"`
// SourceService is the source service (e.g cloudtrail, cloudwatch, etc)
SourceService CloudService `json:"sourceService,omitempty"`
}
type CloudProvider ¶
type CloudProvider string
Cloud providers
const ( // AWS is the AWS cloud provider AWS CloudProvider = "aws" // Azure is the Microsoft Azure cloud provider Azure CloudProvider = "azure" )
type CloudService ¶
type CloudService string
Cloud services
const ( // CloudTrail is the cloudtrail service CloudTrail CloudService = "cloudtrail" // ActivityLogs is the Azure Activity Log service (control-plane audit log) ActivityLogs CloudService = "activitylogs" )
type CloudTrailEvent ¶
type CloudTrailEvent struct {
EventVersion string `json:"eventVersion"`
UserIdentity UserIdentity `json:"userIdentity"`
EventTime time.Time `json:"eventTime"`
EventSource string `json:"eventSource"`
EventName string `json:"eventName"`
AWSRegion string `json:"awsRegion"`
SourceIPAddress string `json:"sourceIPAddress"`
UserAgent string `json:"userAgent"`
ErrorCode string `json:"errorCode,omitempty"`
ErrorMessage string `json:"errorMessage,omitempty"`
RequestParameters map[string]interface{} `json:"requestParameters,omitempty"`
ResponseElements map[string]interface{} `json:"responseElements,omitempty"`
AdditionalEventData map[string]interface{} `json:"additionalEventData,omitempty"`
RequestID string `json:"requestId"`
EventID string `json:"eventId"`
EventType string `json:"eventType"`
APIVersion string `json:"apiVersion,omitempty"`
ReadOnly bool `json:"readOnly"`
ManagementEvent bool `json:"managementEvent"`
Resources []Resource `json:"resources,omitempty"`
RecipientAccountId string `json:"recipientAccountId,omitempty"`
VpcEndpointId string `json:"vpcEndpointId,omitempty"`
TLSDetails *TLSDetails `json:"tlsDetails,omitempty"`
ServiceEventDetails map[string]interface{} `json:"serviceEventDetails,omitempty"`
}
type CustomerDetails ¶
type EventData ¶
type EventData struct {
// AWSCloudTrail cloudtrail event
AWSCloudTrail *CloudTrailEvent `json:"awsCloudTrail,omitempty"`
// AzureActivityLog azure activity log event
AzureActivityLog *AzureActivityLogEvent `json:"azureActivityLog,omitempty"`
// Target resource
TargetResource string `json:"targetResource,omitempty"`
// Identifiers of the alert
Identifiers *common.Identifiers `json:"identifiers,omitempty"`
}
The types corresponds to the SourceService type
type OnBehalfOf ¶
type SessionContext ¶
type SessionContext struct {
SessionIssuer *SessionIssuer `json:"sessionIssuer,omitempty"`
Attributes *Attributes `json:"attributes,omitempty"`
}
type SessionIssuer ¶
type TLSDetails ¶
type UserIdentity ¶
type UserIdentity struct {
Type string `json:"type"`
PrincipalID string `json:"principalId"`
ARN string `json:"arn,omitempty"`
AccountID string `json:"accountId"`
OrgID string `json:"orgId,omitempty"`
AccessKeyID string `json:"accessKeyId,omitempty"`
UserName string `json:"userName,omitempty"`
InvokedBy string `json:"invokedBy,omitempty"`
SessionContext *SessionContext `json:"sessionContext,omitempty"`
OnBehalfOf *OnBehalfOf `json:"onBehalfOf,omitempty"`
CredentialId string `json:"credentialId,omitempty"`
}