def test_get_metrics_from_finding(mocker): expected_response = { 'generator_id': 'arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.3', 'type': '1.3 Ensure credentials unused for 90 days or greater are disabled', 'productArn': 'arn:aws:securityhub:' + my_region + '::product/aws/securityhub', 'finding_triggered_by': 'unit-test', 'region': mocker.ANY } finding = utils.load_test_data(test_data + 'cis_1-3-iamuser1.json', my_region).get('detail').get('findings')[0] ssmc = boto3.client('ssm', region_name=my_region) ssmc_s = Stubber(ssmc) ssmc_s.add_response('get_parameter', mock_ssm_get_parameter_uuid) ssmc_s.add_response('get_parameter', mock_ssm_get_parameter_version) ssmc_s.activate() mocker.patch('lib.metrics.Metrics.connect_to_ssm', return_value=ssmc) metrics = Metrics({"detail-type": "unit-test"}) assert metrics.get_metrics_from_finding(finding) == expected_response
def lambda_handler(event, context): LOGGER.debug(event) metrics = Metrics(event) try: for finding_rec in event['detail']['findings']: finding = Finding(finding_rec) remediate(finding, metrics.get_metrics_from_finding(finding_rec)) except Exception as e: LOGGER.error(e) APPLOGGER.flush() # flush the buffer to CW Logs
def test_send_metrics(mocker): expected_response = { 'Solution': 'SO0111', 'UUID': '12345678-1234-1234-1234-123412341234', 'TimeStamp': mocker.ANY, 'Data': { 'generator_id': 'arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.3', 'type': '1.3 Ensure credentials unused for 90 days or greater are disabled', 'productArn': mocker.ANY, 'finding_triggered_by': 'unit-test', 'region': mocker.ANY }, 'Version': 'v1.2.0TEST' } os.environ['sendAnonymousMetrics'] = 'Yes' finding = utils.load_test_data(test_data + 'cis_1-3-iamuser1.json', my_region).get('detail').get('findings')[0] ssmc = boto3.client('ssm', region_name=my_region) ssmc_s = Stubber(ssmc) ssmc_s.add_response('get_parameter', mock_ssm_get_parameter_uuid) ssmc_s.add_response('get_parameter', mock_ssm_get_parameter_version) ssmc_s.activate() mocker.patch('lib.metrics.Metrics.connect_to_ssm', return_value=ssmc) metrics = Metrics({"detail-type": "unit-test"}) metrics_data = metrics.get_metrics_from_finding(finding) send_metrics = mocker.patch('lib.metrics.Metrics.post_metrics_to_api', return_value=None) metrics.send_metrics(metrics_data) send_metrics.assert_called_with(expected_response)