AWS SES Full Access Policy Attached to IAM Entity by Unusual User
Detects the first occurrence in 7 days of an AWS identity attaching the managed policy AmazonSESFullAccess to an IAM user, role, or group. AmazonSESFullAccess grants unrestricted permission to send email, manage identities and templates, manage suppression lists, and access SES account-level settings. Granting this policy to an unexpected IAM entity, particularly a newly created user or a role not previously associated with email operations, is a documented technique used by threat actors to establish phishing infrastructure on compromised AWS accounts, enabling them to send email on behalf of the victim organization's trusted sending domain. Using new terms on the calling identity suppresses recurring attachments by known email automation while surfacing identities performing this action for the first time.
Elastic rule (View on GitHub)
1[metadata]
2creation_date = "2026/08/31"
3integration = ["aws"]
4maturity = "production"
5updated_date = "2026/08/31"
6
7[rule]
8author = ["Elastic"]
9description = """
10Detects the first occurrence in 7 days of an AWS identity attaching the managed policy
11AmazonSESFullAccess to an IAM user, role, or group. AmazonSESFullAccess grants unrestricted
12permission to send email, manage identities and templates, manage suppression lists, and access
13SES account-level settings. Granting this policy to an unexpected IAM entity, particularly a newly
14created user or a role not previously associated with email operations, is a documented technique
15used by threat actors to establish phishing infrastructure on compromised AWS accounts, enabling
16them to send email on behalf of the victim organization's trusted sending domain. Using new terms
17on the calling identity suppresses recurring attachments by known email automation while
18surfacing identities performing this action for the first time.
19"""
20false_positives = [
21 """
22 Legitimate email service automation may attach AmazonSESFullAccess to a service account.
23 Validate the target IAM entity against known email automation roles and CI/CD pipeline identities.
24 Because this is a new terms rule keyed on the calling identity, recurring attachments by the
25 same automation will not re-alert within the 7-day history window; first-time attachments by
26 administrators performing legitimate setup may still trigger and should be validated against
27 change management records.
28 """,
29]
30from = "now-6m"
31index = ["logs-aws.cloudtrail-*"]
32language = "kuery"
33license = "Elastic License v2"
34name = "AWS SES Full Access Policy Attached to IAM Entity by Unusual User"
35note = """## Triage and analysis
36
37### Investigating AWS SES Full Access Policy Attached to IAM Entity by Unusual User
38
39AWS Simple Email Service (SES) is a cost-effective bulk email platform with a reputation built on a customer's verified sending domains. Threat actors who compromise an AWS account often establish phishing infrastructure by granting SES access to a new or existing IAM identity and then using that identity's credentials to send phishing emails under the victim organization's trusted domain. Attaching the managed policy `AmazonSESFullAccess` is the simplest way to grant the full range of SES capabilities (send, manage identities, manage suppression lists, configure sending settings).
40
41This is a new terms rule that alerts only when the calling identity (`aws.cloudtrail.user_identity.arn`) has not attached this policy within the previous 7 days, prioritizing anomalous or first-time activity over recurring automation.
42
43### Possible investigation steps
44
45- Identify the caller in `aws.cloudtrail.user_identity.arn` and `user.name`. Determine whether the caller is a legitimate administrator or an anomalous identity.
46- Identify the target IAM entity in `user.target.name` and `aws.cloudtrail.flattened.request_parameters.userName` (or `groupName` or `roleName`). Is this a known email automation account, or an entity created recently?
47- Query CloudTrail for all SES API calls (`event.provider: ses.amazonaws.com`) from the target entity in the time window after this attachment. Look for `SendEmail`, `SendRawEmail`, `VerifyEmailIdentity`, `SetIdentityMailFromDomain`, or `UpdateAccountSendingEnabled`.
48- Review whether the attachment corresponds to a legitimate change management process. Check for a corresponding IAM change window ticket.
49- Verify whether SES sending is enabled for the account (`ses:GetAccountSendingEnabled`) and whether there are existing or recently created SES identities.
50
51### False positive analysis
52
53- Legitimate email automation services (transactional email, notification services) may attach AmazonSESFullAccess. Confirm the target entity is a known service role.
54- CI/CD pipelines that manage email notification infrastructure may attach this policy. Validate via pipeline execution logs and source IP.
55
56### Response and remediation
57
58- If unauthorized, immediately detach AmazonSESFullAccess from the target entity and review all SES calls made under that identity.
59- Review SES account sending status and disable sending if any unauthorized email was sent.
60- Check SES suppression list for any unauthorized modifications (attackers may add or remove entries to influence deliverability).
61- Rotate all credentials associated with both the calling identity and the target entity.
62- Enable SES event publishing to review any emails sent during the unauthorized period.
63"""
64references = [
65 "https://docs.aws.amazon.com/ses/latest/dg/control-user-access.html"
66]
67risk_score = 47
68rule_id = "d2e3f4a5-b6c7-8901-bcde-f23456789012"
69setup = "The AWS integration must be ingesting management events into `logs-aws.cloudtrail-*`. No additional data event selectors are required — `iam:AttachUserPolicy`, `iam:AttachRolePolicy`, and `iam:AttachGroupPolicy` are management-plane APIs logged by default."
70severity = "medium"
71tags = [
72 "Domain: Cloud",
73 "Platform: AWS",
74 "Data Source: AWS",
75 "Data Source: Amazon Web Services",
76 "Service: AWS IAM",
77 "Service: AWS SES",
78 "Rule Type: New Terms",
79 "Tactic: Persistence",
80 "Tactic: Resource Development",
81 "Resources: Investigation Guide",
82]
83timestamp_override = "event.ingested"
84type = "new_terms"
85
86query = '''
87data_stream.dataset: "aws.cloudtrail"
88 and event.provider: "iam.amazonaws.com"
89 and event.action: ("AttachUserPolicy" or "AttachRolePolicy" or "AttachGroupPolicy")
90 and event.outcome: "success"
91 and aws.cloudtrail.flattened.request_parameters.policyArn: "arn:aws:iam::aws:policy/AmazonSESFullAccess"
92'''
93
94
95[[rule.threat]]
96framework = "MITRE ATT&CK"
97[[rule.threat.technique]]
98id = "T1098"
99name = "Account Manipulation"
100reference = "https://attack.mitre.org/techniques/T1098/"
101[[rule.threat.technique.subtechnique]]
102id = "T1098.003"
103name = "Additional Cloud Roles"
104reference = "https://attack.mitre.org/techniques/T1098/003/"
105
106
107[rule.threat.tactic]
108id = "TA0003"
109name = "Persistence"
110reference = "https://attack.mitre.org/tactics/TA0003/"
111[[rule.threat]]
112framework = "MITRE ATT&CK"
113[[rule.threat.technique]]
114id = "T1608"
115name = "Stage Capabilities"
116reference = "https://attack.mitre.org/techniques/T1608/"
117
118
119[rule.threat.tactic]
120id = "TA0042"
121name = "Resource Development"
122reference = "https://attack.mitre.org/tactics/TA0042/"
123
124[rule.new_terms]
125field = "new_terms_fields"
126value = ["aws.cloudtrail.user_identity.arn"]
127[[rule.new_terms.history_window_start]]
128field = "history_window_start"
129value = "now-7d"
130
131[rule.investigation_fields]
132field_names = [
133 "@timestamp",
134 "aws.cloudtrail.user_identity.arn",
135 "aws.cloudtrail.user_identity.type",
136 "aws.cloudtrail.user_identity.access_key_id",
137 "user.name",
138 "user.target.name",
139 "event.action",
140 "event.outcome",
141 "aws.cloudtrail.request_parameters",
142 "source.ip",
143 "cloud.region",
144 "cloud.account.id",
145]
Triage and analysis
Investigating AWS SES Full Access Policy Attached to IAM Entity by Unusual User
AWS Simple Email Service (SES) is a cost-effective bulk email platform with a reputation built on a customer's verified sending domains. Threat actors who compromise an AWS account often establish phishing infrastructure by granting SES access to a new or existing IAM identity and then using that identity's credentials to send phishing emails under the victim organization's trusted domain. Attaching the managed policy AmazonSESFullAccess is the simplest way to grant the full range of SES capabilities (send, manage identities, manage suppression lists, configure sending settings).
This is a new terms rule that alerts only when the calling identity (aws.cloudtrail.user_identity.arn) has not attached this policy within the previous 7 days, prioritizing anomalous or first-time activity over recurring automation.
Possible investigation steps
- Identify the caller in
aws.cloudtrail.user_identity.arnanduser.name. Determine whether the caller is a legitimate administrator or an anomalous identity. - Identify the target IAM entity in
user.target.nameandaws.cloudtrail.flattened.request_parameters.userName(orgroupNameorroleName). Is this a known email automation account, or an entity created recently? - Query CloudTrail for all SES API calls (
event.provider: ses.amazonaws.com) from the target entity in the time window after this attachment. Look forSendEmail,SendRawEmail,VerifyEmailIdentity,SetIdentityMailFromDomain, orUpdateAccountSendingEnabled. - Review whether the attachment corresponds to a legitimate change management process. Check for a corresponding IAM change window ticket.
- Verify whether SES sending is enabled for the account (
ses:GetAccountSendingEnabled) and whether there are existing or recently created SES identities.
False positive analysis
- Legitimate email automation services (transactional email, notification services) may attach AmazonSESFullAccess. Confirm the target entity is a known service role.
- CI/CD pipelines that manage email notification infrastructure may attach this policy. Validate via pipeline execution logs and source IP.
Response and remediation
- If unauthorized, immediately detach AmazonSESFullAccess from the target entity and review all SES calls made under that identity.
- Review SES account sending status and disable sending if any unauthorized email was sent.
- Check SES suppression list for any unauthorized modifications (attackers may add or remove entries to influence deliverability).
- Rotate all credentials associated with both the calling identity and the target entity.
- Enable SES event publishing to review any emails sent during the unauthorized period.
References
Related rules
- AWS Bedrock AgentCore Resource Created with IAM Execution Role
- AWS IAM OIDC Provider Created by Rare User
- AWS Route 53 Domain Transfer Lock Disabled
- AWS Route 53 Domain Transferred to Another Account
- AWS GetFederationToken Followed by Console Login via Federation Exchange