Exemple #1
0
 def _do_statement_check(self, result: Result, logical_id: str,
                         statement: Statement,
                         filters_available_context: Dict,
                         resource: Resource):
     if statement.Effect == "Allow":
         for principal in statement.get_principal_list():
             account_id = get_account_id_from_principal(principal)
             filters_available_context["principal"] = principal
             filters_available_context["account_id"] = account_id
             if (
                     # checks if principal is a canonical id and is allowed
                     principal not in self.valid_principals
                     # if it wasn't a canonical id and contains a valid account id
                     and account_id not in self.valid_principals
                     # if principal is an AWS service
                     and not principal.endswith(".amazonaws.com")):
                 if statement.Condition and statement.Condition.dict():
                     # Ignoring condition checks since they will get reviewed in other rules and future improvements
                     pass
                 elif not self._config.aws_account_id:
                     logger.warning(
                         f"Not adding {type(self).__name__} failure in {logical_id} "
                         f"because no AWS Account ID was found in the config."
                     )
                 elif principal.startswith(
                         "GETATT") or principal.startswith("UNDEFINED_"):
                     self.add_failure_to_result(
                         result,
                         self.REASON.format(logical_id, principal),
                         rule_mode=RuleMode.DEBUG,
                         resource_ids={logical_id},
                         context=filters_available_context,
                         resource_types={resource.Type},
                     )
                 else:
                     self.add_failure_to_result(
                         result,
                         self.REASON.format(logical_id, principal),
                         resource_ids={logical_id},
                         context=filters_available_context,
                         resource_types={resource.Type},
                     )
 def _do_statement_check(self, result: Result, logical_id: str,
                         statement: Statement,
                         filters_available_context: Dict):
     if statement.Effect == "Allow":
         for principal in statement.get_principal_list():
             account_id = get_account_id_from_principal(principal)
             filters_available_context["principal"] = principal
             filters_available_context["account_id"] = account_id
             if (
                     # checks if principal is a canonical id and is whitelisted
                     principal not in self.valid_principals
                     # if it wasn't a canonical id and contains a valid account id
                     and account_id not in self.valid_principals
                     # if principal is an AWS service
                     and not principal.endswith(".amazonaws.com")):
                 if statement.Condition and statement.Condition.dict():
                     logger.warning(
                         f"Not adding {type(self).__name__} failure in {logical_id} "
                         f"because there are conditions: {statement.Condition}"
                     )
                 elif not self._config.aws_account_id:
                     logger.warning(
                         f"Not adding {type(self).__name__} failure in {logical_id} "
                         f"because no AWS Account ID was found in the config."
                     )
                 elif "GETATT" in principal or "UNDEFINED_" in principal:
                     self.add_failure_to_result(
                         result,
                         self.REASON.format(logical_id, principal),
                         rule_mode=RuleMode.DEBUG,
                         resource_ids={logical_id},
                         context=filters_available_context,
                     )
                 else:
                     self.add_failure_to_result(
                         result,
                         self.REASON.format(logical_id, principal),
                         resource_ids={logical_id},
                         context=filters_available_context,
                     )