in cfn_policy_validator/parsers/resource/parser.py [0:0]
def parse(cls, template, account_config):
# topologically sort which allows us to process dependent resources first
sorter = TopologicalSorter(template)
sorted_resources = sorter.sort_resources()
parsers = {
'AWS::S3::AccessPoint': S3AccessPointPolicyParser(),
'AWS::S3::MultiRegionAccessPointPolicy': S3MultiRegionAccessPointPolicyParser(),
'AWS::S3::BucketPolicy': S3BucketPolicyParser(),
'AWS::SQS::QueuePolicy': SqsQueuePolicyParser(),
'AWS::SNS::TopicPolicy': SnsTopicPolicyParser(),
'AWS::KMS::Key': KmsKeyPolicyParser(),
'AWS::Lambda::Permission': LambdaPermissionPolicyParser(account_config),
'AWS::Lambda::LayerVersionPermission': LambdaLayerVersionPermissionParser(account_config.partition),
'AWS::SecretsManager::ResourcePolicy': SecretsManagerPolicyParser()
}
invoked_parsers = set()
for resource in sorted_resources:
resource_type = resource.value['Type']
parser = parsers.get(resource_type)
if parser is not None:
LOGGER.info(f'Parsing resource type {resource_type} with logical name {resource.logical_name}..')
parser.parse(resource.logical_name, resource.value)
invoked_parsers.add(parser)
return [policy for parser in invoked_parsers for policy in parser.get_policies()]