Ejemplo n.º 1
0
def capture_update_records(records):
    """Writes all updated configuration info to DynamoDB"""
    for record in records:
        data = cloudwatch.get_historical_base_info(record)
        group = describe_group(record)

        if len(group) > 1:
            raise Exception('[X] Multiple groups found. Record: {record}'.format(record=record))

        if not group:
            log.warning('[?] No group information found. Record: {record}'.format(record=record))
            continue

        group = group[0]

        # determine event data for group
        log.debug('Processing group. Group: {}'.format(group))
        data.update({
            'GroupId': group['GroupId'],
            'GroupName': group['GroupName'],
            'Description': group['Description'],
            'VpcId': group.get('VpcId'),
            'Tags': group.get('Tags', []),
            'arn': get_arn(group['GroupId'], group['OwnerId']),
            'OwnerId': group['OwnerId'],
            'configuration': group,
            'Region': cloudwatch.get_region(record)
        })

        log.debug('Writing Dynamodb Record. Records: {record}'.format(record=data))

        current_revision = CurrentSecurityGroupModel(**data)
        current_revision.save()
Ejemplo n.º 2
0
def create_delete_model(record):
    """Create a security group model from a record."""
    data = cloudwatch.get_historical_base_info(record)

    group_id = cloudwatch.filter_request_parameters('groupId', record)
    vpc_id = cloudwatch.filter_request_parameters('vpcId', record)
    group_name = cloudwatch.filter_request_parameters('groupName', record)

    arn = get_arn(group_id, record['account'])

    log.debug('[-] Deleting Dynamodb Records. Hash Key: {arn}'.format(arn=arn))

    # tombstone these records so that the deletion event time can be accurately tracked.
    data.update({
        'configuration': {}
    })

    items = list(CurrentSecurityGroupModel.query(arn, limit=1))

    if items:
        model_dict = items[0].__dict__['attribute_values'].copy()
        model_dict.update(data)
        model = CurrentSecurityGroupModel(**model_dict)
        model.save()
        return model
Ejemplo n.º 3
0
def capture_update_records(records):
    """Writes all updated configuration info to DynamoDB"""
    for rec in records:
        data = cloudwatch.get_historical_base_info(rec)
        group = describe_group(rec, cloudwatch.get_region(rec))

        if len(group) > 1:
            raise Exception(f'[X] Multiple groups found. Record: {rec}')

        if not group:
            LOG.warning(f'[?] No group information found. Record: {rec}')
            continue

        group = group[0]

        # Determine event data for group - and pop off items that are going to the top-level:
        LOG.debug(f'Processing group. Group: {group}')
        data.update({
            'GroupId':
            group['GroupId'],
            'GroupName':
            group.pop('GroupName'),
            'VpcId':
            group.pop('VpcId', None),
            'arn':
            get_arn(group.pop('GroupId'), cloudwatch.get_region(rec),
                    group.pop('OwnerId')),
            'Region':
            cloudwatch.get_region(rec)
        })

        data['Tags'] = pull_tag_dict(group)

        # Set the remaining items to the configuration:
        data['configuration'] = group

        # Set the version:
        data['version'] = VERSION

        LOG.debug(f'[+] Writing Dynamodb Record. Records: {data}')
        current_revision = CurrentSecurityGroupModel(**data)
        current_revision.save()