Back to Checks
Prowlerprowler-provider-alibabacloud
A log monitoring and alert is set up for unauthorized API calls
sls_unauthorized_api_calls_alert_enabled
Service: slsSeverity: medium
OfficialBuilt-inVerified
Categories:logging
Resource Type:ALIYUN::SLS::Alert
Alibaba Cloud SLS should have an alarm configured for unauthorized API calls. By directing ActionTrail logs to SLS with alert rules, API calls resulting in unauthorized errors are detected promptly, helping identify misconfigured applications, compromised credentials, or active attacker reconnaissance.
Risk
Without monitoring for unauthorized API calls, failed access patterns may go undetected. These often indicate malicious activity such as permission probing or exploiting misconfigured access controls. Delayed detection increases risk of security breaches by delaying identification of compromised credentials and privilege escalation attempts.
Run this check with Prowler
Run in Prowler CloudRun
prowler alibabacloud --checks sls_unauthorized_api_calls_alert_enabledRecommendation
- Log on to the SLS Console
- Ensure ActionTrail is enabled
- Select Alerts
- Ensure alert rule has been enabled for unauthorized API calls
Remediation
CLI
aliyun sls create-alert --project <project-name> --alert-name unauthorized-api-calls --alert-displayname 'Unauthorized API Calls Alert' --condition 'event.errorCode: Forbidden or event.errorCode: AccessDenied' --dashboard <dashboard-name> --schedule '{"type":"FixedRate","interval":"1m"}'Other
1Log on to the **SLS Console**.
2Ensure **ActionTrail** is enabled and delivering logs to a **Log Service** project.
3Navigate to the project receiving ActionTrail logs.
4Select **Alerts** and click **Create Alert Rule**.
5Configure the query to filter for unauthorized API calls: `event.errorCode: Forbidden or event.errorCode: AccessDenied`.
6Set the alert **schedule**, **notification method**, and **severity**.
7Save and enable the alert rule.
Check Code
from prowler.lib.check.models import Check, CheckReportAlibabaCloud
from prowler.providers.alibabacloud.services.sls.sls_client import sls_client
class sls_unauthorized_api_calls_alert_enabled(Check):
def execute(self) -> list[CheckReportAlibabaCloud]:
findings = []
found = False
for alert in sls_client.alerts:
query_list = alert.configuration.get("queryList", [])
if not query_list:
continue
for query_obj in query_list:
query = query_obj.get("query", "")
if "ApiCall" in query and (
"NoPermission" in query
or "Forbidden" in query
or "Forbbiden" in query
or "InvalidAccessKeyId" in query
or "InvalidSecurityToken" in query
or "SignatureDoesNotMatch" in query
or "InvalidAuthorization" in query
or "AccessForbidden" in query
or "NotAuthorized" in query
):
found = True
report = CheckReportAlibabaCloud(
metadata=self.metadata(), resource=alert
)
report.status = "PASS"
report.status_extended = f"SLS Alert {alert.name} is configured for unauthorized API calls."
report.resource_id = alert.name
report.resource_arn = alert.arn
report.region = alert.region
findings.append(report)
break
if found:
break
if not found:
report = CheckReportAlibabaCloud(
metadata=self.metadata(), resource=sls_client.provider.identity
)
report.status = "FAIL"
report.status_extended = (
"No SLS Alert configured for unauthorized API calls."
)
report.resource_id = sls_client.audited_account
report.resource_arn = sls_client.provider.identity.identity_arn
report.region = sls_client.region
findings.append(report)
return findings