chore(cloudwatch): add tags to missing checks report (#5261)

Co-authored-by: Sergio <sergio@prowler.com>
This commit is contained in:
Rubén De la Torre Vico
2024-10-04 00:04:43 +02:00
committed by GitHub
parent 8bb3bd0dcb
commit e389e0136f
22 changed files with 200 additions and 89 deletions
@@ -16,6 +16,7 @@ class cloudwatch_cross_account_sharing_disabled(Check):
if role.name == "CloudWatch-CrossAccountSharingRole":
report.resource_arn = role.arn
report.resource_id = role.name
report.resource_tags = role.tags
report.status = "FAIL"
report.status_extended = (
"CloudWatch has allowed cross-account sharing."
@@ -24,6 +24,7 @@ class cloudwatch_log_group_no_secrets_in_logs(Check):
report.region = log_group.region
report.resource_id = log_group.name
report.resource_arn = log_group.arn
report.resource_tags = log_group.tags
log_group_secrets = []
if log_group.log_streams:
for log_stream_name in log_group.log_streams:
@@ -82,10 +82,10 @@ class Logs(AWSService):
# Call AWSService's __init__
super().__init__(__class__.__name__, provider)
self.log_group_arn_template = f"arn:{self.audited_partition}:logs:{self.region}:{self.audited_account}:log-group"
self.metric_filters = []
self.log_groups = []
self.__threading_call__(self._describe_metric_filters)
self.__threading_call__(self._describe_log_groups)
self.metric_filters = []
self.__threading_call__(self._describe_metric_filters)
if self.log_groups:
if (
"cloudwatch_log_group_no_secrets_in_logs"
@@ -111,13 +111,20 @@ class Logs(AWSService):
):
if self.metric_filters is None:
self.metric_filters = []
log_group = None
for lg in self.log_groups:
if lg.name == filter["logGroupName"]:
log_group = lg
break
self.metric_filters.append(
MetricFilter(
arn=arn,
name=filter["filterName"],
metric=filter["metricTransformations"][0]["metricName"],
pattern=filter.get("filterPattern", ""),
log_group=filter["logGroupName"],
log_group=log_group,
region=regional_client.region,
)
)
@@ -242,15 +249,6 @@ class MetricAlarm(BaseModel):
tags: Optional[list] = []
class MetricFilter(BaseModel):
arn: str
name: str
metric: str
pattern: str
log_group: str
region: str
class LogGroup(BaseModel):
arn: str
name: str
@@ -264,6 +262,15 @@ class LogGroup(BaseModel):
tags: Optional[list] = []
class MetricFilter(BaseModel):
arn: str
name: str
metric: str
pattern: str
log_group: Optional[LogGroup]
region: str
def convert_to_cloudwatch_timestamp_format(epoch_time):
date_time = datetime.fromtimestamp(
epoch_time / 1000, datetime.now(timezone.utc).astimezone().tzinfo
@@ -18,18 +18,22 @@ def check_cloudwatch_log_metric_filter(
log_groups.append(trail.log_group_arn.split(":")[6])
# 2. Describe metric filters for previous log groups
for metric_filter in metric_filters:
if metric_filter.log_group in log_groups:
if re.search(metric_filter_pattern, metric_filter.pattern, flags=re.DOTALL):
report.resource_id = metric_filter.log_group
report.resource_arn = metric_filter.arn
report.region = metric_filter.region
report.status = "FAIL"
report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
# 3. Check if there is an alarm for the metric
for alarm in metric_alarms:
if alarm.metric == metric_filter.metric:
report.status = "PASS"
report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
break
if metric_filter.log_group.name in log_groups and re.search(
metric_filter_pattern, metric_filter.pattern, flags=re.DOTALL
):
report.resource_id = metric_filter.log_group.name
report.resource_arn = metric_filter.log_group.arn
report.region = metric_filter.log_group.region
report.resource_tags = metric_filter.log_group.tags
report.status = "FAIL"
report.status_extended = f"CloudWatch log group {metric_filter.log_group.name} found with metric filter {metric_filter.name} but no alarms associated."
# 3. Check if there is an alarm for the metric
for alarm in metric_alarms:
if alarm.metric == metric_filter.metric:
report.status = "PASS"
report.status_extended = f"CloudWatch log group {metric_filter.log_group.name} found with metric filter {metric_filter.name} and alarms set."
break
if report.status == "PASS":
break
return report
@@ -227,6 +227,12 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
],
)
# Tag the log group
logs_client.tag_log_group(
logGroupName="/log-group/test",
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"},
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -279,9 +285,15 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [
{
"tag_key_1": "tag_value_1",
"tag_key_2": "tag_value_2",
}
]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
@@ -320,6 +332,11 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test",
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"},
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -372,9 +389,15 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [
{
"tag_key_1": "tag_value_1",
"tag_key_2": "tag_value_2",
}
]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
@@ -413,6 +436,11 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test",
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"},
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -465,9 +493,15 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [
{
"tag_key_1": "tag_value_1",
"tag_key_2": "tag_value_2",
}
]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
@@ -506,6 +540,11 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test",
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"},
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -558,9 +597,15 @@ class Test_cloudwatch_changes_to_network_acls_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [
{
"tag_key_1": "tag_value_1",
"tag_key_2": "tag_value_2",
}
]
@mock_aws
def test_access_denied(self):
@@ -227,6 +227,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
],
)
logs_client.tag_log_group(
logGroupName="/log-group/test", tags={"tag_key": "tag_value"}
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -279,9 +283,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"tag_key": "tag_value"}]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
@@ -320,6 +325,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test", tags={"tag_key": "tag_value"}
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -372,9 +381,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"tag_key": "tag_value"}]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
@@ -413,6 +423,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test", tags={"tag_key": "tag_value"}
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -465,9 +479,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"tag_key": "tag_value"}]
@mock_aws
def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
@@ -506,6 +521,10 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
ActionsEnabled=True,
)
logs_client.tag_log_group(
logGroupName="/log-group/test", tags={"tag_key": "tag_value"}
)
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
Cloudtrail,
)
@@ -558,6 +577,7 @@ class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"tag_key": "tag_value"}]
@@ -279,7 +279,7 @@ class Test_cloudwatch_changes_to_network_route_tables_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_changes_to_network_route_tables_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_changes_to_network_route_tables_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_changes_to_network_route_tables_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_changes_to_vpcs_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_changes_to_vpcs_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_changes_to_vpcs_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_changes_to_vpcs_alarm_configured:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -52,6 +52,14 @@ class Test_cloudwatch_cross_account_sharing_disabled:
== "CloudWatch doesn't allow cross-account sharing."
)
assert result[0].resource_id == AWS_ACCOUNT_NUMBER
assert (
result[0].resource_arn
== f"arn:aws:iam:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:role"
or result[0].resource_arn
== f"arn:aws:iam:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:role"
)
assert result[0].region == AWS_REGION_EU_WEST_1
assert result[0].resource_tags == []
@mock_aws
def test_cloudwatch_log_group_with_cross_account_role(self):
@@ -59,7 +67,9 @@ class Test_cloudwatch_cross_account_sharing_disabled:
iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
# Request Logs group
iam_client.create_role(
RoleName="CloudWatch-CrossAccountSharingRole", AssumeRolePolicyDocument="{}"
RoleName="CloudWatch-CrossAccountSharingRole",
AssumeRolePolicyDocument="{}",
Tags=[{"Key": "Name", "Value": "CloudWatch-CrossAccountSharingRole"}],
)
from prowler.providers.aws.services.iam.iam_service import IAM
@@ -99,6 +109,17 @@ class Test_cloudwatch_cross_account_sharing_disabled:
== "CloudWatch has allowed cross-account sharing."
)
assert result[0].resource_id == "CloudWatch-CrossAccountSharingRole"
assert (
result[0].resource_arn
== f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/CloudWatch-CrossAccountSharingRole"
)
assert (
result[0].region == AWS_REGION_US_EAST_1
or result[0].region == AWS_REGION_EU_WEST_1
)
assert result[0].resource_tags == [
{"Key": "Name", "Value": "CloudWatch-CrossAccountSharingRole"}
]
@mock_aws
def test_access_denied(self):
@@ -52,7 +52,7 @@ class Test_cloudwatch_log_group_no_secrets_in_logs:
# Generate Logs Client
logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
# Request Logs group
logs_client.create_log_group(logGroupName="test")
logs_client.create_log_group(logGroupName="test", tags={"test": "test"})
logs_client.create_log_stream(logGroupName="test", logStreamName="test stream")
logs_client.put_log_events(
logGroupName="test",
@@ -99,13 +99,19 @@ class Test_cloudwatch_log_group_no_secrets_in_logs:
assert result[0].status == "PASS"
assert result[0].status_extended == "No secrets found in test log group."
assert result[0].resource_id == "test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:123456789012:log-group:test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"test": "test"}]
@mock_aws
def test_cloudwatch_log_group_with_secrets(self):
# Generate Logs Client
logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
# Request Logs group
logs_client.create_log_group(logGroupName="test")
logs_client.create_log_group(logGroupName="test", tags={"test": "test"})
logs_client.create_log_stream(logGroupName="test", logStreamName="test stream")
logs_client.put_log_events(
logGroupName="test",
@@ -154,6 +160,12 @@ class Test_cloudwatch_log_group_no_secrets_in_logs:
"Potential secrets found in log group", result[0].status_extended
)
assert result[0].resource_id == "test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:123456789012:log-group:test"
)
assert result[0].region == AWS_REGION_US_EAST_1
assert result[0].resource_tags == [{"test": "test"}]
@mock_aws
def test_access_denied(self):
@@ -287,7 +287,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -382,7 +382,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -477,7 +477,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -572,7 +572,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -287,7 +287,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -382,7 +382,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -477,7 +477,7 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -572,6 +572,6 @@ class Test_cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_c
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_authentication_failures:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_authentication_failures:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_authentication_failures:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_authentication_failures:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_aws_organizations_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_aws_organizations_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_aws_organizations_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_aws_organizations_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -287,7 +287,7 @@ class Test_cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -382,7 +382,7 @@ class Test_cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -477,7 +477,7 @@ class Test_cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -572,6 +572,6 @@ class Test_cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_for_s3_bucket_policy_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_for_s3_bucket_policy_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_for_s3_bucket_policy_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_for_s3_bucket_policy_changes:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_root_usage:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_root_usage:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_root_usage:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_root_usage:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -282,7 +282,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -375,7 +375,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -468,7 +468,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -561,6 +561,6 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_sign_in_without_mfa:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_sign_in_without_mfa:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_sign_in_without_mfa:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_sign_in_without_mfa:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -279,7 +279,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -372,7 +372,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -465,7 +465,7 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -558,6 +558,6 @@ class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
assert result[0].resource_id == "/log-group/test"
assert (
result[0].resource_arn
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
== f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
)
assert result[0].region == AWS_REGION_US_EAST_1
@@ -156,7 +156,7 @@ class Test_CloudWatch_Service:
)
logs = Logs(aws_provider)
assert len(logs.metric_filters) == 1
assert logs.metric_filters[0].log_group == "/log-group/test"
assert logs.metric_filters[0].log_group is None
assert logs.metric_filters[0].name == "test-filter"
assert logs.metric_filters[0].metric == "my-metric"
assert logs.metric_filters[0].pattern == "test-pattern"