def setUpClass(cls, mock_google_credential):
     """Set up."""
     fake_global_configs = {
         'securitycenter': {
             'max_calls': 1,
             'period': 1.1
         }
     }
     # securitycenter_alpha_api_client is alpha api client
     cls.securitycenter_alpha_api_client = securitycenter.SecurityCenterClient(
     )
     cls.securitycenter_beta_api_client = securitycenter.SecurityCenterClient(
         version='v1beta1')
     cls.project_id = 111111
     cls.source_id = 'organizations/111/sources/222'
Example #2
0
    def _send_findings_to_cscc(self, violations, source_id=None):
        """Send violations to CSCC directly via the CSCC API.

        Args:
            violations (dict): Violations to be uploaded as findings.
            source_id (str): Unique ID assigned by CSCC, to the organization
                that the violations are originating from.
        """

        # beta api
        formatted_cscc_findings = []
        LOGGER.debug(
            'Sending findings to CSCC with beta API. source_id: '
            '%s', source_id)
        new_findings = self._transform_for_api(violations, source_id=source_id)

        client = securitycenter.SecurityCenterClient(version='v1beta1')

        paged_findings_in_cscc = client.list_findings(source_id=source_id)

        # No need to use the next page token, as the results here will
        # return all the pages.
        for page in paged_findings_in_cscc:
            formated_findings_in_page = (ast.literal_eval(json.dumps(page)))
            findings_in_page = formated_findings_in_page.get('findings')
            for finding_data in findings_in_page:
                name = finding_data.get('name')
                finding_id = name[-32:]
                formatted_cscc_findings.append([finding_id, finding_data])

        inactive_findings = self.find_inactive_findings(
            new_findings, formatted_cscc_findings)

        for finding_list in new_findings:
            finding_id = finding_list[0]
            finding = finding_list[1]
            LOGGER.debug('Creating finding CSCC:\n%s.', finding)
            try:
                client.create_finding(finding,
                                      source_id=source_id,
                                      finding_id=finding_id)
                LOGGER.debug('Successfully created finding in CSCC:\n%s',
                             finding)
            except api_errors.ApiExecutionError:
                LOGGER.exception('Encountered CSCC API error.')
                continue

        for finding_list in inactive_findings:
            finding_id = finding_list[0]
            finding = finding_list[1]
            LOGGER.debug('Updating finding CSCC:\n%s.', finding)
            try:
                client.update_finding(finding, finding_id, source_id=source_id)
                LOGGER.debug('Successfully updated finding in CSCC:\n%s',
                             finding)
            except api_errors.ApiExecutionError:
                LOGGER.exception('Encountered CSCC API error.')
                continue

        return
Example #3
0
 def setUpClass(cls, mock_google_credential):
     """Set up."""
     fake_global_configs = {
         'securitycenter': {'max_calls': 1, 'period': 1.1}}
     cls.securitycenter_client = securitycenter.SecurityCenterClient(fake_global_configs)
     cls.project_id = 111111
     cls.source_id = 'organizations/111/sources/222'
 def test_no_quota(self, mock_google_credential):
     """Verify no rate limiter is used if the configuration is missing."""
     securitycenter_alpha_api_client = securitycenter.SecurityCenterClient()
     self.assertEqual(
         None, securitycenter_alpha_api_client.repository._rate_limiter)