diff --git a/checkov/terraform/tag_providers/__init__.py b/checkov/terraform/tag_providers/__init__.py index 2ebf68b19a..173240dc4b 100644 --- a/checkov/terraform/tag_providers/__init__.py +++ b/checkov/terraform/tag_providers/__init__.py @@ -12,11 +12,20 @@ def get_resource_tags(resource_type: str, entity_config: Dict[str, Any]) -> Opti if not isinstance(entity_config, dict): return None - if "_" not in resource_type: - return None # probably not a resource block - provider = resource_type[: resource_type.index("_")] - provider_tag_function = provider_tag_mapping.get(provider) + provider_tag = get_provider_tag(resource_type) + provider_tag_function = provider_tag_mapping.get(provider_tag) if provider_tag else None if provider_tag_function: return provider_tag_function(entity_config) else: return None + + +def get_provider_tag(resource_type: str) -> Optional[str]: + provider_tag = None + if 'aws' in resource_type: + provider_tag = "aws" + elif 'azure' in resource_type: + provider_tag = "azure" + elif 'gcp' in resource_type or 'google' in resource_type: + provider_tag = "gcp" + return provider_tag diff --git a/tests/terraform/test_provider_tags.py b/tests/terraform/test_provider_tags.py new file mode 100644 index 0000000000..84f989cb71 --- /dev/null +++ b/tests/terraform/test_provider_tags.py @@ -0,0 +1,13 @@ +import pytest + +from checkov.terraform.tag_providers import get_provider_tag + + +@pytest.mark.parametrize("resource_type, expected", [ + ("aws_instance.example", "aws"), + ("module.test.aws_instance.example", "aws"), + ("azure_instance.example", "azure"), + ("google_instance.example", "gcp"), +]) +def test_get_provider_tag(resource_type, expected) -> None: + assert get_provider_tag(resource_type) == expected